forked from facebook/rocksdb
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(1) Separate out C++ and CC flags (fixes c_test compilation) (2) Move snappy/perftools detection to script (3) Fix db_bench_sqlite3 and db_bench_tree_db build rules
- Loading branch information
Showing
3 changed files
with
114 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters