2019-05-02 14:42:31 -06:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
2020-06-18 18:40:27 -06:00
|
|
|
# TODO: Move this to build scripts that require it on Debian
|
|
|
|
PATH="$PATH:/usr/sbin"
|
|
|
|
|
2019-05-02 14:42:31 -06:00
|
|
|
if [ -z "$1" ]
|
|
|
|
then
|
2020-04-06 14:49:40 -06:00
|
|
|
echo "$0 <model>" >&2
|
2019-05-02 14:42:31 -06:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
MODEL="$1"
|
|
|
|
|
2019-09-20 14:21:49 -06:00
|
|
|
if [ ! -d "models/${MODEL}" ]
|
2019-05-02 14:42:31 -06:00
|
|
|
then
|
2019-09-20 14:21:49 -06:00
|
|
|
echo "model '${MODEL}' not found" >&2
|
2019-05-02 14:42:31 -06:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
MODEL_DIR="$(realpath "models/${MODEL}")"
|
|
|
|
|
2023-05-30 17:49:41 -06:00
|
|
|
DATE="$(git show --format="%cd" --date="format:%Y-%m-%d" --no-patch --no-show-signature)"
|
2022-01-18 09:55:52 -07:00
|
|
|
REV="$(git describe --always --dirty --abbrev=7)"
|
2019-10-03 11:06:38 -06:00
|
|
|
VERSION="${DATE}_${REV}"
|
|
|
|
echo "Building '${VERSION}' for '${MODEL}'"
|
|
|
|
|
2019-05-02 19:43:10 -06:00
|
|
|
# Clean build directory
|
2019-05-02 19:59:24 -06:00
|
|
|
mkdir -p build
|
|
|
|
BUILD="$(realpath "build/${MODEL}")"
|
2019-06-18 12:48:56 -06:00
|
|
|
rm -rf "${BUILD}"
|
2019-05-02 19:43:10 -06:00
|
|
|
mkdir -p "${BUILD}"
|
|
|
|
|
|
|
|
UEFIPAYLOAD="${BUILD}/UEFIPAYLOAD.fd"
|
2020-04-08 12:56:46 -06:00
|
|
|
COREBOOT="${BUILD}/firmware.rom"
|
2019-05-02 19:43:10 -06:00
|
|
|
USB="${BUILD}/usb.img"
|
2019-09-20 14:19:57 -06:00
|
|
|
EDK2_ARGS=(
|
2019-10-03 10:26:56 -06:00
|
|
|
-D SHELL_TYPE=NONE
|
2019-09-20 14:19:57 -06:00
|
|
|
-D SOURCE_DEBUG_ENABLE=FALSE
|
|
|
|
)
|
2019-05-02 14:42:31 -06:00
|
|
|
|
|
|
|
# Rebuild firmware-setup (used by edk2)
|
|
|
|
touch apps/firmware-setup/Cargo.toml
|
2019-06-10 13:16:39 -06:00
|
|
|
make -C apps/firmware-setup
|
2019-09-20 14:19:57 -06:00
|
|
|
EDK2_ARGS+=(
|
|
|
|
-D FIRMWARE_OPEN_FIRMWARE_SETUP="firmware-setup/firmware-setup.inf"
|
|
|
|
)
|
2019-05-02 14:42:31 -06:00
|
|
|
|
2019-05-03 13:55:13 -06:00
|
|
|
# Rebuild gop-policy (used by edk2)
|
2019-09-20 14:19:57 -06:00
|
|
|
if [ -e "${MODEL_DIR}/IntelGopDriver.inf" -a -e "${MODEL_DIR}/vbt.rom" ]
|
|
|
|
then
|
|
|
|
touch apps/gop-policy/Cargo.toml
|
|
|
|
FIRMWARE_OPEN_VBT="${MODEL_DIR}/vbt.rom" \
|
|
|
|
make -C apps/gop-policy
|
|
|
|
EDK2_ARGS+=(
|
|
|
|
-D FIRMWARE_OPEN_GOP_POLICY="gop-policy/gop-policy.inf"
|
|
|
|
-D FIRMWARE_OPEN_GOP="IntelGopDriver.inf"
|
|
|
|
)
|
|
|
|
fi
|
2019-05-03 13:55:13 -06:00
|
|
|
|
2020-12-29 10:56:01 -07:00
|
|
|
# Add any arguments in edk2.config
|
|
|
|
if [ -e "${MODEL_DIR}/edk2.config" ]
|
|
|
|
then
|
|
|
|
while read line
|
|
|
|
do
|
|
|
|
if [[ "$line" != "#"* ]]
|
|
|
|
then
|
|
|
|
EDK2_ARGS+=(-D "$line")
|
|
|
|
fi
|
|
|
|
done < "${MODEL_DIR}/edk2.config"
|
|
|
|
fi
|
|
|
|
|
2019-05-02 14:42:31 -06:00
|
|
|
# Rebuild CorebootPayloadPkg using edk2
|
2019-05-02 19:43:10 -06:00
|
|
|
PACKAGES_PATH="${MODEL_DIR}:$(realpath edk2-platforms):$(realpath apps)" \
|
2019-06-10 13:16:39 -06:00
|
|
|
./scripts/_build/edk2.sh \
|
2019-05-02 19:43:10 -06:00
|
|
|
"${UEFIPAYLOAD}" \
|
2019-09-20 14:19:57 -06:00
|
|
|
"${EDK2_ARGS[@]}"
|
2019-05-02 14:42:31 -06:00
|
|
|
|
|
|
|
# Rebuild coreboot
|
2019-05-02 19:43:10 -06:00
|
|
|
FIRMWARE_OPEN_MODEL_DIR="${MODEL_DIR}" \
|
|
|
|
FIRMWARE_OPEN_UEFIPAYLOAD="${UEFIPAYLOAD}" \
|
2019-10-03 11:06:38 -06:00
|
|
|
KERNELVERSION="${VERSION}" \
|
2019-05-02 19:43:10 -06:00
|
|
|
./scripts/_build/coreboot.sh \
|
|
|
|
"${MODEL_DIR}/coreboot.config" \
|
|
|
|
"${COREBOOT}"
|
2019-05-02 16:08:54 -06:00
|
|
|
|
2020-04-06 14:49:40 -06:00
|
|
|
# Rebuild EC firmware for System76 EC models
|
|
|
|
if [ ! -e "${MODEL_DIR}/ec.rom" -a -e "${MODEL_DIR}/ec.config" ]
|
|
|
|
then
|
|
|
|
env VERSION="${VERSION}" \
|
|
|
|
./scripts/_build/ec.sh \
|
|
|
|
"${MODEL_DIR}/ec.config" \
|
|
|
|
"${BUILD}/ec.rom"
|
|
|
|
fi
|
|
|
|
|
2019-09-20 14:21:49 -06:00
|
|
|
if [ "${MODEL}" != "qemu" ]
|
2019-09-20 14:19:57 -06:00
|
|
|
then
|
2019-09-20 14:21:49 -06:00
|
|
|
# Rebuild firmware-update
|
2020-04-08 12:56:46 -06:00
|
|
|
export BASEDIR="system76_${MODEL}_${VERSION}"
|
2019-09-20 14:21:49 -06:00
|
|
|
pushd apps/firmware-update >/dev/null
|
2020-10-19 13:08:23 -06:00
|
|
|
rm -rf "build/x86_64-unknown-uefi"
|
|
|
|
make "build/x86_64-unknown-uefi/boot.img"
|
|
|
|
cp -v "build/x86_64-unknown-uefi/boot.img" "${USB}.partial"
|
2019-09-20 14:21:49 -06:00
|
|
|
popd >/dev/null
|
|
|
|
|
|
|
|
# Copy firmware to USB image
|
|
|
|
mmd -i "${USB}.partial@@1M" "::${BASEDIR}/firmware"
|
2020-04-07 13:18:25 -06:00
|
|
|
mcopy -v -i "${USB}.partial@@1M" "${COREBOOT}" "::${BASEDIR}/firmware/firmware.rom"
|
|
|
|
if [ -e "${BUILD}/ec.rom" ]
|
2019-09-20 14:21:49 -06:00
|
|
|
then
|
2020-04-07 13:18:25 -06:00
|
|
|
mcopy -v -i "${USB}.partial@@1M" "${BUILD}/ec.rom" "::${BASEDIR}/firmware/ec.rom"
|
2020-07-17 09:17:43 -06:00
|
|
|
elif [ -e "${MODEL_DIR}/ec.rom" ]
|
2020-04-07 13:18:25 -06:00
|
|
|
then
|
|
|
|
mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/ec.rom" "::${BASEDIR}/firmware/ec.rom"
|
2020-07-17 09:17:43 -06:00
|
|
|
fi
|
|
|
|
if [ -e "${MODEL_DIR}/uecflash.efi" ]
|
|
|
|
then
|
2020-04-07 13:18:25 -06:00
|
|
|
mcopy -v -i "${USB}.partial@@1M" "${MODEL_DIR}/uecflash.efi" "::${BASEDIR}/firmware/uecflash.efi"
|
2019-09-20 14:21:49 -06:00
|
|
|
fi
|
|
|
|
mv -v "${USB}.partial" "${USB}"
|
2019-09-20 14:19:57 -06:00
|
|
|
fi
|
2019-10-03 11:06:38 -06:00
|
|
|
|
|
|
|
echo "Built '${VERSION}' for '${MODEL}'"
|