Commit 1a56982d authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

build: Make detect_cc.sh handle --cross-prefix



This internal tool can now be passed an optional --cross-prefix,
which sets up the prefix used for a cross compiler.

Change-Id: Ia4bbbae3bd5a2e4ddc9da342cd03d600e9ee6099
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463016


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent c510bd88
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ function usage()
	err " --cxx=path                C++ compiler to use"
	err " --ld=path                 Linker to use"
	err " --lto=[y|n]               Attempt to configure for LTO"
	err " --cross-prefix=prefix     Use the given prefix for the cross compiler toolchain"
}


@@ -51,6 +52,11 @@ for i in "$@"; do
				LD="${i#*=}"
			fi
			;;
		--cross-prefix=*)
			if [[ -n "${i#*=}" ]]; then
				CROSS_PREFIX="${i#*=}"
			fi
			;;
		--)
			break
			;;
@@ -67,6 +73,7 @@ OS=$(uname)
: ${CXX=c++}
: ${LD=}
: ${LTO=n}
: ${CROSS_PREFIX=}

if [ -z "$LD" ]; then
	if [ "$OS" = "Linux" ]; then
@@ -113,6 +120,53 @@ if [ "$LTO" = "y" ]; then
	fi
fi

if [ ! -z "$CROSS_PREFIX" ]; then
	expected_prefix=$($CC -dumpmachine)

	if [ ! "$expected_prefix" = "$CROSS_PREFIX" ]; then
		err "Cross prefix specified ($CROSS_PREFIX) does not match prefix of $CC ($expected_prefix)."

		# Try to fix this automatically. Maybe the user set CROSS_PREFIX but not CC.
		CC=$CROSS_PREFIX-$CC
		if hash $CC 2>/dev/null; then
			expected_prefix=$($CC -dumpmachine)

			if [ "$expected_prefix" = "$CROSS_PREFIX" ]; then
				err "Automatically changed CC to $CC"
			else
				err "Set CC to the appropriate compiler."
				exit 1
			fi
		else
			err "Set CC to the appropriate compiler."
			exit 1
		fi

	fi

	expected_prefix=$($CXX -dumpmachine)

	if [ ! "$expected_prefix" = "$CROSS_PREFIX" ]; then
		err "Cross prefix specified ($CROSS_PREFIX) does not match prefix of $CXX ($expected_prefix)."

		# Try to fix this automatically. Maybe the user set CROSS_PREFIX but not CXX.
		CXX=$CROSS_PREFIX-$CXX
		if hash $CXX 2>/dev/null; then
			expected_prefix=$($CXX -dumpmachine)

			if [ "$expected_prefix" = "$CROSS_PREFIX" ]; then
				err "Automatically changed CXX to $CXX"
			else
				err "Set CXX to the appropriate compiler."
				exit 1
			fi
		else
			err "Set CXX to the appropriate compiler."
			exit 1
		fi
	fi
fi

function set_default() {
	echo "ifeq (\$(origin $1),default)"
	echo "$1=$2"
@@ -127,3 +181,7 @@ set_default LD $LD
echo "CCAR=$CCAR"
echo "CC_TYPE=$CC_TYPE"
echo "LD_TYPE=$LD_TYPE"

if [ ! -z "$CROSS_PREFIX" ]; then
	echo "CROSS_PREFIX=$CROSS_PREFIX"
fi