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