Hi Leif,

So, speaking to Olivier yesterday, I worked out what he meant about using GCC48 these days.  I've taken his ideas and added them to the uefi-build.sh script locally and tested them.  Patch below.

You mentioned that you'd rather just use "GCC".  Generally, I agree with you.  The definitions for GCC44 through to GCC48 are currently the same anyway.  However, there are no definitions for plain old GCC, so tools_def.template would need hacking again.

In the meantime, with the absence of GCC hacks, do you see any problems with my patch?

Olivier,

One big problem I see with the differing toolchains is that the output dir changes every time I build with a different toolchain.  I can't really see an advantage to having different sub-dirs for each toolchain.  I really don't believe we'll build the same BSP with more than one toolchain without cleaning the repo first.  At least, I reckon you'd be mad to to not clean first ;-)

Do you see a use-case for having the toolchain naming in the output dir name?  If not, how on earth would we hack the codebase so it just outputs to DEBUG/RELEASE instead?

Cheers,
Ryan.

------------------------------------------------------------
[PATCH] uefi-build: update TOOLCHAIN configuration

Using ARMGCC vs ARMLINUXGCC causes various problems.

Switching to GCC4x causes other problems, but seems cleaner than either
of the previous two options.

Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
---
 uefi-build.sh | 31 ++++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/uefi-build.sh b/uefi-build.sh
index f376496..5cf38ca 100755
--- a/uefi-build.sh
+++ b/uefi-build.sh
@@ -81,15 +81,41 @@ function build_platform
                TARGETS=( RELEASE )
        fi

+       if [ "$TOOLCHAIN" == "" ]; then
+               gcc_version=$(${CROSS_COMPILE}gcc -v 2>&1 | tail -1 | awk '{print $3}')
+               case $gcc_version in
+               4.6.*)
+                       export TOOLCHAIN=GCC46
+                       export GCC46_ARM_PREFIX=$CROSS_COMPILE
+                       export GCC46_AARCH64_PREFIX=$CROSS_COMPILE
+                       ;;
+               4.7.*)
+                       export TOOLCHAIN=GCC47
+                       export GCC47_ARM_PREFIX=$CROSS_COMPILE
+                       export GCC47_AARCH64_PREFIX=$CROSS_COMPILE
+                       ;;
+               4.[8-9].*)
+                       export TOOLCHAIN=GCC48
+                       export GCC48_ARM_PREFIX=$CROSS_COMPILE
+                       export GCC48_AARCH64_PREFIX=$CROSS_COMPILE
+                       ;;
+               *)
+                       echo "Unsupported toolchain"
+                       exit 1
+                       ;;
+               esac
+       fi
+       echo "TOOLCHAIN=$TOOLCHAIN"
+
        for target in "${TARGETS[@]}" ; do
                if [ X"$PLATFORM_PREBUILD_CMDS" != X"" ]; then
                        echo "Run pre build commands"
                        eval ${PLATFORM_PREBUILD_CMDS}
                fi
                if [ X"$PLATFORM_BUILDCMD" == X"" ]; then
-                       echo CROSS_COMPILE="$TEMP_CROSS_COMPILE" build -a "$PLATFORM_ARCH" -t ARMGCC -p "$PLATFORM_DSC" -b "$target" \
+                       echo CROSS_COMPILE="$TEMP_CROSS_COMPILE" build -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
                                ${PLATFORM_BUILDFLAGS}
-                       CROSS_COMPILE="$TEMP_CROSS_COMPILE" build -a "$PLATFORM_ARCH" -t ARMGCC -p "$PLATFORM_DSC" -b "$target" \
+                       CROSS_COMPILE="$TEMP_CROSS_COMPILE" build -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
                                ${PLATFORM_BUILDFLAGS}
                else
                        ${PLATFORM_BUILDCMD} -b "$target" ${PLATFORM_BUILDFLAGS}
@@ -115,7 +141,6 @@ function uefishell
        esac
        export ARCH
        echo "Setting up shell for building UEFI"
-       export TOOLCHAIN=ARMGCC
        export EDK_TOOLS_PATH=`pwd`/BaseTools
        . edksetup.sh BaseTools
        make -C $EDK_TOOLS_PATH
--
1.8.3.2