123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- From 23739c6f9694d7fc436967439f170173dbb4c6b4 Mon Sep 17 00:00:00 2001
- From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- Date: Mon, 24 Feb 2020 10:22:13 +0100
- Subject: [PATCH] build_tools/build_detect_platform: fix C++ tests
- Replace -o /dev/null by -o test.o when testing for C++ features such as
- -faligned-new otherwise tests will fail with some bugged binutils
- (https://sourceware.org/bugzilla/show_bug.cgi?id=19526):
- output/host/bin/xtensa-buildroot-linux-uclibc-g++ -faligned-new -x c++ - -o /dev/null <<EOF
- struct alignas(1024) t {int a;};
- int main() {}
- EOF
- /home/fabrice/buildroot/output/host/lib/gcc/xtensa-buildroot-linux-uclibc/8.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: final link failed: file truncated
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- [Upstream status: https://github.com/facebook/rocksdb/pull/6479]
- ---
- build_tools/build_detect_platform | 66 +++++++++++++++----------------
- 1 file changed, 33 insertions(+), 33 deletions(-)
- diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform
- index 2535d8124..64a0ae76c 100755
- --- a/build_tools/build_detect_platform
- +++ b/build_tools/build_detect_platform
- @@ -172,7 +172,7 @@ case "$TARGET_OS" in
- PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread -lrt -ldl"
- if test $ROCKSDB_USE_IO_URING; then
- # check for liburing
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -luring -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -luring -o test.o 2>/dev/null <<EOF
- #include <liburing.h>
- int main() {
- struct io_uring ring;
- @@ -245,7 +245,7 @@ if [ "$CROSS_COMPILE" = "true" -o "$FBCODE_BUILD" = "true" ]; then
- else
- if ! test $ROCKSDB_DISABLE_FALLOCATE; then
- # Test whether fallocate is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <fcntl.h>
- #include <linux/falloc.h>
- int main() {
- @@ -261,7 +261,7 @@ EOF
- if ! test $ROCKSDB_DISABLE_SNAPPY; then
- # Test whether Snappy library is installed
- # http://code.google.com/p/snappy/
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <snappy.h>
- int main() {}
- EOF
- @@ -276,7 +276,7 @@ EOF
- # Test whether gflags library is installed
- # http://gflags.github.io/gflags/
- # check if the namespace is gflags
- - if $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF
- + if $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null << EOF
- #include <gflags/gflags.h>
- using namespace GFLAGS_NAMESPACE;
- int main() {}
- @@ -323,7 +323,7 @@ EOF
- COMMON_FLAGS="$COMMON_FLAGS -DGFLAGS=1"
- PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lgflags"
- # check if namespace is gflags
- - elif $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF
- + elif $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null << EOF
- #include <gflags/gflags.h>
- using namespace gflags;
- int main() {}
- @@ -285,7 +285,7 @@ EOF
- COMMON_FLAGS="$COMMON_FLAGS -DGFLAGS=1 -DGFLAGS_NAMESPACE=gflags"
- PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lgflags"
- # check if namespace is google
- - elif $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null << EOF
- + elif $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null << EOF
- #include <gflags/gflags.h>
- using namespace google;
- int main() {}
- @@ -299,7 +299,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_ZLIB; then
- # Test whether zlib library is installed
- - $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <zlib.h>
- int main() {}
- EOF
- @@ -312,7 +312,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_BZIP; then
- # Test whether bzip library is installed
- - $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <bzlib.h>
- int main() {}
- EOF
- @@ -325,7 +325,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_LZ4; then
- # Test whether lz4 library is installed
- - $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <lz4.h>
- #include <lz4hc.h>
- int main() {}
- @@ -339,7 +339,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_ZSTD; then
- # Test whether zstd library is installed
- - $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <zstd.h>
- int main() {}
- EOF
- @@ -352,7 +352,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_NUMA; then
- # Test whether numa is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null -lnuma 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o -lnuma 2>/dev/null <<EOF
- #include <numa.h>
- #include <numaif.h>
- int main() {}
- @@ -366,7 +366,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_TBB; then
- # Test whether tbb is available
- - $CXX $PLATFORM_CXXFLAGS $LDFLAGS -x c++ - -o /dev/null -ltbb 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $LDFLAGS -x c++ - -o test.o -ltbb 2>/dev/null <<EOF
- #include <tbb/tbb.h>
- int main() {}
- EOF
- @@ -379,7 +379,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_JEMALLOC; then
- # Test whether jemalloc is available
- - if echo 'int main() {}' | $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null -ljemalloc \
- + if echo 'int main() {}' | $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o -ljemalloc \
- 2>/dev/null; then
- # This will enable some preprocessor identifiers in the Makefile
- JEMALLOC=1
- @@ -400,7 +400,7 @@ EOF
- fi
- if ! test $JEMALLOC && ! test $ROCKSDB_DISABLE_TCMALLOC; then
- # jemalloc is not available. Let's try tcmalloc
- - if echo 'int main() {}' | $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null \
- + if echo 'int main() {}' | $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o \
- -ltcmalloc 2>/dev/null; then
- PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -ltcmalloc"
- JAVA_LDFLAGS="$JAVA_LDFLAGS -ltcmalloc"
- @@ -409,7 +409,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_MALLOC_USABLE_SIZE; then
- # Test whether malloc_usable_size is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <malloc.h>
- int main() {
- size_t res = malloc_usable_size(0);
- @@ -424,7 +424,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_MEMKIND; then
- # Test whether memkind library is installed
- - $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -lmemkind -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -lmemkind -x c++ - -o test.o 2>/dev/null <<EOF
- #include <memkind.h>
- int main() {
- memkind_malloc(MEMKIND_DAX_KMEM, 1024);
- @@ -486,7 +486,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_PTHREAD_MUTEX_ADAPTIVE_NP; then
- # Test whether PTHREAD_MUTEX_ADAPTIVE_NP mutex type is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <pthread.h>
- int main() {
- int x = PTHREAD_MUTEX_ADAPTIVE_NP;
- @@ -439,7 +439,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_BACKTRACE; then
- # Test whether backtrace is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <execinfo.h>
- int main() {
- void* frames[1];
- @@ -451,7 +451,7 @@ EOF
- COMMON_FLAGS="$COMMON_FLAGS -DROCKSDB_BACKTRACE"
- else
- # Test whether execinfo library is installed
- - $CXX $PLATFORM_CXXFLAGS -lexecinfo -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -lexecinfo -x c++ - -o test.o 2>/dev/null <<EOF
- #include <execinfo.h>
- int main() {
- void* frames[1];
- @@ -468,7 +468,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_PG; then
- # Test if -pg is supported
- - $CXX $PLATFORM_CXXFLAGS -pg -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -pg -x c++ - -o test.o 2>/dev/null <<EOF
- int main() {
- return 0;
- }
- @@ -480,7 +480,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_SYNC_FILE_RANGE; then
- # Test whether sync_file_range is supported for compatibility with an old glibc
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <fcntl.h>
- int main() {
- int fd = open("/dev/null", 0);
- @@ -494,7 +494,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_SCHED_GETCPU; then
- # Test whether sched_getcpu is supported
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <sched.h>
- int main() {
- int cpuid = sched_getcpu();
- @@ -508,7 +508,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_AUXV_GETAUXVAL; then
- # Test whether getauxval is supported
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <sys/auxv.h>
- int main() {
- uint64_t auxv = getauxval(AT_HWCAP);
- @@ -522,7 +522,7 @@ EOF
-
- if ! test $ROCKSDB_DISABLE_ALIGNED_NEW; then
- # Test whether c++17 aligned-new is supported
- - $CXX $PLATFORM_CXXFLAGS -faligned-new -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -faligned-new -x c++ - -o test.o 2>/dev/null <<EOF
- struct alignas(1024) t {int a;};
- int main() {}
- EOF
- @@ -536,7 +536,7 @@ fi
- # -Wshorten-64-to-32 breaks compilation on FreeBSD i386
- if ! [ "$TARGET_OS" = FreeBSD -a "$TARGET_ARCHITECTURE" = i386 ]; then
- # Test whether -Wshorten-64-to-32 is available
- - $CXX $PLATFORM_CXXFLAGS -x c++ - -o /dev/null -Wshorten-64-to-32 2>/dev/null <<EOF
- + $CXX $PLATFORM_CXXFLAGS -x c++ - -o test.o -Wshorten-64-to-32 2>/dev/null <<EOF
- int main() {}
- EOF
- if [ "$?" = 0 ]; then
- @@ -603,7 +603,7 @@ if test "$TRY_SSE_ETC"; then
- TRY_LZCNT="-mlzcnt"
- fi
-
- -$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_SSE42 -x c++ - -o /dev/null 2>/dev/null <<EOF
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_SSE42 -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- #include <nmmintrin.h>
- int main() {
- @@ -617,7 +617,7 @@ elif test "$USE_SSE"; then
- echo "warning: USE_SSE specified but compiler could not use SSE intrinsics, disabling" >&2
- fi
-
- -$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_PCLMUL -x c++ - -o /dev/null 2>/dev/null <<EOF
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_PCLMUL -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- #include <wmmintrin.h>
- int main() {
- @@ -634,7 +634,7 @@ elif test "$USE_SSE"; then
- 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
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_AVX2 -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- #include <immintrin.h>
- int main() {
- @@ -649,7 +649,7 @@ 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 $TRY_BMI -x c++ - -o /dev/null 2>/dev/null <<EOF
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_BMI -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- #include <immintrin.h>
- int main(int argc, char *argv[]) {
- @@ -739,7 +739,7 @@ elif test "$USE_SSE"; then
- echo "warning: USE_SSE specified but compiler could not use BMI intrinsics, disabling" >&2
- fi
-
- -$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_LZCNT -x c++ - -o /dev/null 2>/dev/null <<EOF
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS $TRY_LZCNT -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- #include <immintrin.h>
- int main(int argc, char *argv[]) {
- @@ -753,7 +753,7 @@ elif test "$USE_SSE"; then
- echo "warning: USE_SSE specified but compiler could not use LZCNT intrinsics, disabling" >&2
- fi
-
- -$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- +$CXX $PLATFORM_CXXFLAGS $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #include <cstdint>
- int main() {
- uint64_t a = 0xffffFFFFffffFFFF;
- @@ -666,7 +666,7 @@ fi
- # succeed because the cross-compiler flags are added by the Makefile, not this
- # script.
- if [ "$PLATFORM" != IOS ]; then
- - $CXX $COMMON_FLAGS -x c++ - -o /dev/null 2>/dev/null <<EOF
- + $CXX $COMMON_FLAGS -x c++ - -o test.o 2>/dev/null <<EOF
- #if defined(_MSC_VER) && !defined(__thread)
- #define __thread __declspec(thread)
- #endif
- @@ -685,7 +685,7 @@ if [ "$FBCODE_BUILD" != "true" -a "$PLATFORM" = OS_LINUX ]; then
- void dummy_func() {}
- EOF
- if [ "$?" = 0 ]; then
- - $CXX $COMMON_FLAGS $PLATFORM_SHARED_LDFLAGS test_dl.o -o /dev/null 2>/dev/null
- + $CXX $COMMON_FLAGS $PLATFORM_SHARED_LDFLAGS test_dl.o -o test.o 2>/dev/null
- if [ "$?" = 0 ]; then
- EXEC_LDFLAGS+="-ldl"
- rm -f test_dl.o
- --
- 2.25.0
|