diff options
Diffstat (limited to 'uefi-tools/edk2-build.sh')
-rwxr-xr-x | uefi-tools/edk2-build.sh | 401 |
1 files changed, 0 insertions, 401 deletions
diff --git a/uefi-tools/edk2-build.sh b/uefi-tools/edk2-build.sh deleted file mode 100755 index 3e218b3c..00000000 --- a/uefi-tools/edk2-build.sh +++ /dev/null @@ -1,401 +0,0 @@ -#!/bin/bash - -# -# edk2-build.sh: evolution of uefi-build.sh for edk2-platforms -# - -unset MAKEFLAGS # BaseTools not safe to build parallel, prevent env overrides - -TOOLS_DIR="`dirname $0`" -TOOLS_DIR="`readlink -f \"$TOOLS_DIR\"`" -export TOOLS_DIR -. "$TOOLS_DIR"/common-functions -PLATFORM_CONFIG="-c $TOOLS_DIR/edk2-platforms.config" -ARCH= -VERBOSE=0 # Override with -v -ATF_DIR= -TOS_DIR= -TOOLCHAIN="gcc" # Override with -T -WORKSPACE= -EDK2_DIR= -PLATFORMS_DIR= -NON_OSI_DIR= -IMPORT_OPENSSL=TRUE -OPENSSL_CONFIGURED=FALSE - -# Number of threads to use for build -export NUM_THREADS=$((`getconf _NPROCESSORS_ONLN` + `getconf _NPROCESSORS_ONLN`)) - -function do_build -{ - PLATFORM_ARCH=`echo $board | cut -s -d: -f2` - if [ -n "$PLATFORM_ARCH" ]; then - board=`echo $board | cut -d: -f1` - else - PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o arch`" - fi - PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname` ($PLATFORM_ARCH)" - if [ -z "$PLATFORM_ARCH" ]; then - echo "Unknown target architecture - aborting!" >&2 - return 1 - fi - PLATFORM_PREBUILD_CMDS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o prebuild_cmds`" - PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildflags`" - PLATFORM_BUILDFLAGS="$PLATFORM_BUILDFLAGS ${EXTRA_OPTIONS[@]}" - PLATFORM_BUILDCMD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildcmd`" - PLATFORM_DSC="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o dsc`" - PLATFORM_PACKAGES_PATH="" - COMPONENT_INF="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o inf`" - - TEMP_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o packages_path`" - IFS=: - for path in "$TEMP_PACKAGES_PATH"; do - case "$path" in - /*) - PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$path" - ;; - *) - PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$PWD/$path" - ;; - esac - done - unset IFS - - if [ $VERBOSE -eq 1 ]; then - echo "Setting build parallellism to $NUM_THREADS processes" - echo "PLATFORM_NAME=$PLATFORM_NAME" - echo "PLATFORM_PREBUILD_CMDS=$PLATFORM_PREBUILD_CMDS" - echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS" - echo "PLATFORM_BUILDCMD=$PLATFORM_BUILDCMD" - echo "PLATFORM_DSC=$PLATFORM_DSC" - echo "PLATFORM_ARCH=$PLATFORM_ARCH" - echo "PLATFORM_PACKAGES_PATH=$PLATFORM_PACKAGES_PATH" - fi - - set_cross_compile - CROSS_COMPILE="$TEMP_CROSS_COMPILE" - - echo "Building $PLATFORM_NAME - $PLATFORM_ARCH" - echo "CROSS_COMPILE=\"$TEMP_CROSS_COMPILE\"" - echo "$board"_BUILDFLAGS="'$PLATFORM_BUILDFLAGS'" - - if [ "$TARGETS" == "" ]; then - TARGETS=( RELEASE ) - fi - - case $TOOLCHAIN in - "gcc") - PLATFORM_TOOLCHAIN=`get_gcc_version "$CROSS_COMPILE"gcc` - ;; - "clang") - PLATFORM_TOOLCHAIN=`get_clang_version clang` - ;; - *) - # Use command-line specified profile directly - PLATFORM_TOOLCHAIN=$TOOLCHAIN - ;; - esac - echo "PLATFORM_TOOLCHAIN is ${PLATFORM_TOOLCHAIN}" - - export ${PLATFORM_TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE - echo "Toolchain prefix: ${PLATFORM_TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE" - - export PACKAGES_PATH="$PLATFORM_PACKAGES_PATH" - for target in "${TARGETS[@]}" ; do - if [ X"$PLATFORM_PREBUILD_CMDS" != X"" ]; then - echo "Run pre-build commands:" - if [ $VERBOSE -eq 1 ]; then - echo " ${PLATFORM_PREBUILD_CMDS}" - fi - eval ${PLATFORM_PREBUILD_CMDS} - fi - - if [ -n "$COMPONENT_INF" ]; then - # Build a standalone component - if [ $VERBOSE -eq 1 ]; then - echo "build -n $NUM_THREADS -a \"$PLATFORM_ARCH\" -t ${PLATFORM_TOOLCHAIN} -p \"$PLATFORM_DSC\"" \ - "-m \"$COMPONENT_INF\" -b "$target" ${PLATFORM_BUILDFLAGS}" - fi - build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${PLATFORM_TOOLCHAIN} -p "$PLATFORM_DSC" \ - -m "$COMPONENT_INF" -b "$target" ${PLATFORM_BUILDFLAGS} - else - # Build a platform - if [ $VERBOSE -eq 1 ]; then - echo "build -n $NUM_THREADS -a \"$PLATFORM_ARCH\" -t ${PLATFORM_TOOLCHAIN} -p \"$PLATFORM_DSC\"" \ - "-b "$target" ${PLATFORM_BUILDFLAGS}" - fi - build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${PLATFORM_TOOLCHAIN} -p "$PLATFORM_DSC" \ - -b "$target" ${PLATFORM_BUILDFLAGS} - fi - - RESULT=$? - if [ $RESULT -eq 0 ]; then - if [ X"$TOS_DIR" != X"" ]; then - pushd $TOS_DIR >/dev/null - if [ $VERBOSE -eq 1 ]; then - echo "$TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board" - fi - $TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board - RESULT=$? - popd >/dev/null - fi - fi - if [ $RESULT -eq 0 ]; then - if [ X"$ATF_DIR" != X"" ]; then - pushd $ATF_DIR >/dev/null - if [ $VERBOSE -eq 1 ]; then - echo "$TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board" - fi - $TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${PLATFORM_TOOLCHAIN} $board - RESULT=$? - popd >/dev/null - fi - fi - result_log $RESULT "$PLATFORM_NAME $target" - done - unset PACKAGES_PATH -} - - -function configure_paths -{ - WORKSPACE="$PWD" - - # Check to see if we are in a UEFI repository - # refuse to continue if we aren't - if [ ! -d "$EDK2_DIR"/BaseTools ] - then - if [ -d "$PWD"/edk2/BaseTools ]; then - EDK2_DIR="$PWD"/edk2 - else - echo "ERROR: can't locate the edk2 directory" >&2 - echo " please specify -e/--edk2-dir" >&2 - exit 1 - fi - fi - - GLOBAL_PACKAGES_PATH="$EDK2_DIR" - - # locate edk2-platforms - if [ -z "$PLATFORMS_DIR" -a -d "$PWD"/edk2-platforms ]; then - PLATFORMS_DIR="$PWD"/edk2-platforms - fi - if [ -n "$PLATFORMS_DIR" ]; then - GLOBAL_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:$PLATFORMS_DIR" - fi - - # locate edk2-non-osi - if [ -z "$NON_OSI_DIR" -a -d "$PWD"/edk2-non-osi ]; then - NON_OSI_DIR="$PWD"/edk2-non-osi - fi - if [ -n "$NON_OSI_DIR" ]; then - GLOBAL_PACKAGES_PATH="$GLOBAL_PACKAGES_PATH:$NON_OSI_DIR" - fi - - # locate arm-trusted-firmware - if [ -z "$ATF_DIR" -a -d "$PWD"/arm-trusted-firmware ]; then - ATF_DIR="$PWD"/arm-trusted-firmware - fi - - export WORKSPACE -} - - -function prepare_build -{ - get_build_arch - export ARCH=$BUILD_ARCH - - export ARCH - cd $EDK2_DIR - PACKAGES_PATH=$GLOBAL_PACKAGES_PATH . edksetup.sh --reconfig - if [ $? -ne 0 ]; then - echo "Sourcing edksetup.sh failed!" >&2 - exit 1 - fi - if [ $VERBOSE -eq 1 ]; then - echo "Building BaseTools" - fi - make -C BaseTools - RET=$? - cd - - if [ $RET -ne 0 ]; then - echo " !!! BaseTools failed to build !!! " >&2 - exit 1 - fi - - if [ "$IMPORT_OPENSSL" = "TRUE" ]; then - cd $EDK2_DIR - import_openssl - if [ $? -ne 0 ]; then - echo "Importing OpenSSL failed - aborting!" >&2 - echo " specify --no-openssl to attempt build anyway." >&2 - exit 1 - fi - cd $WORKSPACE - fi -} - - -function usage -{ - echo "usage:" - echo -n "uefi-build.sh [-b DEBUG | RELEASE] [ all " - for board in "${boards[@]}" ; do - echo -n "| $board " - done - echo "]" - printf "%8s\tbuild %s\n" "all" "all supported platforms" - for board in "${boards[@]}" ; do - PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname`" - printf "%8s\tbuild %s\n" "$board" "${PLATFORM_NAME}" - done -} - -# -# Since we do a command line validation on whether specified platforms exist or -# not, do a first pass of command line to see if there is an explicit config -# file there to read valid platforms from. -# -commandline=( "$@" ) -i=0 -for arg; -do - if [ $arg == "-c" ]; then - FILE_ARG=${commandline[i + 1]} - if [ ! -f "$FILE_ARG" ]; then - echo "ERROR: configuration file '$FILE_ARG' not found" >&2 - exit 1 - fi - case "$FILE_ARG" in - /*) - PLATFORM_CONFIG="-c $FILE_ARG" - ;; - *) - PLATFORM_CONFIG="-c `readlink -f \"$FILE_ARG\"`" - ;; - esac - echo "Platform config file: '$FILE_ARG'" - fi - i=$(($i + 1)) -done - -export PLATFORM_CONFIG - -builds=() -boards=() -boardlist="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG shortlist`" -for board in $boardlist; do - boards=(${boards[@]} $board) -done - -NUM_TARGETS=0 - -while [ "$1" != "" ]; do - case $1 in - -1) # Disable build parallellism - NUM_THREADS=1 - ;; - -a | --arm-tf-dir) - shift - ATF_DIR="`readlink -f $1`" - ;; - -c) # Already parsed above - skip this + option - shift - ;; - -b | --build-target) - shift - echo "Adding Build target: $1" - TARGETS=(${TARGETS[@]} $1) - ;; - -D) # Pass through as -D option to 'build' - shift - echo "Adding Macro: -D $1" - EXTRA_OPTIONS=(${EXTRA_OPTIONS[@]} "-D" $1) - ;; - -e | --edk2-dir) - shift - export EDK2_DIR="`readlink -f $1`" - ;; - -h | --help) - usage - exit - ;; - --no-openssl) - IMPORT_OPENSSL=FALSE - ;; - -n | --non-osi-dir) - shift - NON_OSI_DIR="`readlink -f $1`" - ;; - -p | --platforms-dir) - shift - PLATFORMS_DIR="`readlink -f $1`" - ;; - -s | --tos-dir) - shift - export TOS_DIR="`readlink -f $1`" - ;; - -T) # Set specific toolchain tag, or clang/gcc for autoselection - shift - echo "Setting toolchain tag to '$1'" - TOOLCHAIN="$1" - ;; - -v) - VERBOSE=1 - ;; - all) # Add all targets in configuration file to list - builds=(${boards[@]}) - NUM_TARGETS=$(($NUM_TARGETS + 1)) - ;; - *) # Try to match target in configuration file, add to list - MATCH=0 - for board in "${boards[@]}" ; do - if [ "`echo $1 | cut -d: -f1`" == $board ]; then - MATCH=1 - builds=(${builds[@]} "$1") - break - fi - done - - if [ $MATCH -eq 0 ]; then - echo "unknown arg $1" - usage - exit 1 - fi - NUM_TARGETS=$(($NUM_TARGETS + 1)) - ;; - esac - shift -done - -if [ $NUM_TARGETS -le 0 ]; then - echo "No targets specified - exiting!" >&2 - exit 0 -fi - -export VERBOSE - -configure_paths - -prepare_build - -if [[ "${EXTRA_OPTIONS[@]}" != *"FIRMWARE_VER"* ]]; then - if test -d .git && head=`git rev-parse --verify --short HEAD 2>/dev/null`; then - FIRMWARE_VER=`git rev-parse --short HEAD` - if ! git diff-index --quiet HEAD --; then - FIRMWARE_VER="${FIRMWARE_VER}-dirty" - fi - EXTRA_OPTIONS=( ${EXTRA_OPTIONS[@]} "-D" FIRMWARE_VER=$FIRMWARE_VER ) - if [ $VERBOSE -eq 1 ]; then - echo "FIRMWARE_VER=$FIRMWARE_VER" - echo "EXTRA_OPTIONS=$EXTRA_OPTIONS" - fi - fi -fi - -for board in "${builds[@]}" ; do - do_build -done - -result_print |