if [ -n "$ROCKSDB_FBCODE_BUILD_WITH_481" ]; then
# we need this to build with MySQL. Don't use for other purposes.
source "$PWD/build_tools/fbcode_config4.8.1.sh"
- elif [ -n "$ROCKSDB_FBCODE_BUILD_WITH_PLATFORM007" ]; then
- source "$PWD/build_tools/fbcode_config_platform007.sh"
- else
+ elif [ -n "$ROCKSDB_FBCODE_BUILD_WITH_5xx" ]; then
source "$PWD/build_tools/fbcode_config.sh"
+ else
+ source "$PWD/build_tools/fbcode_config_platform007.sh"
fi
fi
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -latomic"
fi
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread -lrt"
+ if test $ROCKSDB_USE_IO_URING; then
+ # check for liburing
+ $CXX $CFLAGS -x c++ - -luring -o /dev/null 2>/dev/null <<EOF
+ #include <liburing.h>
+ int main() {
+ struct io_uring ring;
+ io_uring_queue_init(1, &ring, 0);
+ return 0;
+ }
+EOF
+ if [ "$?" = 0 ]; then
+ PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -luring"
+ COMMON_FLAGS="$COMMON_FLAGS -DROCKSDB_IOURING_PRESENT"
+ fi
+ fi
+ if test -z "$USE_FOLLY_DISTRIBUTED_MUTEX"; then
+ USE_FOLLY_DISTRIBUTED_MUTEX=1
+ fi
# PORT_FILES=port/linux/linux_specific.cc
;;
SunOS)
#include <malloc.h>
int main() {
size_t res = malloc_usable_size(0);
+ (void)res;
return 0;
}
EOF
#include <pthread.h>
int main() {
int x = PTHREAD_MUTEX_ADAPTIVE_NP;
+ (void)x;
return 0;
}
EOF
if ! test $ROCKSDB_DISABLE_BACKTRACE; then
# Test whether backtrace is available
$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- #include <execinfo.h>>
+ #include <execinfo.h>
int main() {
void* frames[1];
backtrace_symbols(frames, backtrace(frames, 1));
#include <sched.h>
int main() {
int cpuid = sched_getcpu();
+ (void)cpuid;
}
EOF
if [ "$?" = 0 ]; then
if test "$USE_HDFS"; then
if test -z "$JAVA_HOME"; then
- echo "JAVA_HOME has to be set for HDFS usage."
+ echo "JAVA_HOME has to be set for HDFS usage." >&2
exit 1
fi
HDFS_CCFLAGS="$HDFS_CCFLAGS -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -DUSE_HDFS -I$HADOOP_HOME/include"
JAVA_LDFLAGS="$JAVA_LDFLAGS $HDFS_LDFLAGS"
fi
-if test -z "$PORTABLE"; then
+if test "0$PORTABLE" -eq 0; then
if test -n "`echo $TARGET_ARCHITECTURE | grep ^ppc64`"; then
# Tune for this POWER processor, treating '+' models as base models
POWER=`LD_SHOW_AUXV=1 /bin/true | grep AT_PLATFORM | grep -E -o power[0-9]+`
COMMON_FLAGS="$COMMON_FLAGS -mcpu=$POWER -mtune=$POWER "
elif test -n "`echo $TARGET_ARCHITECTURE | grep ^s390x`"; then
COMMON_FLAGS="$COMMON_FLAGS -march=z10 "
- elif test -n "`echo $TARGET_ARCHITECTURE | grep ^arm`"; then
+ elif test -n "`echo $TARGET_ARCHITECTURE | grep -e^arm -e^aarch64`"; then
# TODO: Handle this with approprite options.
COMMON_FLAGS="$COMMON_FLAGS"
+ elif test -n "`echo $TARGET_ARCHITECTURE | grep ^aarch64`"; then
+ COMMON_FLAGS="$COMMON_FLAGS"
elif [ "$TARGET_OS" == "IOS" ]; then
COMMON_FLAGS="$COMMON_FLAGS"
- elif [ "$TARGET_OS" != "AIX" ] && [ "$TARGET_OS" != "SunOS" ]; then
+ elif [ "$TARGET_OS" == "AIX" ] || [ "$TARGET_OS" == "SunOS" ]; then
+ # TODO: Not sure why we don't use -march=native on these OSes
+ if test "$USE_SSE"; then
+ TRY_SSE_ETC="1"
+ fi
+ else
COMMON_FLAGS="$COMMON_FLAGS -march=native "
- elif test "$USE_SSE"; then
- COMMON_FLAGS="$COMMON_FLAGS -msse4.2 -mpclmul"
fi
-elif test "$USE_SSE"; then
- COMMON_FLAGS="$COMMON_FLAGS -msse4.2 -mpclmul"
+else
+ # PORTABLE=1
+ if test "$USE_SSE"; then
+ TRY_SSE_ETC="1"
+ fi
fi
-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
+if test "$TRY_SSE_ETC"; then
+ # The USE_SSE flag now means "attempt to compile with widely-available
+ # Intel architecture extensions utilized by specific optimizations in the
+ # source code." It's a qualifier on PORTABLE=1 that means "mostly portable."
+ # It doesn't even really check that your current CPU is compatible.
+ #
+ # SSE4.2 available since nehalem, ca. 2008-2010
+ TRY_SSE42="-msse4.2"
+ # PCLMUL available since westmere, ca. 2010-2011
+ TRY_PCLMUL="-mpclmul"
+ # AVX2 available since haswell, ca. 2013-2015
+ TRY_AVX2="-mavx2"
+fi
+
+$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_SSE42 -x c++ - -o /dev/null 2>/dev/null <<EOF
#include <cstdint>
#include <nmmintrin.h>
int main() {
volatile uint32_t x = _mm_crc32_u32(0, 0);
+ (void)x;
}
EOF
if [ "$?" = 0 ]; then
- COMMON_FLAGS="$COMMON_FLAGS -DHAVE_SSE42"
+ COMMON_FLAGS="$COMMON_FLAGS $TRY_SSE42 -DHAVE_SSE42"
elif test "$USE_SSE"; then
- echo "warning: USE_SSE specified but compiler could not use SSE intrinsics, disabling"
- exit 1
+ echo "warning: USE_SSE specified but compiler could not use SSE intrinsics, disabling" >&2
fi
-$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
+$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_PCLMUL -x c++ - -o /dev/null 2>/dev/null <<EOF
#include <cstdint>
#include <wmmintrin.h>
int main() {
const auto b = _mm_set_epi64x(0, 0);
const auto c = _mm_clmulepi64_si128(a, b, 0x00);
auto d = _mm_cvtsi128_si64(c);
+ (void)d;
}
EOF
if [ "$?" = 0 ]; then
- COMMON_FLAGS="$COMMON_FLAGS -DHAVE_PCLMUL"
+ COMMON_FLAGS="$COMMON_FLAGS $TRY_PCLMUL -DHAVE_PCLMUL"
elif test "$USE_SSE"; then
- echo "warning: USE_SSE specified but compiler could not use PCLMUL intrinsics, disabling"
- exit 1
+ echo "warning: USE_SSE specified but compiler could not use PCLMUL intrinsics, disabling" >&2
+fi
+
+$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_AVX2 -x c++ - -o /dev/null 2>/dev/null <<EOF
+ #include <cstdint>
+ #include <immintrin.h>
+ int main() {
+ const auto a = _mm256_setr_epi32(0, 1, 2, 3, 4, 7, 6, 5);
+ const auto b = _mm256_permutevar8x32_epi32(a, a);
+ (void)b;
+ }
+EOF
+if [ "$?" = 0 ]; then
+ COMMON_FLAGS="$COMMON_FLAGS $TRY_AVX2 -DHAVE_AVX2"
+elif test "$USE_SSE"; then
+ echo "warning: USE_SSE specified but compiler could not use AVX2 intrinsics, disabling" >&2
+fi
+
+$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
+ #include <cstdint>
+ int main() {
+ uint64_t a = 0xffffFFFFffffFFFF;
+ __uint128_t b = __uint128_t(a) * a;
+ a = static_cast<uint64_t>(b >> 64);
+ (void)a;
+ }
+EOF
+if [ "$?" = 0 ]; then
+ COMMON_FLAGS="$COMMON_FLAGS -DHAVE_UINT128_EXTENSION"
fi
# iOS doesn't support thread-local storage, but this check would erroneously
#endif
int main() {
static __thread int tls;
+ (void)tls;
}
EOF
if [ "$?" = 0 ]; then
fi
fi
+if [ "$FBCODE_BUILD" != "true" -a "$PLATFORM" = OS_LINUX ]; then
+ $CXX $COMMON_FLAGS $PLATFORM_SHARED_CFLAGS -x c++ -c - -o test_dl.o 2>/dev/null <<EOF
+ void dummy_func() {}
+EOF
+ if [ "$?" = 0 ]; then
+ $CXX $COMMON_FLAGS $PLATFORM_SHARED_LDFLAGS test_dl.o -o /dev/null 2>/dev/null
+ if [ "$?" = 0 ]; then
+ EXEC_LDFLAGS+="-ldl"
+ rm -f test_dl.o
+ fi
+ fi
+fi
+
PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS"
PLATFORM_CXXFLAGS="$PLATFORM_CXXFLAGS $COMMON_FLAGS"
echo "WITH_JEMALLOC_FLAG=$WITH_JEMALLOC_FLAG" >> "$OUTPUT"
fi
echo "LUA_PATH=$LUA_PATH" >> "$OUTPUT"
+if test -n "$USE_FOLLY_DISTRIBUTED_MUTEX"; then
+ echo "USE_FOLLY_DISTRIBUTED_MUTEX=$USE_FOLLY_DISTRIBUTED_MUTEX" >> "$OUTPUT"
+fi