build: Detect compiler toolchain in configure

We need to know this up front.

Change-Id: I3a9ceb90cf62eacbf3fdf518a9ccb4c4978b3a05
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463014
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Ben Walker 2019-07-24 10:15:08 -07:00 committed by Jim Harris
parent f89166c089
commit 73439e6f46
4 changed files with 29 additions and 16 deletions

View File

@ -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) ; \

14
configure vendored
View File

@ -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"

View File

@ -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

View File

@ -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 ""
}