From e0ce8eebf1950053b4b4ee55525cdf11a72f0933 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 22 Apr 2020 22:42:48 +0100 Subject: [PATCH] Decide automatically whether to use GCC or Clang. 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 | 4 ---- etc/common-cross-config.site | 16 +++++++++++++--- src/cross.in | 24 ++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/etc/android-cross-config.site b/etc/android-cross-config.site index 62d4ecb..b64053e 100644 --- a/etc/android-cross-config.site +++ b/etc/android-cross-config.site @@ -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" diff --git a/etc/common-cross-config.site b/etc/common-cross-config.site index a3ee157..1e4519b 100644 --- a/etc/common-cross-config.site +++ b/etc/common-cross-config.site @@ -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 diff --git a/src/cross.in b/src/cross.in index ddfd71e..38d3136 100644 --- a/src/cross.in +++ b/src/cross.in @@ -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 "$@" -- 2.11.0