build.sh: Fix the behavior of specifying CC

Update the behavior of specifying CC.
The following cases are covered:
- CC == gcc: special case in which we fall back to the default
    triplet defined by CROSS_COMPILE;
- CC == XXX != gcc != "": force the use of the specified XXX compiler;
- CC defined both in env and in BUILD_CONFIG: env has higher priority
    than BUILD_CONFIG.

This patch solves this unexpected behavior of having the CC value
specified in the environment overwritten by the one defined in
BUILD_CONFIG, preserving the behavior of the other cases.

Test: manual build
Change-Id: I1193d15bb810f4e7989f58381f742f7cab23c6c2
Signed-off-by: Alessio Balsini <balsini@google.com>
diff --git a/build.sh b/build.sh
index 21a8802..9a7bc76 100755
--- a/build.sh
+++ b/build.sh
@@ -152,6 +152,10 @@
 SIGN_CERT=certs/signing_key.x509
 SIGN_ALGO=sha512
 
+# Save environment parameters before being overwritten by sourcing
+# BUILD_CONFIG.
+CC_ARG=$CC
+
 source "${ROOT_DIR}/build/envsetup.sh"
 
 export MAKE_ARGS=$@
@@ -164,10 +168,14 @@
 
 export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 ARCH SUBARCH
 
+# Restore the previously saved CC argument that might have been overridden by
+# the BUILD_CONFIG.
+[ -n $CC_ARG ] && CC=$CC_ARG
+
 # CC=gcc is effectively a fallback to the default gcc including any target
-# triplets. If the user wants to use a custom compiler, they are still able to
-# pass an absolute path, e.g. CC=/usr/bin/gcc.
-[ "${CC}" == "gcc" ] && unset CC
+# triplets. An absolute path (e.g., CC=/usr/bin/gcc) must be specified to use a
+# custom compiler.
+[ "$CC" == "gcc" ] && unset CC && unset CC_ARG
 
 if [ -n "${CC}" ]; then
   CC_ARG="CC=${CC} HOSTCC=${CC}"