From 73439e6f467d38a9c8a373fa2bb17672d57e82f5 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 24 Jul 2019 10:15:08 -0700 Subject: [PATCH] build: Detect compiler toolchain in configure We need to know this up front. Change-Id: I3a9ceb90cf62eacbf3fdf518a9ccb4c4978b3a05 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463014 Reviewed-by: Tomasz Zawadzki Reviewed-by: Darek Stojaczyk Reviewed-by: Paul Luse Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- Makefile | 12 +++++------- configure | 14 +++++++++++--- mk/spdk.common.mk | 4 ---- scripts/detect_cc.sh | 15 +++++++++++++-- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 565c20f52..d512d54da 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ DIRS-$(CONFIG_TESTS) += test DIRS-$(CONFIG_IPSEC_MB) += ipsecbuild DIRS-$(CONFIG_ISAL) += isalbuild -.PHONY: all clean $(DIRS-y) include/spdk/config.h mk/config.mk mk/cc.mk \ +.PHONY: all clean $(DIRS-y) include/spdk/config.h mk/config.mk \ cc_version cxx_version .libs_only_other .ldflags ldflags install \ uninstall @@ -72,9 +72,8 @@ LIB += isalbuild DPDK_DEPS += isalbuild endif -all: $(DIRS-y) +all: mk/cc.mk $(DIRS-y) clean: $(DIRS-y) - $(Q)rm -f mk/cc.mk $(Q)rm -f include/spdk/config.h install: all @@ -95,12 +94,11 @@ examples: $(LIB) pkgdep: sh ./scripts/pkgdep.sh -$(DIRS-y): mk/cc.mk include/spdk/config.h +$(DIRS-y): include/spdk/config.h mk/cc.mk: - $(Q)scripts/detect_cc.sh --cc="$(CC)" --cxx="$(CXX)" --lto="$(CONFIG_LTO)" --ld="$(LD)" > $@.tmp; \ - cmp -s $@.tmp $@ || mv $@.tmp $@ ; \ - rm -f $@.tmp + $(Q)echo "Please run configure prior to make" + false include/spdk/config.h: mk/config.mk scripts/genconfig.py $(Q)PYCMD=$$(cat PYTHON_COMMAND 2>/dev/null) ; \ diff --git a/configure b/configure index 305d936c8..135074ef9 100755 --- a/configure +++ b/configure @@ -86,8 +86,11 @@ function usage() echo "" echo "Environment variables:" echo "" + echo "CC C compiler" echo "CFLAGS C compiler flags" + echo "CXX C++ compiler" echo "CXXFLAGS C++ compiler flags" + echo "LD Linker" echo "LDFLAGS Linker flags" echo "DESTDIR Destination for 'make install'" echo "" @@ -100,8 +103,6 @@ declare -A CONFIG source CONFIG.sh rm CONFIG.sh -BUILD_CMD="${CC:-cc} -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS" - function check_dir() { arg="$1" dir="${arg#*=}" @@ -340,6 +341,14 @@ for i in "$@"; do esac done +# Detect the compiler toolchain +scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" > mk/cc.mk + +CC=$(cat mk/cc.mk | grep "CC=" | cut -d "=" -f 2) +CC_TYPE=$(cat mk/cc.mk | grep "CC_TYPE=" | cut -d "=" -f 2) + +BUILD_CMD="$CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS" + # Detect architecture and force no isal if non x86 archtecture arch=$(uname -m) if [[ $arch != x86_64* ]]; then @@ -625,7 +634,6 @@ if [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." exit 1 elif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then - CC_TYPE=$($rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" | grep "CC_TYPE" | cut -d "=" -f 2) if [[ "$CC_TYPE" = "clang" ]]; then # For clang we need to run an extra step on gathered profiling data. echo "Generating suitable profile data" diff --git a/mk/spdk.common.mk b/mk/spdk.common.mk index bf0be47fa..fb67677ac 100644 --- a/mk/spdk.common.mk +++ b/mk/spdk.common.mk @@ -138,10 +138,6 @@ endif ifeq ($(OS),FreeBSD) SYS_LIBS += -L/usr/local/lib COMMON_CFLAGS += -I/usr/local/include -# Default to lld on FreeBSD -ifeq ($(origin LD),default) -LD = ld.lld -endif endif # Attach only if PMDK lib specified with configure diff --git a/scripts/detect_cc.sh b/scripts/detect_cc.sh index e0f4bcc7f..1de93aa90 100755 --- a/scripts/detect_cc.sh +++ b/scripts/detect_cc.sh @@ -61,11 +61,22 @@ for i in "$@"; do esac done +OS=$(uname) + : ${CC=cc} : ${CXX=c++} -: ${LD=ld} +: ${LD=} : ${LTO=n} +if [ -z "$LD" ]; then + if [ "$OS" = "Linux" ]; then + LD=ld + fi + if [ "$OS" = "FreeBSD" ]; then + LD=ld.lld + fi +fi + CC_TYPE=$($CC -v 2>&1 | grep -o -E '\w+ version' | head -1 | awk '{ print $1 }') CXX_TYPE=$($CXX -v 2>&1 | grep -o -E '\w+ version' | head -1 | awk '{ print $1 }') if [ "$CC_TYPE" != "$CXX_TYPE" ]; then @@ -104,7 +115,7 @@ fi function set_default() { echo "ifeq (\$(origin $1),default)" - echo "$1 = $2" + echo "$1=$2" echo "endif" echo "" }