From: Mark Wooding Date: Wed, 22 Apr 2020 21:42:48 +0000 (+0100) Subject: Decide automatically whether to use GCC or Clang. X-Git-Url: https://git.distorted.org.uk/~mdw/mdw-cross/commitdiff_plain/e0ce8eebf1950053b4b4ee55525cdf11a72f0933 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'. --- 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 "$@"