Decide automatically whether to use GCC or Clang.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 22 Apr 2020 21:42:48 +0000 (22:42 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 22 Apr 2020 21:42:48 +0000 (22:42 +0100)
The default policy is to prefer GCC, but fall back to Clang if we can't
find it.  This can be influenced by the environment variable
`$CROSS_COMPILER'.

As part of this, move setting `CC', etc. from `android-cross-
config.site' to `common-cross-config.site'.

etc/android-cross-config.site
etc/common-cross-config.site
src/cross.in

index 62d4ecb..b64053e 100644 (file)
@@ -3,7 +3,3 @@
 ANDROID_NDK_TARGETARCH=$CROSS_ARCH
 . $CROSSDIR/etc/android.sh
 . $CROSSDIR/etc/common-cross-config.site
-
-CC="$CROSS_COMPILER_PREFIX${CROSS_clang_TOOL-clang}$CROSS_clang_FLAGS"
-CXX="$CROSS_COMPILER_PREFIX${CROSS_clangxx_TOOL-clang++}$CROSS_clangxx_FLAGS"
-CCASFLAGS="-no-integrated-as -Wno-unicode"
index a3ee157..1e4519b 100644 (file)
@@ -6,14 +6,24 @@ sysconfdir=\${prefix}/etc
 
 host_alias=$CROSS_ARCH ac_tool_prefix=$CROSS_ARCH-
 
-case ${CROSS_NATIVE_P-nil} in
-  t)
+case ${CROSS_NATIVE_P-nil},${CROSS_COMPILER-gcc} in
+  t,gcc)
     CC="${CROSS_COMPILER_PREFIX}gcc$CROSS_gcc_FLAGS"
     CXX="${CROSS_COMPILER_PREFIX}g++$CROSS_gxx_FLAGS"
     ;;
-  nil)
+  nil,gcc)
     cross_compiling=yes
     CC="$CROSS_COMPILER_PREFIX$CROSS_ARCH-gcc$CROSS_gcc_FLAGS"
     CXX="$CROSS_COMPILER_PREFIX$CROSS_ARCH-g++$CROSS_gxx_FLAGS"
     ;;
+  t,clang)
+    CC="${CROSS_COMPILER_PREFIX}clang$CROSS_clang_FLAGS"
+    CXX="${CROSS_COMPILER_PREFIX}clang++$CROSS_clangxx_FLAGS"
+    ;;
+  nil,clang)
+    cross_compiling=yes
+    CC="$CROSS_COMPILER_PREFIX${CROSS_clang_TOOL-clang}$CROSS_clang_FLAGS"
+    CXX="$CROSS_COMPILER_PREFIX${CROSS_clangxx_TOOL-clang++}$CROSS_clangxx_FLAGS"
+    CCASFLAGS="-no-integrated-as -Wno-unicode"
+    ;;
 esac
index ddfd71e..38d3136 100644 (file)
@@ -41,4 +41,28 @@ case :$PATH: in
   *) PATH=$CROSSDIR/tools:$PATH ;;
 esac
 
+case ${CROSS_NATIVE_P-nil} in
+  t) gcc=gcc clang=clang ;;
+  nil) gcc=$CROSS_ARCH-gcc clang=${CROSS_clang_TOOL-clang} ;;
+esac
+if type >/dev/null 2>&1 "$gcc"; then found_gcc=t; else found_gcc=nil; fi
+if type >/dev/null 2>&1 "$clang"; then found_clang=t; else found_clang=nil; fi
+case ${CROSS_COMPILER-guess},$found_gcc,$found_clang in
+  guess,t,* | prefer-gcc,t,* | gcc,t,* | prefer-clang,t,nil)
+    CROSS_COMPILER=gcc ;;
+  guess,nil,t | prefer-clang,*,t | clang,*,t | prefer-gcc,nil,t)
+    CROSS_COMPILER=clang ;;
+  guess,* | prefer-gcc,* | prefer-clang,*)
+    echo 2>&1 "${0##*/}: couldn't find C compiler \`$gcc' or \`$clang'"
+    exit 2
+    ;;
+  gcc,*) echo 2>&1 "${0##*/}: couldn't find C compiler \`$gcc'"; exit 2 ;;
+  clang,*) echo 2>&1 "${0##*/}: couldn't find C compiler \`$clang'"; exit 2 ;;
+  *)
+    echo 2>&1 "${0##*/}: unrecognized preferred compiler \`$CROSS_COMPILER'"
+    exit 2
+    ;;
+esac
+export CROSS_COMPILER
+
 exec "$@"