|
1 | 1 | #!/bin/sh
|
2 |
| - |
| 2 | +# |
3 | 3 | # Detects OS we're compiling on and generates build_config.mk,
|
4 | 4 | # which in turn gets read while processing Makefile.
|
5 |
| - |
| 5 | +# |
6 | 6 | # build_config.mk will set the following variables:
|
7 |
| -# - PORT_CFLAGS will either set: |
8 |
| -# -DLEVELDB_PLATFORM_POSIX if cstatomic is present |
9 |
| -# -DLEVELDB_PLATFORM_NOATOMIC if it is not |
10 |
| -# - PLATFORM_CFLAGS with compiler flags for the platform |
11 |
| -# - PLATFORM_LDFLAGS with linker flags for the platform |
| 7 | +# PLATFORM_LDFLAGS Linker flags |
| 8 | +# PLATFORM_CCFLAGS C compiler flags |
| 9 | +# PLATFORM_CXXFLAGS C++ compiler flags. Will contain: |
| 10 | +# -DLEVELDB_PLATFORM_POSIX if cstdatomic is present |
| 11 | +# -DLEVELDB_PLATFORM_NOATOMIC if it is not |
| 12 | + |
| 13 | +SCRIPT_DIR=`dirname $0` |
12 | 14 |
|
13 | 15 | # Delete existing build_config.mk
|
14 | 16 | rm -f build_config.mk
|
| 17 | +touch build_config.mk |
15 | 18 |
|
16 | 19 | if test -z "$CXX"; then
|
17 | 20 | CXX=g++
|
18 | 21 | fi
|
19 | 22 |
|
20 | 23 | # Detect OS
|
21 |
| -case `uname -s` in |
| 24 | +if test -z "$TARGET_OS"; then |
| 25 | + TARGET_OS=`uname -s` |
| 26 | +fi |
| 27 | + |
| 28 | +COMMON_FLAGS= |
| 29 | +PLATFORM_CCFLAGS= |
| 30 | +PLATFORM_CXXFLAGS= |
| 31 | +PLATFORM_LDFLAGS= |
| 32 | + |
| 33 | +# On GCC, we pick libc's memcmp over GCC's memcmp via -fno-builtin-memcmp |
| 34 | +case "$TARGET_OS" in |
22 | 35 | Darwin)
|
23 | 36 | PLATFORM=OS_MACOSX
|
24 |
| - echo "PLATFORM_CFLAGS=-DOS_MACOSX" >> build_config.mk |
25 |
| - echo "PLATFORM_LDFLAGS=" >> build_config.mk |
| 37 | + COMMON_FLAGS="-fno-builtin-memcmp -DOS_MACOSX" |
| 38 | + PORT_FILE=port/port_posix.cc |
26 | 39 | ;;
|
27 | 40 | Linux)
|
28 | 41 | PLATFORM=OS_LINUX
|
29 |
| - echo "PLATFORM_CFLAGS=-pthread -DOS_LINUX" >> build_config.mk |
30 |
| - echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk |
| 42 | + COMMON_FLAGS="-fno-builtin-memcmp -pthread -DOS_LINUX" |
| 43 | + PLATFORM_LDFLAGS="-pthread" |
| 44 | + PORT_FILE=port/port_posix.cc |
31 | 45 | ;;
|
32 | 46 | SunOS)
|
33 | 47 | PLATFORM=OS_SOLARIS
|
34 |
| - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_SOLARIS" >> build_config.mk |
35 |
| - echo "PLATFORM_LDFLAGS=-lpthread -lrt" >> build_config.mk |
| 48 | + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_SOLARIS" |
| 49 | + PLATFORM_LDFLAGS="-lpthread -lrt" |
| 50 | + PORT_FILE=port/port_posix.cc |
36 | 51 | ;;
|
37 | 52 | FreeBSD)
|
38 | 53 | PLATFORM=OS_FREEBSD
|
39 |
| - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_FREEBSD" >> build_config.mk |
40 |
| - echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk |
| 54 | + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_FREEBSD" |
| 55 | + PLATFORM_LDFLAGS="-lpthread" |
| 56 | + PORT_FILE=port/port_posix.cc |
41 | 57 | ;;
|
42 | 58 | NetBSD)
|
43 | 59 | PLATFORM=OS_NETBSD
|
44 |
| - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_NETBSD" >> build_config.mk |
45 |
| - echo "PLATFORM_LDFLAGS=-lpthread -lgcc_s" >> build_config.mk |
| 60 | + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_NETBSD" |
| 61 | + PLATFORM_LDFLAGS="-lpthread -lgcc_s" |
| 62 | + PORT_FILE=port/port_posix.cc |
46 | 63 | ;;
|
47 | 64 | OpenBSD)
|
48 | 65 | PLATFORM=OS_OPENBSD
|
49 |
| - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_OPENBSD" >> build_config.mk |
50 |
| - echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk |
| 66 | + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_OPENBSD" |
| 67 | + PLATFORM_LDFLAGS="-pthread" |
| 68 | + PORT_FILE=port/port_posix.cc |
51 | 69 | ;;
|
52 | 70 | DragonFly)
|
53 | 71 | PLATFORM=OS_DRAGONFLYBSD
|
54 |
| - echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_DRAGONFLYBSD" >> build_config.mk |
55 |
| - echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk |
| 72 | + COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_DRAGONFLYBSD" |
| 73 | + PLATFORM_LDFLAGS="-lpthread" |
| 74 | + PORT_FILE=port/port_posix.cc |
| 75 | + ;; |
| 76 | + OS_ANDROID_CROSSCOMPILE) |
| 77 | + PLATFORM="$TARGET_OS" |
| 78 | + COMMON_FLAGS="" |
| 79 | + PLATFORM_LDFLAGS="" |
| 80 | + PORT_FILE=port/port_android.cc |
56 | 81 | ;;
|
57 | 82 | *)
|
58 | 83 | echo "Unknown platform!"
|
59 | 84 | exit 1
|
60 | 85 | esac
|
61 | 86 |
|
62 |
| -echo "PLATFORM=$PLATFORM" >> build_config.mk |
| 87 | +# We want to make a list of all cc files within util, db, table, and helpers |
| 88 | +# except for the test and benchmark files. By default, find will output a list |
| 89 | +# of all files matching either rule, so we need to append -print to make the |
| 90 | +# prune take effect. |
| 91 | +DIRS="$SCRIPT_DIR/util $SCRIPT_DIR/db $SCRIPT_DIR/table" |
| 92 | +set -f # temporarily disable globbing so that our patterns aren't expanded |
| 93 | +PRUNE_TEST="-name *test*.cc -prune" |
| 94 | +PRUNE_BENCH="-name *_bench.cc -prune" |
| 95 | +PORTABLE_FILES=`find $DIRS $PRUNE_TEST -o $PRUNE_BENCH -o -name '*.cc' -print | sort | tr "\n" " "` |
| 96 | +set +f # re-enable globbing |
63 | 97 |
|
64 |
| -# On GCC, use libc's memcmp, not GCC's memcmp |
65 |
| -PORT_CFLAGS="-fno-builtin-memcmp" |
| 98 | +# The sources consist of the portable files, plus the platform-specific port |
| 99 | +# file. |
| 100 | +echo "SOURCES=$PORTABLE_FILES $PORT_FILE" >> build_config.mk |
| 101 | +echo "MEMENV_SOURCES=helpers/memenv/memenv.cc" >> build_config.mk |
66 | 102 |
|
67 |
| -# Detect C++0x -- this determines whether we'll use port_noatomic.h |
68 |
| -# or port_posix.h by: |
69 |
| -# 1. Rrying to compile with -std=c++0x and including <cstdatomic>. |
70 |
| -# 2. If $CXX returns error code, we know to use port_posix.h |
71 |
| -$CXX $CFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null <<EOF |
72 |
| - #include <cstdatomic> |
73 |
| - int main() {} |
74 |
| -EOF |
75 |
| -if [ "$?" = 0 ]; then |
76 |
| - PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT -std=c++0x" |
| 103 | +if [ "$PLATFORM" = "OS_ANDROID_CROSSCOMPILE" ]; then |
| 104 | + # Cross-compiling; do not try any compilation tests. |
| 105 | + true |
77 | 106 | else
|
78 |
| - PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX" |
79 |
| -fi |
| 107 | + # If -std=c++0x works, use <cstdatomic>. Otherwise use port_posix.h. |
| 108 | + $CXX $CFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null <<EOF |
| 109 | + #include <cstdatomic> |
| 110 | + int main() {} |
| 111 | +EOF |
| 112 | + if [ "$?" = 0 ]; then |
| 113 | + COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT" |
| 114 | + PLATFORM_CXXFLAGS="-std=c++0x" |
| 115 | + else |
| 116 | + COMMON_FLAGS="$COMMON_FLAGS -DLEVELDB_PLATFORM_POSIX" |
| 117 | + fi |
80 | 118 |
|
81 |
| -# Test whether Snappy library is installed |
82 |
| -# http://code.google.com/p/snappy/ |
83 |
| -$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF |
84 |
| - #include <snappy.h> |
85 |
| - int main() {} |
| 119 | + # Test whether Snappy library is installed |
| 120 | + # http://code.google.com/p/snappy/ |
| 121 | + $CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF |
| 122 | + #include <snappy.h> |
| 123 | + int main() {} |
86 | 124 | EOF
|
87 |
| -if [ "$?" = 0 ]; then |
88 |
| - echo "SNAPPY=1" >> build_config.mk |
89 |
| -else |
90 |
| - echo "SNAPPY=0" >> build_config.mk |
| 125 | + if [ "$?" = 0 ]; then |
| 126 | + COMMON_FLAGS="$COMMON_FLAGS -DSNAPPY" |
| 127 | + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lsnappy" |
| 128 | + fi |
| 129 | + |
| 130 | + # Test whether tcmalloc is available |
| 131 | + $CXX $CFLAGS -x c++ - -o /dev/null -ltcmalloc 2>/dev/null <<EOF |
| 132 | + int main() {} |
| 133 | +EOF |
| 134 | + if [ "$?" = 0 ]; then |
| 135 | + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -ltcmalloc" |
| 136 | + fi |
91 | 137 | fi
|
92 | 138 |
|
93 |
| -echo "PORT_CFLAGS=$PORT_CFLAGS" >> build_config.mk |
| 139 | +PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS" |
| 140 | +PLATFORM_CXXFLAGS="$PLATFORM_CXXFLAGS $COMMON_FLAGS" |
| 141 | + |
| 142 | +echo "PLATFORM=$PLATFORM" >> build_config.mk |
| 143 | +echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> build_config.mk |
| 144 | +echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> build_config.mk |
| 145 | +echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> build_config.mk |
0 commit comments