| #!/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 |
| |
| # Delete existing build_config.mk |
| rm -f build_config.mk |
| |
| if test -z "$CXX"; then |
| CXX=g++ |
| fi |
| |
| # Detect OS |
| case `uname -s` in |
| Darwin) |
| PLATFORM=OS_MACOSX |
| echo "PLATFORM_CFLAGS=-DOS_MACOSX" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=" >> build_config.mk |
| ;; |
| Linux) |
| PLATFORM=OS_LINUX |
| echo "PLATFORM_CFLAGS=-pthread -DOS_LINUX" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk |
| ;; |
| SunOS) |
| PLATFORM=OS_SOLARIS |
| echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_SOLARIS" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-lpthread -lrt" >> build_config.mk |
| ;; |
| FreeBSD) |
| PLATFORM=OS_FREEBSD |
| echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_FREEBSD" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk |
| ;; |
| NetBSD) |
| PLATFORM=OS_NETBSD |
| echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_NETBSD" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-lpthread -lgcc_s" >> build_config.mk |
| ;; |
| OpenBSD) |
| PLATFORM=OS_OPENBSD |
| echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_OPENBSD" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk |
| ;; |
| DragonFly) |
| PLATFORM=OS_DRAGONFLYBSD |
| echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_DRAGONFLYBSD" >> build_config.mk |
| echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk |
| ;; |
| *) |
| echo "Unknown platform!" |
| exit 1 |
| esac |
| |
| echo "PLATFORM=$PLATFORM" >> build_config.mk |
| |
| # On GCC, use libc's memcmp, not GCC's memcmp; and use PIE |
| PORT_CFLAGS="-fno-builtin-memcmp -fPIE" |
| |
| # 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" |
| else |
| PORT_CFLAGS="$PORT_CFLAGS -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() {} |
| EOF |
| if [ "$?" = 0 ]; then |
| echo "SNAPPY=1" >> build_config.mk |
| else |
| echo "SNAPPY=0" >> build_config.mk |
| fi |
| |
| echo "PORT_CFLAGS=$PORT_CFLAGS" >> build_config.mk |