| #!/bin/bash |
| # Copyright (c) 2013 Intel Corporation. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in |
| # the documentation and/or other materials provided with the |
| # distribution. |
| # * Neither the name of Intel Corporation nor the names of its |
| # contributors may be used to endorse or promote products derived |
| # from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # This build script is: |
| # 1. An implementation of the Tianocore instructions for GCC, plus |
| # 2. Clanton-specific build steps |
| |
| # This script automates compiling the default configs. For anything |
| # more custom edit the Conf/target.txt file and use the original |
| # Tianocore 'build' command |
| # http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Using_EDK_II_with_Native_GCC_4.4 |
| |
| set -e |
| |
| build_all() |
| { |
| |
| test -d ./BaseTools || |
| die "Missing required directories, have you run 'svn update'?\n" |
| |
| test -e ./QuarkSocPkg/QuarkNorthCluster/Binary/QuarkMicrocode/RMU.bin || { |
| echo "Trying to fetch Chipset Microcode" |
| ./fetchCMCBinary.py || die "Missing Chipset Microcode\n" |
| } |
| |
| mkdir -p Conf |
| |
| |
| ############################################################################## |
| ######################## PreBuild-processing ##################### |
| ############################################################################## |
| |
| # Provide default config files when the user has not |
| for cfgf in tools_def build_rule; do |
| |
| [ -e ./Conf/"${cfgf}".txt ] || |
| cp -f ./QuarkPlatformPkg/Override/BaseTools/Conf/"${cfgf}".template ./Conf/"${cfgf}".txt |
| |
| done |
| |
| make -C BaseTools |
| # This defines EDK_TOOLS_PATH=..../BaseTools and others |
| # Note: this script will also provide all the other default Conf/ |
| # files (from BaseTools/), i.e., all config files besides the ones |
| # we provided just above |
| . ./edksetup.sh |
| |
| |
| local thread_number_opt='' |
| if test -n "${THREAD_NUMBER}"; then |
| thread_number_opt="-n ${THREAD_NUMBER}" |
| fi |
| |
| #################################################################################################################### |
| ###### Perform the actual build ############# |
| ###### Warning: parameters here are supposed to override any corresponding value in Conf/target.txt ############# |
| #################################################################################################################### |
| build -p ${platform}Pkg/${platform}Pkg.dsc -b ${target} -a IA32 ${thread_number_opt} -t $tool_opt -y Report.log $_args ${debug_print_error_level} ${debug_property_mask} |
| |
| |
| ############################################################################### |
| ######################## PostBuild-processing ##################### |
| ############################################################################### |
| ./QuarkPlatformPkg/Tools/QuarkSpiFixup/QuarkSpiFixup.py $platform $target $tool_opt |
| |
| |
| #################################################################################################################### |
| ###### Perform EDKII build again after QuarkSpiFixup so that output .fd file usable. ############# |
| ###### Warning: parameters here are supposed to override any corresponding value in Conf/target.txt ############# |
| #################################################################################################################### |
| build -p ${platform}Pkg/${platform}Pkg.dsc -b ${target} -a IA32 ${thread_number_opt} -t $tool_opt -y Report.log $_args ${debug_print_error_level} ${debug_property_mask} |
| |
| OutputModulesDir=$WORKSPACE/Build/${platform}/${target}_$tool_opt/FV |
| |
| # Copy build output .fd file int0 FlashModules directory. |
| # Use similar name to full Quark Spi Flash tools but emphasise only EDKII assets in bin file. |
| cp -f $OutputModulesDir/QUARK.fd $OutputModulesDir/FlashModules/Flash-EDKII-missingPDAT.bin |
| |
| ############################################################################### |
| ######################## Image signing stage #################### |
| ######################## (dummy signing) #################### |
| ############################################################################### |
| if [ ! -e $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ] |
| then |
| make -C $WORKSPACE/QuarkPlatformPkg/Tools/SignTool |
| fi |
| |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_BOOT_STAGE1_IMAGE1.Fv $OutputModulesDir/EDKII_BOOT_STAGE1_IMAGE1.Fv.signed |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_BOOT_STAGE1_IMAGE2.Fv $OutputModulesDir/EDKII_BOOT_STAGE1_IMAGE2.Fv.signed |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_BOOT_STAGE2_RECOVERY.Fv $OutputModulesDir/EDKII_BOOT_STAGE2_RECOVERY.Fv.signed |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_BOOT_STAGE2_COMPACT.Fv $OutputModulesDir/EDKII_BOOT_STAGE2_COMPACT.Fv.signed |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_BOOT_STAGE2.Fv $OutputModulesDir/EDKII_BOOT_STAGE2.Fv.signed |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool ${OutputModulesDir}/FlashModules/EDKII_RECOVERY_IMAGE1.Fv $OutputModulesDir/EDKII_RECOVERY_IMAGE1.Fv.signed |
| |
| ############################################################################### |
| #################### Capsule creation stage ################ |
| #################### (Recovery and Update capsules) ################ |
| ############################################################################### |
| CapsuleConfigFile=$WORKSPACE/${platform}Pkg/Tools/CapsuleCreate/${platform}PkgCapsuleComponents.inf |
| CapsuleOutputFileReset=$OutputModulesDir/${platform}PkgReset.Cap |
| # CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 |
| # CAPSULE_FLAGS_INITIATE_RESET 0x00040000 |
| CapsuleFlagsNoReset=0x00000000 |
| CapsuleFlagsReset=0x00050000 |
| |
| if [ ! -e $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate ] |
| then |
| make -C $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate |
| fi |
| |
| if [ -e $WORKSPACE/${platform}Pkg/Tools/CapsuleCreate/${platform}PkgCapsuleComponents.inf ] |
| then |
| $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate $CapsuleConfigFile $OutputModulesDir $CapsuleOutputFileReset $CapsuleFlagsReset |
| fi |
| |
| $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool $CapsuleOutputFileReset ${CapsuleOutputFileReset}.signed |
| cat $OutputModulesDir/EDKII_BOOT_STAGE2_RECOVERY.Fv.signed $CapsuleOutputFileReset.signed > $OutputModulesDir/FVMAIN.fv |
| |
| ############################################################################### |
| ################ Create useful output directories ################ |
| ############################################################################### |
| # Create Remediation directory |
| if [ ! -e $OutputModulesDir/RemediationModules ] |
| then |
| mkdir $OutputModulesDir/RemediationModules |
| fi |
| |
| # Copy the 'Recovery Capsule' and 'Update Capsules' to the RemediationModules directory |
| # Use same/similar names in stand-alone builds compared to full Quark Spi Flash tools. |
| cp -f $OutputModulesDir/FVMAIN.fv $OutputModulesDir/RemediationModules/. |
| cp -f ${CapsuleOutputFileReset}.signed $OutputModulesDir/RemediationModules/Flash-EDKII.cap |
| cp -f $WORKSPACE/QuarkPlatformPkg/Applications/CapsuleApp.efi $OutputModulesDir/RemediationModules/. |
| |
| # Create Tools directory |
| if [ ! -e $OutputModulesDir/Tools ] |
| then |
| mkdir $OutputModulesDir/Tools |
| fi |
| |
| # Copy the 'CapsuleCreate' tool to the Tools directory |
| cp -f $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate $OutputModulesDir/Tools/. |
| |
| # Create Applications directory |
| if [ ! -e $OutputModulesDir/Applications ] |
| then |
| mkdir $OutputModulesDir/Applications |
| fi |
| |
| # Copy the 'CapsuleApp.efi' application to the Application directory |
| cp -f $WORKSPACE/QuarkPlatformPkg/Applications/CapsuleApp.efi $OutputModulesDir/Applications/. |
| |
| ######################################################################################## |
| ######## Remove build files created (now that we are finished using them) ######## |
| ######################################################################################## |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool.o |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/SignTool/DummySignTool.d |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate.o |
| rm -f $WORKSPACE/QuarkPlatformPkg/Tools/CapsuleCreate/CapsuleCreate.d |
| |
| cp -f ./Report.log ./Build/${platform}/${target}_$tool_opt |
| } |
| |
| die() |
| { |
| printf "ERROR: " |
| printf "$@"; exit 1 |
| } |
| |
| usage() |
| { |
| die "$0 [-r32|-d32|-clean] [GCC43|GCC44|GCC45|GCC46|GCC47] [PlatformName] [-DSECURE_LD(optional)] [-DSECURE_BOOT(optional)]\n" |
| } |
| |
| clean() |
| { |
| printf "Warning: this option is different from every EDK2's 'build cleanXXX' feature\n" |
| |
| ( set -x |
| rm -rf Conf Build |
| ) |
| } |
| |
| main() |
| { |
| case "$1" in |
| -clean) |
| clean; exit 0 |
| ;; |
| -r32) |
| target=RELEASE |
| debug_print_error_level=-DDEBUG_PRINT_ERROR_LEVEL=0x80000000 |
| debug_property_mask=-DDEBUG_PROPERTY_MASK=0x23 |
| ;; |
| -d32) |
| target=DEBUG |
| debug_print_error_level=-DDEBUG_PRINT_ERROR_LEVEL=0x80000042 |
| debug_property_mask=-DDEBUG_PROPERTY_MASK=0x27 |
| ;; |
| *) |
| usage |
| esac |
| case "$2" in |
| GCC43) ;; |
| GCC44) ;; |
| GCC45) ;; |
| GCC46) ;; |
| GCC47) ;; |
| *) |
| usage |
| esac |
| |
| # 2nd argument is the build tools |
| tool_opt=$2 |
| |
| # 3rd argument is the platform name |
| platform=$3 |
| |
| # Add all arguments after the 3rd to the _args array |
| array=( $@ ) |
| _args=${array[@]:3:$#} |
| |
| build_all |
| } |
| |
| |
| main "$@" |