mirror of
https://github.com/Dasharo/coreboot.git
synced 2026-06-13 10:16:48 -07:00
eef969814a
The Protectli logo is now added within the buildsystem, it doesn't need to be patched externally in build.sh. Upstream-Status: Inappropriate [Dasharo downstream] Signed-off-by: Filip Lewiński <filip.lewinski@3mdeb.com> Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
477 lines
15 KiB
Bash
Executable File
477 lines
15 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
usage() {
|
|
echo "${0} CMD"
|
|
echo "Available CMDs:"
|
|
echo -e "\tz690a_ddr4 - build Dasharo image compatible with MSI PRO Z690-A (WIFI) DDR4"
|
|
echo -e "\tz690a_ddr5 - build Dasharo image compatible with MSI PRO Z690-A (WIFI)"
|
|
echo -e "\tz790p_ddr4 - build Dasharo image compatible with MSI PRO Z790-P (WIFI) DDR4"
|
|
echo -e "\tz790p_ddr5 - build Dasharo image compatible with MSI PRO Z790-P (WIFI)"
|
|
echo -e "\tvp66xx - build Dasharo for Protectli VP66xx"
|
|
echo -e "\tvp46xx - build Dasharo for Protectli VP46xx"
|
|
echo -e "\tvp32xx - build Dasharo for Protectli VP32xx"
|
|
echo -e "\tvp2440 - build Dasharo for Protectli VP2440"
|
|
echo -e "\tvp2430 - build Dasharo for Protectli VP2430"
|
|
echo -e "\tvp2420 - build Dasharo for Protectli VP2420"
|
|
echo -e "\tvp2410 - build Dasharo for Protectli VP2410"
|
|
echo -e "\tV1210 - build Dasharo for Protectli V1210"
|
|
echo -e "\tV1211 - build Dasharo for Protectli V1211"
|
|
echo -e "\tV1410 - build Dasharo for Protectli V1410"
|
|
echo -e "\tV1610 - build Dasharo for Protectli V1610"
|
|
echo -e "\tns5x_adl - build Dasharo for Novacustom NS5x_ADL"
|
|
echo -e "\tns5x_tgl - build Dasharo for Novacustom NS5x_TGL"
|
|
echo -e "\tnv4x_adl - build Dasharo for Novacustom NV4x_ADL"
|
|
echo -e "\tnv4x_tgl - build Dasharo for Novacustom NV4x_TGL"
|
|
echo -e "\tv540tnx - build Dasharo for Novacustom V540TNx"
|
|
echo -e "\tv540tu - build Dasharo for Novacustom V540TU"
|
|
echo -e "\tv560tnx - build Dasharo for Novacustom V560TNx"
|
|
echo -e "\tv560tu - build Dasharo for Novacustom V560TU"
|
|
echo -e "\tnuc_box - build Dasharo for Novacustom NUC BOX"
|
|
echo -e "\tapu2 - build Dasharo for PC Engines APU2"
|
|
echo -e "\tapu3 - build Dasharo for PC Engines APU3"
|
|
echo -e "\tapu4 - build Dasharo for PC Engines APU4"
|
|
echo -e "\tapu6 - build Dasharo for PC Engines APU6"
|
|
echo -e "\toptiplex_9010_uefi - build Dasharo compatible with Dell OptiPlex 7010/9010 (UEFI)"
|
|
echo -e "\toptiplex_9010_seabios - build Dasharo compatible with Dell OptiPlex 7010/9010 (SeaBIOS)"
|
|
echo -e "\tqemu - build Dasharo for QEMU Q35"
|
|
echo -e "\tqemu_full - build Dasharo for QEMU Q35 with all menus available"
|
|
echo -e "\todroid_h4 - build Dasharo compatible with Hardkernel ODROID H4"
|
|
echo -e "\todroid_h4_netcard - build Dasharo compatible with Hardkernel ODROID H4 for netcard support"
|
|
echo -e "\tasrock_spc741d8 - build Dasharo compatible with ASRock Rack SPC741D8-2L2T/BCM"
|
|
}
|
|
|
|
DASHARO_SDK=${DASHARO_SDK:-"ghcr.io/dasharo/dasharo-sdk:v1.6.0"}
|
|
BUILD_TIMELESS=${BUILD_TIMELESS:-0}
|
|
AIRGAP=${AIRGAP:-0}
|
|
|
|
function sdk_run {
|
|
docker run --rm -t -u $UID -v $PWD:/home/coreboot/coreboot \
|
|
-v $HOME/.ssh:/home/coreboot/.ssh \
|
|
-e BUILD_TIMELESS=${BUILD_TIMELESS} \
|
|
-w /home/coreboot/coreboot ${DASHARO_SDK} \
|
|
"$@"
|
|
}
|
|
|
|
function build_prep {
|
|
if [ "${AIRGAP}" -eq 1 ]; then
|
|
sdk_run /bin/bash -c "make clean"
|
|
else
|
|
sdk_run /bin/bash -c "make distclean"
|
|
fi
|
|
|
|
cp "${DEFCONFIG}" .config
|
|
|
|
git submodule update --init --checkout $@
|
|
}
|
|
|
|
function build_start {
|
|
if [ "${AIRGAP}" -eq 1 ]; then
|
|
|
|
# In this situation we assume that provided repository is ready to be used
|
|
# and nothing should be downloaded during build process.
|
|
|
|
if [ -d "${EDK2_REPO_PATH}" ]; then
|
|
# Without following sequence workspce would be created by docker with root
|
|
# privilidges and build will fail.
|
|
# Target directory
|
|
TARGET_DIR="payloads/external/edk2/workspace/Dasharo"
|
|
mkdir -p "$TARGET_DIR"
|
|
chown -R $(id -u):$(id -g) "$TARGET_DIR"
|
|
chmod -R 755 "$TARGET_DIR"
|
|
sdk_run --network none \
|
|
${EDK2_REPO_PATH:+-v $EDK2_REPO_PATH:/home/coreboot/coreboot/${TARGET_DIR}} \
|
|
/bin/bash -c "make olddefconfig && make -j$(nproc)"
|
|
else
|
|
echo "EDK2_REPO_PATH is not defined in AIRGAP!"
|
|
exit 1
|
|
fi
|
|
else
|
|
sdk_run /bin/bash -c "make olddefconfig && make -j$(nproc)"
|
|
fi
|
|
}
|
|
|
|
function build_optiplex_9010 {
|
|
DEFCONFIG=$1
|
|
# Determine FW flavor first (uefi or seabios)
|
|
if [[ ${DEFCONFIG} == *"uefi"* ]]; then
|
|
FW_FLAVOR="uefi"
|
|
else
|
|
FW_FLAVOR="seabios"
|
|
fi
|
|
|
|
# Get FW version
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
# Combine FW flavor with version
|
|
FW_VERSION="${FW_FLAVOR}_${FW_VERSION}"
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo compatible with Dell OptiPlex 7010/9010 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom ${BOARD}_${FW_VERSION}.rom
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/${BOARD}_${FW_VERSION}.rom"
|
|
sha256sum ${BOARD}_${FW_VERSION}.rom > ${BOARD}_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_msi {
|
|
DEFCONFIG="configs/config.${BOARD}_$1"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo compatible with MSI PRO $2(WIFI) (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom ${BOARD}_${FW_VERSION}_$1.rom
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/${BOARD}_${FW_VERSION}_$1.rom"
|
|
sha256sum ${BOARD}_${FW_VERSION}_$1.rom > ${BOARD}_${FW_VERSION}_$1.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_protectli_vault {
|
|
DEFCONFIG="configs/config.protectli_${BOARD}"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo for Protectli $BOARD (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom protectli_${BOARD}_${FW_VERSION}.rom
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/protectli_${BOARD}_${FW_VERSION}.rom"
|
|
sha256sum protectli_${BOARD}_${FW_VERSION}.rom > protectli_${BOARD}_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_v1x10 {
|
|
DEFCONFIG="configs/config.protectli_vault_jsl_$1"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo for Protectli $1 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom protectli_$1_${FW_VERSION}.rom
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/protectli_$1_${FW_VERSION}.rom"
|
|
sha256sum protectli_$1_${FW_VERSION}.rom > protectli_$1_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_novacustom {
|
|
DEFCONFIG="configs/config.novacustom_$1"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo for Novacustom $1 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom novacustom_$1_${FW_VERSION}.rom
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/novacustom_$1_${FW_VERSION}.rom"
|
|
sha256sum novacustom_$1_${FW_VERSION}.rom > novacustom_$1_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
function build_novacustom_v5x0tu {
|
|
DEFCONFIG="configs/config.novacustom_$1"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
# Obtain LAN ROM blob from release binary
|
|
wget -O UEFIExtract_NE_A68_x64_linux.zip https://github.com/LongSoft/UEFITool/releases/download/A68/UEFIExtract_NE_A68_x64_linux.zip
|
|
unzip -o UEFIExtract_NE_A68_x64_linux.zip
|
|
wget -O novacustom_v54x_mtl_v0.9.0.rom https://dl.3mdeb.com/open-source-firmware/Dasharo/novacustom_v54x_mtl/v0.9.0/novacustom_v54x_mtl_v0.9.0.rom
|
|
|
|
# Extract and transfer LAN ROM blob
|
|
docker run --rm -t -u $UID -v $PWD:/home/coreboot/coreboot \
|
|
-v $HOME/.ssh:/home/coreboot/.ssh \
|
|
-w /home/coreboot/coreboot ${DASHARO_SDK} \
|
|
/bin/bash -c "make -C util/cbfstool && \
|
|
util/cbfstool/cbfstool novacustom_v54x_mtl_v0.9.0.rom extract -r COREBOOT -f payload -n fallback/payload -m x86"
|
|
|
|
./uefiextract payload DEB917C0-C56A-4860-A05B-BF2F22EBB717
|
|
mkdir -p 3rdparty/blobs/mainboard/novacustom/mtl-h
|
|
cp payload.dump/2\ 8C8CE578-8A3D-4F1C-9935-896185C32DD3/82\ DEB917C0-C56A-4860-A05B-BF2F22EBB717/1\ PE32\ image\ section/body.bin 3rdparty/blobs/mainboard/novacustom/mtl-h/LanRom.efi
|
|
rm -rf payload.dump
|
|
|
|
echo "Building Dasharo for Novacustom $1 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom novacustom_$1_${FW_VERSION}.rom
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/novacustom_$1_${FW_VERSION}.rom"
|
|
sha256sum novacustom_$1_${FW_VERSION}.rom > novacustom_$1_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_pcengines {
|
|
VARIANT=$1
|
|
DEFCONFIG="configs/config.pcengines_uefi_${VARIANT}"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
# checkout several submodules needed by these boards (some others are checked
|
|
# out by coreboot's Makefile)
|
|
build_prep 3rdparty/dasharo-blobs 3rdparty/vboot
|
|
|
|
echo "Building Dasharo for PC Engines ${VARIANT^^*} (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom pcengines_${VARIANT}_${FW_VERSION}.rom
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/pcengines_${VARIANT}_${FW_VERSION}.rom"
|
|
sha256sum pcengines_${VARIANT}_${FW_VERSION}.rom > pcengines_${VARIANT}_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_qemu {
|
|
DEFCONFIG="configs/config.emulation_qemu_x86_q35_uefi${1:-}"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
# checkout several submodules needed by these boards (some others are checked
|
|
# out by coreboot's Makefile)
|
|
build_prep 3rdparty/dasharo-blobs
|
|
|
|
echo "Building Dasharo for QEMU Q35 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom qemu_q35_${FW_VERSION}.rom
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/qemu_q35_${FW_VERSION}.rom"
|
|
sha256sum qemu_q35_${FW_VERSION}.rom > qemu_q35_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_odroid_h4 {
|
|
VARIANT=$1
|
|
DEFCONFIG="configs/config.hardkernel_${VARIANT}"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
# checkout several submodules needed by these boards (some others are checked
|
|
# out by coreboot's Makefile)
|
|
build_prep 3rdparty/dasharo-blobs
|
|
|
|
echo "Building Dasharo compatbile with Hardkernel ODROID H4 (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom hardkernel_${VARIANT}_${FW_VERSION}.rom
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/hardkernel_${VARIANT}_${FW_VERSION}.rom"
|
|
sha256sum hardkernel_${VARIANT}_${FW_VERSION}.rom > hardkernel_${VARIANT}_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function build_asrock_rack {
|
|
DEFCONFIG="configs/config.asrock_spc741d8"
|
|
FW_VERSION=$(cat ${DEFCONFIG} | grep CONFIG_LOCALVERSION | cut -d '=' -f 2 | tr -d '"')
|
|
|
|
build_prep
|
|
|
|
echo "Building Dasharo for ASRock Rack SPC741D8-2L2T/BCM (version $FW_VERSION)"
|
|
|
|
build_start
|
|
|
|
cp build/coreboot.rom asrock_spc741d8_${FW_VERSION}.rom
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Result binary placed in $PWD/asrock_spc741d8_${FW_VERSION}.rom"
|
|
sha256sum asrock_spc741d8_${FW_VERSION}.rom > asrock_spc741d8_${FW_VERSION}.rom.sha256
|
|
else
|
|
echo "Build failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if [ $# -lt 1 ]; then
|
|
usage
|
|
exit
|
|
fi
|
|
|
|
CMD="$1"
|
|
|
|
case "$CMD" in
|
|
"ddr4" | "z690a_ddr4" | "ms7d25_ddr4")
|
|
BOARD="msi_ms7d25"
|
|
build_msi ddr4 "Z690-A DDR4 "
|
|
;;
|
|
"ddr5" | "z690a_ddr5" | "ms7d25_ddr5")
|
|
BOARD="msi_ms7d25"
|
|
build_msi ddr5 "Z690-A DDR5 "
|
|
;;
|
|
"z790p_ddr4" | "ms7e06_ddr4")
|
|
BOARD="msi_ms7e06"
|
|
build_msi ddr4 "Z790-P DDR4 "
|
|
;;
|
|
"z790p_ddr5" | "ms7e06_ddr5")
|
|
BOARD="msi_ms7e06"
|
|
build_msi ddr5 "Z790-P DDR5 "
|
|
;;
|
|
"vp66xx" | "VP66XX")
|
|
BOARD="vp66xx"
|
|
build_protectli_vault
|
|
;;
|
|
"vp46xx" | "VP46XX")
|
|
BOARD="vp46xx"
|
|
build_protectli_vault
|
|
;;
|
|
"vp32xx" | "VP32XX")
|
|
BOARD="vp32xx"
|
|
build_protectli_vault
|
|
;;
|
|
"vp2410" | "VP2410")
|
|
BOARD="vp2410"
|
|
build_protectli_vault
|
|
;;
|
|
"vp2420" | "VP2420")
|
|
BOARD="vp2420"
|
|
build_protectli_vault
|
|
;;
|
|
"vp2430" | "VP2430")
|
|
BOARD="vp2430"
|
|
build_protectli_vault
|
|
;;
|
|
"vp2440" | "VP2440")
|
|
BOARD="vp2440"
|
|
build_protectli_vault
|
|
;;
|
|
"v1210" | "V1210" )
|
|
build_v1x10 "v1210"
|
|
;;
|
|
"v1211" | "V1211" )
|
|
build_v1x10 "v1211"
|
|
;;
|
|
"v1410" | "V1410" )
|
|
build_v1x10 "v1410"
|
|
;;
|
|
"v1610" | "V1610" )
|
|
build_v1x10 "v1610"
|
|
;;
|
|
"v540tnx" | "V540TNx" | "V540TNX" )
|
|
BOARD="v540tnx"
|
|
build_novacustom "v540tnx"
|
|
;;
|
|
"v560tnx" | "V560TNx" | "V560TNX" )
|
|
BOARD="v560tnx"
|
|
build_novacustom "v560tnx"
|
|
;;
|
|
"nv4x_adl" | "NV4x_ADL" | "NV4X_ADL" )
|
|
BOARD="nv4x_adl"
|
|
build_novacustom "nv4x_adl"
|
|
;;
|
|
"nv4x_tgl" | "NV4x_tgl" | "NV4X_TGL" )
|
|
BOARD="nv4x_tgl"
|
|
build_novacustom "nv4x_tgl"
|
|
;;
|
|
"ns5x_adl" | "NS5x_ADL" | "NS5X_ADL" )
|
|
BOARD="ns5x_adl"
|
|
build_novacustom "ns5x_adl"
|
|
;;
|
|
"ns5x_tgl" | "NS5x_TGL" | "NS5X_TGL" )
|
|
BOARD="ns5x_tgl"
|
|
build_novacustom "ns5x_tgl"
|
|
;;
|
|
"v560tu" | "V560TU" )
|
|
BOARD="v560tu"
|
|
build_novacustom_v5x0tu "v560tu"
|
|
;;
|
|
"nuc_box" | "nucbox" )
|
|
BOARD="nuc_box"
|
|
build_novacustom "nuc_box"
|
|
;;
|
|
"v540tu" | "V540TU" )
|
|
BOARD="v540tu"
|
|
build_novacustom_v5x0tu "v540tu"
|
|
;;
|
|
"apu2" | "APU2" )
|
|
build_pcengines "apu2"
|
|
;;
|
|
"apu3" | "APU3" )
|
|
build_pcengines "apu3"
|
|
;;
|
|
"apu4" | "APU4" )
|
|
build_pcengines "apu4"
|
|
;;
|
|
"apu6" | "APU6" )
|
|
build_pcengines "apu6"
|
|
;;
|
|
"optiplex_9010_uefi" | "optiplex_9010_sff_uefi")
|
|
BOARD="optiplex_9010"
|
|
build_optiplex_9010 "configs/config.dell_optiplex_9010_sff_uefi_txt"
|
|
;;
|
|
"optiplex_9010_seabios" | "optiplex_9010_sff")
|
|
BOARD="optiplex_9010"
|
|
build_optiplex_9010 "configs/config.dell_optiplex_9010_sff_txt"
|
|
;;
|
|
"qemu" | "QEMU" | "q35" | "Q35" | "x86_q35_uefi" )
|
|
build_qemu
|
|
;;
|
|
"qemu_full" | "QEMU_full" | "q35_full" | "Q35_full" | "x86_q35_uefi_all_menus" )
|
|
build_qemu "_all_menus"
|
|
;;
|
|
"odroid_h4" | "odroid_H4" | "ODROID_H4" )
|
|
build_odroid_h4 "odroid_h4"
|
|
;;
|
|
"odroid_h4_netcard" | "odroid_H4_netcard" | "ODROID_H4_NETCARD" )
|
|
build_odroid_h4 "odroid_h4_netcard"
|
|
;;
|
|
"asrock_spc741d8")
|
|
build_asrock_rack
|
|
;;
|
|
*)
|
|
echo "Invalid command: \"$CMD\""
|
|
usage
|
|
;;
|
|
esac
|