From f423f05dcd1dce0a5c6a8db170434629c9705b3a Mon Sep 17 00:00:00 2001 From: bcbrock Date: Tue, 19 Jan 2016 09:08:19 -0600 Subject: [PATCH] Simple changes to support builds for ppc64[le] consistent with X86 These simple changes are required to allow builds on ppc64[le] systems consistent with X86. The Makefile now recognizes both ppc64 and ppc64le, and in the absence of PORTABLE=1, the code will be built analogously to the X86 -march=native. Note that although GCC supports -mcpu=native -mtune=native on POWER, it doesn't work correctly on all systems. This is why we need to get the actual machine model from the AUX vector. --- INSTALL.md | 2 +- Makefile | 2 +- build_tools/build_detect_platform | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index bff75155f..3669bf1cf 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -21,7 +21,7 @@ depend on gflags. You will need to have gflags installed to run `make all`. This use binaries compiled by `make all` in production. * By default the binary we produce is optimized for the platform you're compiling on -(-march=native). If you want to build a portable binary, add 'PORTABLE=1' before +(-march=native or the equivalent). If you want to build a portable binary, add 'PORTABLE=1' before your make commands, like this: `PORTABLE=1 make static_lib` ## Dependencies diff --git a/Makefile b/Makefile index 396b8e201..4dba4f6d2 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ endif # compile with -O2 if debug level is not 2 ifneq ($(DEBUG_LEVEL), 2) OPT += -O2 -fno-omit-frame-pointer -ifneq ($(MACHINE),ppc64) # ppc64 doesn't support -momit-leaf-frame-pointer +ifeq (,$(findstring ppc64,$(MACHINE))) # ppc64[le] doesn't support -momit-leaf-frame-pointer OPT += -momit-leaf-frame-pointer endif endif diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform index fc099a540..80905266f 100755 --- a/build_tools/build_detect_platform +++ b/build_tools/build_detect_platform @@ -359,7 +359,13 @@ if test "$USE_SSE"; then # if Intel SSE instruction set is supported, set USE_SSE=1 COMMON_FLAGS="$COMMON_FLAGS -msse -msse4.2 " elif test -z "$PORTABLE"; then - COMMON_FLAGS="$COMMON_FLAGS -march=native " + if test -n "`echo $TARGET_ARCHITECTURE | grep ^ppc64`"; then + # Tune for this POWER processor, treating '+' models as base models + POWER=`LD_SHOW_AUXV=1 /bin/true | grep AT_PLATFORM | grep -E -o power[0-9]+` + COMMON_FLAGS="$COMMON_FLAGS -mcpu=$POWER -mtune=$POWER " + else + COMMON_FLAGS="$COMMON_FLAGS -march=native " + fi fi PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS"