@@ -63,6 +63,7 @@ PLATFORM_SHARED_EXT="so"
6363PLATFORM_SHARED_LDFLAGS=" -shared -Wl,-soname -Wl,"
6464PLATFORM_SHARED_CFLAGS=" -fPIC"
6565PLATFORM_SHARED_VERSIONED=true
66+ PLATFORM_SSEFLAGS=
6667
6768MEMCMP_FLAG=
6869if [ " $CXX " = " g++" ]; then
@@ -77,6 +78,7 @@ case "$TARGET_OS" in
7778 COMMON_FLAGS=" $MEMCMP_FLAG -lpthread -DOS_LINUX -DCYGWIN"
7879 PLATFORM_LDFLAGS=" -lpthread"
7980 PORT_FILE=port/port_posix.cc
81+ PORT_SSE_FILE=port/port_posix_sse.cc
8082 ;;
8183 Darwin)
8284 PLATFORM=OS_MACOSX
@@ -85,55 +87,64 @@ case "$TARGET_OS" in
8587 [ -z " $INSTALL_PATH " ] && INSTALL_PATH=` pwd`
8688 PLATFORM_SHARED_LDFLAGS=" -dynamiclib -install_name $INSTALL_PATH /"
8789 PORT_FILE=port/port_posix.cc
90+ PORT_SSE_FILE=port/port_posix_sse.cc
8891 ;;
8992 Linux)
9093 PLATFORM=OS_LINUX
9194 COMMON_FLAGS=" $MEMCMP_FLAG -pthread -DOS_LINUX"
9295 PLATFORM_LDFLAGS=" -pthread"
9396 PORT_FILE=port/port_posix.cc
97+ PORT_SSE_FILE=port/port_posix_sse.cc
9498 ;;
9599 SunOS)
96100 PLATFORM=OS_SOLARIS
97101 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_SOLARIS"
98102 PLATFORM_LIBS=" -lpthread -lrt"
99103 PORT_FILE=port/port_posix.cc
104+ PORT_SSE_FILE=port/port_posix_sse.cc
100105 ;;
101106 FreeBSD)
102107 PLATFORM=OS_FREEBSD
103108 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_FREEBSD"
104109 PLATFORM_LIBS=" -lpthread"
105110 PORT_FILE=port/port_posix.cc
111+ PORT_SSE_FILE=port/port_posix_sse.cc
106112 ;;
107113 NetBSD)
108114 PLATFORM=OS_NETBSD
109115 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_NETBSD"
110116 PLATFORM_LIBS=" -lpthread -lgcc_s"
111117 PORT_FILE=port/port_posix.cc
118+ PORT_SSE_FILE=port/port_posix_sse.cc
112119 ;;
113120 OpenBSD)
114121 PLATFORM=OS_OPENBSD
115122 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_OPENBSD"
116123 PLATFORM_LDFLAGS=" -pthread"
117124 PORT_FILE=port/port_posix.cc
125+ PORT_SSE_FILE=port/port_posix_sse.cc
118126 ;;
119127 DragonFly)
120128 PLATFORM=OS_DRAGONFLYBSD
121129 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_DRAGONFLYBSD"
122130 PLATFORM_LIBS=" -lpthread"
123131 PORT_FILE=port/port_posix.cc
132+ PORT_SSE_FILE=port/port_posix_sse.cc
124133 ;;
125134 OS_ANDROID_CROSSCOMPILE)
126135 PLATFORM=OS_ANDROID
127136 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_ANDROID -DLEVELDB_PLATFORM_POSIX"
128137 PLATFORM_LDFLAGS=" " # All pthread features are in the Android C library
129138 PORT_FILE=port/port_posix.cc
139+ PORT_SSE_FILE=port/port_posix_sse.cc
130140 CROSS_COMPILE=true
131141 ;;
132142 HP-UX)
133143 PLATFORM=OS_HPUX
134144 COMMON_FLAGS=" $MEMCMP_FLAG -D_REENTRANT -DOS_HPUX"
135145 PLATFORM_LDFLAGS=" -pthread"
136146 PORT_FILE=port/port_posix.cc
147+ PORT_SSE_FILE=port/port_posix_sse.cc
137148 # man ld: +h internal_name
138149 PLATFORM_SHARED_LDFLAGS=" -shared -Wl,+h -Wl,"
139150 ;;
@@ -142,6 +153,7 @@ case "$TARGET_OS" in
142153 COMMON_FLAGS=" $MEMCMP_FLAG -DOS_MACOSX"
143154 [ -z " $INSTALL_PATH " ] && INSTALL_PATH=` pwd`
144155 PORT_FILE=port/port_posix.cc
156+ PORT_SSE_FILE=port/port_posix_sse.cc
145157 PLATFORM_SHARED_EXT=
146158 PLATFORM_SHARED_LDFLAGS=
147159 PLATFORM_SHARED_CFLAGS=
@@ -168,7 +180,7 @@ set +f # re-enable globbing
168180
169181# The sources consist of the portable files, plus the platform-specific port
170182# file.
171- echo " SOURCES=$PORTABLE_FILES $PORT_FILE " >> $OUTPUT
183+ echo " SOURCES=$PORTABLE_FILES $PORT_FILE $PORT_SSE_FILE " >> $OUTPUT
172184echo " MEMENV_SOURCES=helpers/memenv/memenv.cc" >> $OUTPUT
173185
174186if [ " $CROSS_COMPILE " = " true" ]; then
210222 fi
211223
212224 rm -f $CXXOUTPUT 2> /dev/null
225+
226+ # Test if gcc SSE 4.2 is supported
227+ $CXX $CXXFLAGS -x c++ - -o $CXXOUTPUT -msse4.2 2> /dev/null << EOF
228+ int main() {}
229+ EOF
230+ if [ " $? " = 0 ]; then
231+ PLATFORM_SSEFLAGS=" -msse4.2"
232+ fi
233+
234+ rm -f $CXXOUTPUT 2> /dev/null
235+ fi
236+
237+ # Use the SSE 4.2 CRC32C intrinsics iff runtime checks indicate compiler supports them.
238+ if [ -n " $PLATFORM_SSEFLAGS " ]; then
239+ PLATFORM_SSEFLAGS=" $PLATFORM_SSEFLAGS -DLEVELDB_PLATFORM_POSIX_SSE"
213240fi
214241
215242PLATFORM_CCFLAGS=" $PLATFORM_CCFLAGS $COMMON_FLAGS "
@@ -222,6 +249,7 @@ echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> $OUTPUT
222249echo " PLATFORM_LIBS=$PLATFORM_LIBS " >> $OUTPUT
223250echo " PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS " >> $OUTPUT
224251echo " PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS " >> $OUTPUT
252+ echo " PLATFORM_SSEFLAGS=$PLATFORM_SSEFLAGS " >> $OUTPUT
225253echo " PLATFORM_SHARED_CFLAGS=$PLATFORM_SHARED_CFLAGS " >> $OUTPUT
226254echo " PLATFORM_SHARED_EXT=$PLATFORM_SHARED_EXT " >> $OUTPUT
227255echo " PLATFORM_SHARED_LDFLAGS=$PLATFORM_SHARED_LDFLAGS " >> $OUTPUT
0 commit comments