From 3d53676b63f76182d1639987d2f0d3dbb2a73325 Mon Sep 17 00:00:00 2001 From: BigfootACA Date: Sat, 16 Jan 2021 03:32:50 +0800 Subject: [PATCH] change to submodule, add build all devices --- .github/workflows/main.yml | 10 +--- .gitignore | 2 + .gitmodules | 6 +++ README.md | 27 ++-------- build.sh | 106 +++++++++++++++++++++++-------------- edk2 | 1 + edk2-platforms | 1 + 7 files changed, 82 insertions(+), 71 deletions(-) create mode 100644 .gitmodules create mode 160000 edk2 create mode 160000 edk2-platforms diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9ddbd2e..a064a3a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,11 +23,5 @@ jobs: - uses: actions/checkout@v2 # Runs a single command using the runners shell - - name: Run a one-line script - run: echo Hello, world! - - # Runs a set of commands using the runners shell - - name: Run a multi-line script - run: | - echo Add other actions to build, - echo test, and deploy your project. + - name: Build all devices + run: ./build.sh -a diff --git a/.gitignore b/.gitignore index 845cdef..7a46a2c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ boot-*.img uefi-*.img uefi-*.img-dtb +uefi-*.img.gz +uefi-*.img.gz-dtb workspace *.dll ramdisk diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d2a7fd5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "edk2"] + path = edk2 + url = https://github.com/tianocore/edk2.git +[submodule "edk2-platforms"] + path = edk2-platforms + url = https://github.com/tianocore/edk2-platforms.git diff --git a/README.md b/README.md index 9c30b57..7cec569 100644 --- a/README.md +++ b/README.md @@ -28,38 +28,19 @@ Ubuntu 20.04 is also proved to be fine. ## Building -1.Clone edk2 and edk2-platforms (Place three directories side by side.) - -edk2: -``` -commit:3a3713e62cfad00d78bb938b0d9fb1eedaeff314 -``` - -edk2-platforms: -``` -commit:cfdc7f907d545b14302295b819ea078bc36c6a40 -``` - -```bash -mkdir workspace-edk2 -cd workspace-edk2 -git clone https://github.com/tianocore/edk2.git -o 3a3713e62cfad00d78bb938b0d9fb1eedaeff314 --recursive --depth=1 -git clone https://github.com/tianocore/edk2-platforms.git -o cfdc7f907d545b14302295b819ea078bc36c6a40 --recursive --depth=1 -``` - -2.Clone this project +1.Clone this project ```bash -git clone https://github.com/edk2-porting/edk2-sdm845.git +git clone https://github.com/edk2-porting/edk2-sdm845.git --recursive ``` -3.Build this project +2.Build this project ```bash bash build.sh --device DEVICE ``` -4.Boot the image +3.Boot the image ```bash fastboot boot boot_DEVICE.img diff --git a/build.sh b/build.sh index c21a5b2..ec861d3 100755 --- a/build.sh +++ b/build.sh @@ -17,62 +17,88 @@ function _help(){ echo echo "Options: " echo " --device DEV, -d DEV: build for DEV. (${DEVICES[*]})" + echo " --all, -a: build all devices." echo " --help, -h: show this help." echo echo "MainPage: https://github.com/edk2-porting/edk2-sdm845" exit "${1}" } -cd "$(dirname "$0")" -if ! [ -f sdm845Pkg/sdm845Pkg.dsc ] -then echo "cannot find sdm845Pkg/sdm845Pkg.dsc" >&2 - exit 1 -fi +function _error(){ echo "${@}" >&2;exit 1; } +function _build(){ + local DEVICE="${1}" + shift + source "${_EDK2}/edksetup.sh" + [ -d "${WORKSPACE}" ]||mkdir "${WORKSPACE}" + set -x + make -C "${_EDK2}/BaseTools" -j "$(nproc)"||exit "$?" + # based on the instructions from edk2-platform + rm -f "boot_${DEVICE}.img" uefi_img "uefi-${DEVICE}.img.gz" "uefi-${DEVICE}.img.gz-dtb" + build -s -n 0 -a AARCH64 -t GCC5 -p "sdm845Pkg/${DEVICE}.dsc"||return "$?" + gzip -c < workspace/Build/sdm845Pkg/DEBUG_GCC5/FV/SDM845PKG_UEFI.fd > "uefi-${DEVICE}.img.gz"||return "$?" + cat "uefi-${DEVICE}.img.gz" "device_specific/${DEVICE}.dtb" > "uefi-${DEVICE}.img.gz-dtb"||return "$?" + abootimg --create "boot-${DEVICE}.img" -k "uefi-${DEVICE}.img.gz-dtb" -r ramdisk||return "$?" + echo "Build done: boot-${DEVICE}.img" + set +x +} +cd "$(dirname "$0")"||exit 1 +[ -f sdm845Pkg/sdm845Pkg.dsc ]||_error "cannot find sdm845Pkg/sdm845Pkg.dsc" typeset -l DEVICE DEVICE="" -OPTS="$(getopt -o d:h -l device:,help -n 'build.sh' -- "$@")"||exit 1 +OPTS="$(getopt -o d:ha -l device:,help,all -n 'build.sh' -- "$@")"||exit 1 eval set -- "${OPTS}" while true do case "${1}" in -d|--device)DEVICE="${2}";shift 2;; + -a|--all)DEVICE="all";shift;; -h|--help)_help 0;shift;; --)shift;break;; *)_help 1;; esac done -[ -z "${DEVICE}" ]&&_help 1 -HAS=false -for i in "${DEVICES[@]}" -do [ "${i}" == "${DEVICE}" ]||continue - HAS=true - break -done -if [ "${HAS}" != "true" ] -then echo "build.sh: unknown build target device ${DEVICE}." >&2 - exit 1 +if ! [ -d ../edk2 ] +then echo "Updating submodules" + git submodule init&&git submodule update + pushd edk2&&git submodule init&&git submodule update&&popd + pushd edk2-platforms&&git submodule init&&git submodule update&&popd fi -_EDK2="$(realpath "$PWD/../edk2")" -_EDK2_PLATFORMS="$(realpath "$PWD/../edk2-platforms")" -if ! [ -d "${_EDK2}" ] -then echo "${_EDK2} not found, please see README.md" >&2 - exit 1 -fi -if ! [ -d "${_EDK2_PLATFORMS}" ] -then echo "${_EDK2_PLATFORMS} not found, please see README.md" >&2 - exit 1 -fi -set -e -export PACKAGES_PATH="$_EDK2:$_EDK2_PLATFORMS:$PWD" -export WORKSPACE="$PWD/workspace" -source ../edk2/edksetup.sh -[ -d "${WORKSPACE}" ]||mkdir "${WORKSPACE}" -set -x -make -C ../edk2/BaseTools -j "$(nproc)" -# based on the instructions from edk2-platform -rm -f "boot_${DEVICE}.img" uefi_img +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 +[ -n "${_EDK2}" ]||_error "EDK2 not found, please see README.md" +[ -n "${_EDK2_PLATFORMS}" ]||_error "EDK2 Platforms not found, please see README.md" +echo "EDK2 Path: ${_EDK2}" +echo "EDK2_PLATFORMS Path: ${_EDK2_PLATFORMS}" # not actually GCC5, it's GCC7 on Ubuntu 18.04. -GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -s -n 0 -a AARCH64 -t GCC5 -p "sdm845Pkg/${DEVICE}.dsc" -gzip -c < workspace/Build/sdm845Pkg/DEBUG_GCC5/FV/SDM845PKG_UEFI.fd > "uefi-${DEVICE}.img" -cat "uefi-${DEVICE}.img" "device_specific/${DEVICE}.dtb" > "uefi-${DEVICE}.img-dtb" +export GCC5_AARCH64_PREFIX="${CROSS_COMPILE:-aarch64-linux-gnu-}" +export PACKAGES_PATH="$_EDK2:$_EDK2_PLATFORMS:$PWD" +export WORKSPACE="${PWD}/workspace" echo > ramdisk -abootimg --create "boot-${DEVICE}.img" -k "uefi-${DEVICE}.img-dtb" -r ramdisk -echo "Build done: boot-${DEVICE}.img" +set -e +if [ -z "${DEVICE}" ] +then _help 1 +elif [ "${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 diff --git a/edk2 b/edk2 new file mode 160000 index 0000000..3a3713e --- /dev/null +++ b/edk2 @@ -0,0 +1 @@ +Subproject commit 3a3713e62cfad00d78bb938b0d9fb1eedaeff314 diff --git a/edk2-platforms b/edk2-platforms new file mode 160000 index 0000000..cfdc7f9 --- /dev/null +++ b/edk2-platforms @@ -0,0 +1 @@ +Subproject commit cfdc7f907d545b14302295b819ea078bc36c6a40 -- 2.45.2