xref: /leveldb-1.20/build_detect_platform (revision 9013f13b)
1#!/bin/sh
2
3# Detects OS we're compiling on and generates build_config.mk,
4# which in turn gets read while processing Makefile.
5
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
12
13# Delete existing build_config.mk
14rm -f build_config.mk
15
16if test -z "$CXX"; then
17    CXX=g++
18fi
19
20# Detect OS
21case `uname -s` in
22    Darwin)
23        PLATFORM=OS_MACOSX
24        echo "PLATFORM_CFLAGS=-DOS_MACOSX" >> build_config.mk
25        echo "PLATFORM_LDFLAGS="  >> build_config.mk
26        ;;
27    Linux)
28        PLATFORM=OS_LINUX
29        echo "PLATFORM_CFLAGS=-pthread -DOS_LINUX" >> build_config.mk
30        echo "PLATFORM_LDFLAGS=-pthread"  >> build_config.mk
31        ;;
32    SunOS)
33        PLATFORM=OS_SOLARIS
34        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_SOLARIS"  >> build_config.mk
35        echo "PLATFORM_LDFLAGS=-lpthread -lrt" >> build_config.mk
36        ;;
37    FreeBSD)
38        PLATFORM=OS_FREEBSD
39        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_FREEBSD"  >> build_config.mk
40        echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk
41        ;;
42    NetBSD)
43        PLATFORM=OS_NETBSD
44        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_NETBSD"  >> build_config.mk
45        echo "PLATFORM_LDFLAGS=-lpthread -lgcc_s" >> build_config.mk
46        ;;
47    OpenBSD)
48        PLATFORM=OS_OPENBSD
49        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_OPENBSD"  >> build_config.mk
50        echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk
51        ;;
52    DragonFly)
53        PLATFORM=OS_DRAGONFLYBSD
54        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_DRAGONFLYBSD"  >> build_config.mk
55        echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk
56        ;;
57    *)
58        echo "Unknown platform!"
59        exit 1
60esac
61
62echo "PLATFORM=$PLATFORM" >> build_config.mk
63
64# On GCC, use libc's memcmp, not GCC's memcmp
65PORT_CFLAGS="-fno-builtin-memcmp"
66
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() {}
74EOF
75if [ "$?" = 0 ]; then
76    PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT -std=c++0x"
77else
78    PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX"
79fi
80
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() {}
86EOF
87if [ "$?" = 0 ]; then
88    echo "SNAPPY=1" >> build_config.mk
89else
90    echo "SNAPPY=0" >> build_config.mk
91fi
92
93echo "PORT_CFLAGS=$PORT_CFLAGS" >> build_config.mk
94