edk2-sdm845/build.sh

238 lines
8.2 KiB
Bash
Raw Normal View History

2020-10-08 00:09:09 +08:00
#!/bin/bash
2021-03-19 12:01:52 +08:00
2020-10-08 00:09:09 +08:00
##### Change this to add device #####
DEVICES=(
dipper
enchilada
fajita
2021-08-22 06:34:19 +08:00
polaris
2021-01-12 22:23:58 +08:00
beryllium
perseus
2021-03-07 10:02:01 +08:00
nx616j
2021-03-09 15:25:32 +08:00
m1882
m1892
2021-03-15 10:56:35 +08:00
skr-a0
2021-03-15 12:01:03 +08:00
judyln
star2qltechn
dipper-old
2021-03-22 16:14:00 +08:00
pafm00
2021-03-28 21:08:22 +08:00
trident
olympic
draco
pd1821
2021-09-30 02:12:44 +08:00
odin-base
akershus
equuleus
2020-10-08 00:09:09 +08:00
)
#####################################
2021-03-19 12:01:52 +08:00
2020-10-08 00:09:09 +08:00
function _help(){
echo "Usage: build.sh --device DEV"
echo
echo "Build edk2 for Qualcomm SDM845 platform."
echo
echo "Options: "
echo " --device DEV, -d DEV: build for DEV. (${DEVICES[*]})"
echo " --all, -a: build all devices."
echo " --chinese, -c: use github.com.cnpmjs.org for submodule cloning."
echo " --release MODE, -r MODE: Release mode for building, default is 'RELEASE', 'DEBUG' alternatively."
2022-02-07 20:12:43 +08:00
echo " --toolchain TOOLCHAIN: Set toolchain, default is 'GCC5'."
2022-02-07 22:08:37 +08:00
echo " --uart, -u: compile with UART support, print debug messages to uart debug port."
echo " --acpi, -A: compile DSDT using MS asl with wine"
echo " --clean, -C: clean workspace and output."
echo " --distclean, -D: clean up all files that are not in repo."
echo " --outputdir, -O: output folder."
echo " --help, -h: show this help."
2020-10-08 00:09:09 +08:00
echo
echo "MainPage: https://github.com/edk2-porting/edk2-sdm845"
exit "${1}"
}
2021-03-19 12:01:52 +08:00
function _error(){ echo "${@}" >&2;exit 1; }
2021-03-19 12:01:52 +08:00
function _build(){
local DEVICE="${1}"
shift
source "${_EDK2}/edksetup.sh"
[ -d "${WORKSPACE}" ]||mkdir "${WORKSPACE}"
set -x
make -C "${_EDK2}/BaseTools"||exit "$?"
if "${GEN_ACPI}" && ! (cd sdm845Pkg/AcpiTables/${DEVICE}/ && wine ../bin/asl-x64.exe Dsdt.asl && cd ../../..)
then echo "asl build failed. Have you installed wine?" >&2;return 1
2021-03-04 22:44:07 +08:00
fi
# based on the instructions from edk2-platform
2021-03-27 23:37:49 +08:00
rm -f "${OUTDIR}/boot-${DEVICE}.img" uefi_img "uefi-${DEVICE}.img.gz" "uefi-${DEVICE}.img.gz-dtb"
case "${MODE}" in
RELEASE)_MODE=RELEASE;;
*)_MODE=DEBUG;;
esac
build \
-s \
-n 0 \
-a AARCH64 \
2022-02-07 20:12:43 +08:00
-t "${TOOLCHAIN}" \
-p "sdm845Pkg/Devices/${DEVICE}.dsc" \
-b "${_MODE}" \
-D FIRMWARE_VER="${GITCOMMIT}" \
2022-02-07 22:08:37 +08:00
-D USE_UART="${USE_UART}" \
||return "$?"
gzip -c \
2022-02-07 20:12:43 +08:00
< "workspace/Build/sdm845Pkg/${_MODE}_${TOOLCHAIN}/FV/SDM845PKG_UEFI.fd" \
> "workspace/uefi-${DEVICE}.img.gz" \
||return "$?"
cat \
"workspace/uefi-${DEVICE}.img.gz" \
"device_specific/${DEVICE}.dtb" \
> "workspace/uefi-${DEVICE}.img.gz-dtb" \
||return "$?"
abootimg \
--create "${OUTDIR}/boot-${DEVICE}.img" \
-k "workspace/uefi-${DEVICE}.img.gz-dtb" \
-r ramdisk \
||return "$?"
2021-03-27 23:37:49 +08:00
echo "Build done: ${OUTDIR}/boot-${DEVICE}.img"
set +x
}
2021-03-19 12:01:52 +08:00
function _clean(){ rm --one-file-system --recursive --force ./workspace boot-*.img uefi-*.img*; }
2021-03-19 12:01:52 +08:00
function _distclean(){ if [ -d .git ];then git clean -xdf;else _clean;fi; }
2021-03-19 12:01:52 +08:00
cd "$(dirname "$0")"||exit 1
[ -f sdm845Pkg/sdm845Pkg.dsc ]||_error "cannot find sdm845Pkg/sdm845Pkg.dsc"
2020-10-08 00:09:09 +08:00
typeset -l DEVICE
typeset -u MODE
2020-10-08 00:09:09 +08:00
DEVICE=""
MODE=RELEASE
2021-01-18 01:14:33 +08:00
CHINESE=false
CLEAN=false
DISTCLEAN=false
2022-02-07 20:12:43 +08:00
TOOLCHAIN=GCC5
2022-02-07 22:08:37 +08:00
USE_UART=0
2021-03-27 23:37:49 +08:00
export OUTDIR="${PWD}"
2021-03-04 22:44:07 +08:00
export GEN_ACPI=false
2022-02-07 22:08:37 +08:00
OPTS="$(getopt -o t:d:hacACDO:r:u -l toolchain:,device:,help,all,chinese,acpi,uart,clean,distclean,outputdir:,release: -n 'build.sh' -- "$@")"||exit 1
2020-10-08 00:09:09 +08:00
eval set -- "${OPTS}"
while true
do case "${1}" in
-d|--device)DEVICE="${2}";shift 2;;
2021-01-18 01:14:33 +08:00
-a|--all)DEVICE=all;shift;;
-c|--chinese)CHINESE=true;shift;;
2021-03-04 22:44:07 +08:00
-A|--acpi)GEN_ACPI=true;shift;;
-C|--clean)CLEAN=true;shift;;
-D|--distclean)DISTCLEAN=true;shift;;
2021-03-27 23:37:49 +08:00
-O|--outputdir)OUTDIR="${2}";shift 2;;
-r|--release)MODE="${2}";shift 2;;
2022-02-07 20:12:43 +08:00
-t|--toolchain)TOOLCHAIN="${2}";shift 2;;
2022-02-07 22:08:37 +08:00
-u|--uart)USE_UART=1;shift;;
2020-10-08 00:09:09 +08:00
-h|--help)_help 0;shift;;
--)shift;break;;
*)_help 1;;
esac
done
if "${DISTCLEAN}";then _distclean;exit "$?";fi
if "${CLEAN}";then _clean;exit "$?";fi
2021-01-19 15:12:18 +08:00
[ -z "${DEVICE}" ]&&_help 1
2021-01-17 23:19:03 +08:00
if ! [ -f edk2/edksetup.sh ] || ! [ -f ../edk2/edksetup.sh ]
then set -e
echo "Updating submodules"
[ -e sdm845Pkg/AcpiTables/.git ]||git clone https://git.renegade-project.org/edk2-sdm845-acpi.git sdm845Pkg/AcpiTables
2021-01-18 01:14:33 +08:00
if "${CHINESE}"
then git submodule set-url edk2 https://github.com.cnpmjs.org/tianocore/edk2.git
git submodule set-url edk2-platforms https://github.com.cnpmjs.org/tianocore/edk2-platforms.git
git submodule set-url sdm845Pkg/Binary https://github.com.cnpmjs.org/edk2-porting/edk2-sdm845-binary.git
git submodule set-url sdm845Pkg/Library/SimpleInit https://github.com.cnpmjs.org/BigfootACA/simple-init.git
2021-01-18 01:14:33 +08:00
git submodule init;git submodule update --depth 1
pushd edk2
2021-03-27 23:39:06 +08:00
git submodule set-url ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 https://github.com.cnpmjs.org/ucb-bar/berkeley-softfloat-3.git
git submodule set-url CryptoPkg/Library/OpensslLib/openssl https://github.com.cnpmjs.org/openssl/openssl.git
git submodule set-url BaseTools/Source/C/BrotliCompress/brotli https://github.com.cnpmjs.org/google/brotli.git
git submodule set-url UnitTestFrameworkPkg/Library/CmockaLib/cmocka https://git.cryptomilk.org/projects/cmocka.git
git submodule set-url ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 https://github.com.cnpmjs.org/ucb-bar/berkeley-softfloat-3.git
git submodule set-url MdeModulePkg/Library/BrotliCustomDecompressLib/brotli https://github.com.cnpmjs.org/google/brotli.git
git submodule set-url MdeModulePkg/Universal/RegularExpressionDxe/oniguruma https://github.com.cnpmjs.org/kkos/oniguruma.git
git submodule set-url RedfishPkg/Library/JsonLib/jansson https://github.com.cnpmjs.org/akheron/jansson.git
2021-01-18 01:14:33 +08:00
git submodule init;git submodule update
git checkout .gitmodules
popd
pushd sdm845Pkg/Library/SimpleInit
git submodule set-url libs/lvgl https://github.com.cnpmjs.org/lvgl/lvgl.git
git submodule set-url libs/lodepng https://github.com.cnpmjs.org/lvandeve/lodepng.git
git submodule set-url libs/freetype https://github.com.cnpmjs.org/freetype/freetype.git
git submodule set-url libs/nanosvg https://github.com.cnpmjs.org/memononen/nanosvg.git
git submodule init;git submodule update
popd
2021-01-18 01:14:33 +08:00
git checkout .gitmodules
else git submodule init;git submodule update --depth 1
pushd edk2
git submodule init;git submodule update
popd
pushd sdm845Pkg/Library/SimpleInit
git submodule init;git submodule update
popd
2021-01-18 01:14:33 +08:00
fi
2021-01-17 23:19:03 +08:00
set +e
2020-10-08 00:09:09 +08:00
fi
for i in "${EDK2}" ./edk2 ../edk2
do if [ -n "${i}" ]&&[ -f "${i}/edksetup.sh" ]
then _EDK2="$(realpath "${i}")"
break
fi
done
for i in "${EDK2_PLATFORMS}" ./edk2-platforms ../edk2-platforms
do if [ -n "${i}" ]&&[ -d "${i}/Platform" ]
then _EDK2_PLATFORMS="$(realpath "${i}")"
break
fi
done
for i in "${SIMPLE_INIT}" sdm845Pkg/Library/SimpleInit ./simple-init ../simple-init
do if [ -n "${i}" ]&&[ -f "${i}/SimpleInit.inc" ]
then _SIMPLE_INIT="$(realpath "${i}")"
break
fi
done
[ -n "${_EDK2}" ]||_error "EDK2 not found, please see README.md"
[ -n "${_EDK2_PLATFORMS}" ]||_error "EDK2 Platforms not found, please see README.md"
[ -n "${_SIMPLE_INIT}" ]||_error "SimpleInit not found, please see README.md"
echo "EDK2 Path: ${_EDK2}"
echo "EDK2_PLATFORMS Path: ${_EDK2_PLATFORMS}"
export CROSS_COMPILE="${CROSS_COMPILE:-aarch64-linux-gnu-}"
export GCC5_AARCH64_PREFIX="${CROSS_COMPILE}"
2022-02-07 20:12:43 +08:00
export CLANG38_AARCH64_PREFIX="${CROSS_COMPILE}"
export PACKAGES_PATH="$_EDK2:$_EDK2_PLATFORMS:$_SIMPLE_INIT:$PWD"
export WORKSPACE="${PWD}/workspace"
2021-03-27 23:40:22 +08:00
GITCOMMIT="$(git describe --tags --always)"||GITCOMMIT="unknown"
export GITCOMMIT
2020-10-09 12:24:21 +08:00
echo > ramdisk
set -e
2021-03-22 13:00:39 +08:00
python3 assets/generate-logo.py "${GITCOMMIT}"
mkdir -p "${_SIMPLE_INIT}/build" "${_SIMPLE_INIT}/root/usr/share/locale"
for i in "${_SIMPLE_INIT}/po/"*.po
do [ -f "${i}" ]||continue
_name="$(basename "$i" .po)"
_path="${_SIMPLE_INIT}/root/usr/share/locale/${_name}/LC_MESSAGES"
mkdir -p "${_path}"
msgfmt -o "${_path}/simple-init.mo" "${i}"
done
bash "${_SIMPLE_INIT}/scripts/gen-rootfs-source.sh" \
"${_SIMPLE_INIT}" \
"${_SIMPLE_INIT}/build"
2021-01-19 15:12:18 +08:00
if [ "${DEVICE}" == "all" ]
then E=0
for i in "${DEVICES[@]}"
do echo "Building ${i}"
rm --recursive --force --one-file-system ./workspace||true
_build "${i}"||E="$?"
done
exit "${E}"
else HAS=false
for i in "${DEVICES[@]}"
do [ "${i}" == "${DEVICE}" ]||continue
HAS=true
break
done
[ "${HAS}" == "true" ]||_error "build.sh: unknown build target device ${DEVICE}."
_build "${DEVICE}"
fi