diff options
Diffstat (limited to 'build_detect_platform')
-rw-r--r-- | build_detect_platform | 146 |
1 files changed, 99 insertions, 47 deletions
diff --git a/build_detect_platform b/build_detect_platform index 5f9e021..df85264 100644 --- a/build_detect_platform +++ b/build_detect_platform @@ -1,93 +1,145 @@ #!/bin/sh - +# # Detects OS we're compiling on and generates build_config.mk, # which in turn gets read while processing Makefile. - +# # build_config.mk will set the following variables: -# - PORT_CFLAGS will either set: -# -DLEVELDB_PLATFORM_POSIX if cstatomic is present -# -DLEVELDB_PLATFORM_NOATOMIC if it is not -# - PLATFORM_CFLAGS with compiler flags for the platform -# - PLATFORM_LDFLAGS with linker flags for the platform +# PLATFORM_LDFLAGS Linker flags +# PLATFORM_CCFLAGS C compiler flags +# PLATFORM_CXXFLAGS C++ compiler flags. Will contain: +# -DLEVELDB_PLATFORM_POSIX if cstdatomic is present +# -DLEVELDB_PLATFORM_NOATOMIC if it is not + +SCRIPT_DIR=`dirname $0` # Delete existing build_config.mk rm -f build_config.mk +touch build_config.mk if test -z "$CXX"; then CXX=g++ fi # Detect OS -case `uname -s` in +if test -z "$TARGET_OS"; then + TARGET_OS=`uname -s` +fi + +COMMON_FLAGS= +PLATFORM_CCFLAGS= +PLATFORM_CXXFLAGS= +PLATFORM_LDFLAGS= + +# On GCC, we pick libc's memcmp over GCC's memcmp via -fno-builtin-memcmp +case "$TARGET_OS" in Darwin) PLATFORM=OS_MACOSX - echo "PLATFORM_CFLAGS=-DOS_MACOSX" >> build_config.mk - echo "PLATFORM_LDFLAGS=" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -DOS_MACOSX" + PORT_FILE=port/port_posix.cc ;; Linux) PLATFORM=OS_LINUX - echo "PLATFORM_CFLAGS=-pthread -DOS_LINUX" >> build_config.mk - echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -pthread -DOS_LINUX" + PLATFORM_LDFLAGS="-pthread" + PORT_FILE=port/port_posix.cc ;; SunOS) PLATFORM=OS_SOLARIS - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_SOLARIS" >> build_config.mk - echo "PLATFORM_LDFLAGS=-lpthread -lrt" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_SOLARIS" + PLATFORM_LDFLAGS="-lpthread -lrt" + PORT_FILE=port/port_posix.cc ;; FreeBSD) PLATFORM=OS_FREEBSD - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_FREEBSD" >> build_config.mk - echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_FREEBSD" + PLATFORM_LDFLAGS="-lpthread" + PORT_FILE=port/port_posix.cc ;; NetBSD) PLATFORM=OS_NETBSD - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_NETBSD" >> build_config.mk - echo "PLATFORM_LDFLAGS=-lpthread -lgcc_s" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_NETBSD" + PLATFORM_LDFLAGS="-lpthread -lgcc_s" + PORT_FILE=port/port_posix.cc ;; OpenBSD) PLATFORM=OS_OPENBSD - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_OPENBSD" >> build_config.mk - echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_OPENBSD" + PLATFORM_LDFLAGS="-pthread" + PORT_FILE=port/port_posix.cc ;; DragonFly) PLATFORM=OS_DRAGONFLYBSD - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_DRAGONFLYBSD" >> build_config.mk - echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_DRAGONFLYBSD" + PLATFORM_LDFLAGS="-lpthread" + PORT_FILE=port/port_posix.cc + ;; + OS_ANDROID_CROSSCOMPILE) + PLATFORM="$TARGET_OS" + COMMON_FLAGS="" + PLATFORM_LDFLAGS="" + PORT_FILE=port/port_android.cc ;; *) echo "Unknown platform!" exit 1 esac -echo "PLATFORM=$PLATFORM" >> build_config.mk +# We want to make a list of all cc files within util, db, table, and helpers +# except for the test and benchmark files. By default, find will output a list +# of all files matching either rule, so we need to append -print to make the +# prune take effect. +DIRS="$SCRIPT_DIR/util $SCRIPT_DIR/db $SCRIPT_DIR/table" +set -f # temporarily disable globbing so that our patterns aren't expanded +PRUNE_TEST="-name *test*.cc -prune" +PRUNE_BENCH="-name *_bench.cc -prune" +PORTABLE_FILES=`find $DIRS $PRUNE_TEST -o $PRUNE_BENCH -o -name '*.cc' -print | sort | tr "\n" " "` +set +f # re-enable globbing -# On GCC, use libc's memcmp, not GCC's memcmp -PORT_CFLAGS="-fno-builtin-memcmp" +# The sources consist of the portable files, plus the platform-specific port +# file. +echo "SOURCES=$PORTABLE_FILES $PORT_FILE" >> build_config.mk +echo "MEMENV_SOURCES=helpers/memenv/memenv.cc" >> build_config.mk -# Detect C++0x -- this determines whether we'll use port_noatomic.h -# or port_posix.h by: -# 1. Rrying to compile with -std=c++0x and including <cstdatomic>. -# 2. If $CXX returns error code, we know to use port_posix.h -$CXX $CFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null <<EOF - #include <cstdatomic> - int main() {} -EOF -if [ "$?" = 0 ]; then - PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT -std=c++0x" +if [ "$PLATFORM" = "OS_ANDROID_CROSSCOMPILE" ]; then + # Cross-compiling; do not try any compilation tests. + true else - PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX" -fi + # If -std=c++0x works, use <cstdatomic>. Otherwise use port_posix.h. + $CXX $CFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null <<EOF + #include <cstdatomic> + int main() {} +EOF + if [ "$?" = 0 ]; then + COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT" + PLATFORM_CXXFLAGS="-std=c++0x" + else + COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX" + fi -# Test whether Snappy library is installed -# http://code.google.com/p/snappy/ -$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF - #include <snappy.h> - int main() {} + # Test whether Snappy library is installed + # http://code.google.com/p/snappy/ + $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF + #include <snappy.h> + int main() {} EOF -if [ "$?" = 0 ]; then - echo "SNAPPY=1" >> build_config.mk -else - echo "SNAPPY=0" >> build_config.mk + if [ "$?" = 0 ]; then + COMMON_FLAGS="$COMMON_FLAGS -DSNAPPY" + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lsnappy" + fi + + # Test whether tcmalloc is available + $CXX $CFLAGS -x c++ - -o /dev/null -ltcmalloc 2>/dev/null <<EOF + int main() {} +EOF + if [ "$?" = 0 ]; then + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -ltcmalloc" + fi fi -echo "PORT_CFLAGS=$PORT_CFLAGS" >> build_config.mk +PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS" +PLATFORM_CXXFLAGS="$PLATFORM_CXXFLAGS $COMMON_FLAGS" + +echo "PLATFORM=$PLATFORM" >> build_config.mk +echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> build_config.mk +echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> build_config.mk +echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> build_config.mk |