From e9b7b68427438a084825cc751c32f182075d3473 Mon Sep 17 00:00:00 2001 From: Daniel Patterson Date: Mon, 2 Oct 2017 14:06:49 -0700 Subject: [PATCH] Move workaround into single TU. --- .travis.yml | 15 ++++++++++----- CMakeLists.txt | 7 +++++-- .../util/glibc_workaround.cpp | 12 +++++------- 3 files changed, 20 insertions(+), 14 deletions(-) rename include/util/glibc_workaround.hpp => src/util/glibc_workaround.cpp (81%) diff --git a/.travis.yml b/.travis.yml index 272a4f87b..89c13fd11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -195,7 +195,8 @@ matrix: -DENABLE_MASON=${ENABLE_MASON:-OFF} \ -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ -DENABLE_CCACHE=ON \ - -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON - make --jobs=${JOBS} - popd script: @@ -218,7 +219,8 @@ matrix: -DENABLE_MASON=${ENABLE_MASON:-OFF} \ -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ -DENABLE_CCACHE=ON \ - -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON - make --jobs=${JOBS} - popd script: @@ -241,7 +243,8 @@ matrix: -DENABLE_MASON=${ENABLE_MASON:-OFF} \ -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ -DENABLE_CCACHE=ON \ - -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON - make --jobs=${JOBS} - popd script: @@ -264,7 +267,8 @@ matrix: -DENABLE_MASON=${ENABLE_MASON:-OFF} \ -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ -DENABLE_CCACHE=ON \ - -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON - make --jobs=${JOBS} - popd script: @@ -338,7 +342,8 @@ install: -DENABLE_STXXL=${ENABLE_STXXL:-OFF} \ -DBUILD_TOOLS=ON \ -DENABLE_CCACHE=ON \ - -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=${ENABLE_GLIBC_WORKAROUND:-OFF} - echo "travis_fold:start:MAKE" - make --jobs=${JOBS} - make tests --jobs=${JOBS} diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f50c3cf2..809b4095f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ option(ENABLE_LTO "Use LTO if available" OFF) option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON) option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF) +option(ENABLE_GLIBC_WORKAROUND "Workaround GLIBC symbol exports" OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -402,8 +403,6 @@ endif() if(UNIX AND NOT APPLE) set(MAYBE_RT_LIBRARY -lrt) - # TODO: print some warnings, or make this test a bit more detailed - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${CMAKE_CURRENT_SOURCE_DIR}/include/util/glibc_workaround.hpp") endif() # Disallow deprecated protozero APIs @@ -812,6 +811,10 @@ add_custom_target(uninstall add_subdirectory(unit_tests) add_subdirectory(src/benchmarks) +if (ENABLE_GLIBC_WORKAROUND) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLIBC_WORKAROUND") +endif() + if (ENABLE_NODE_BINDINGS) add_subdirectory(src/nodejs) endif() diff --git a/include/util/glibc_workaround.hpp b/src/util/glibc_workaround.cpp similarity index 81% rename from include/util/glibc_workaround.hpp rename to src/util/glibc_workaround.cpp index a97948879..19811bee1 100644 --- a/include/util/glibc_workaround.hpp +++ b/src/util/glibc_workaround.cpp @@ -1,6 +1,4 @@ -#ifndef GLIBC_WORKAROUND_H -#define GLIBC_WORKAROUND_H - +#ifdef GLIBC_WORKAROUND #include // https://github.com/bitcoin/bitcoin/pull/4042 @@ -11,13 +9,13 @@ // Note: only necessary on Linux #ifdef __linux__ -#define WORKAROUND +#define _ENABLE_GLIBC_WORKAROUND #warning building with workaround #else #warning not building with workaround #endif -#ifdef WORKAROUND +#ifdef _ENABLE_GLIBC_WORKAROUND namespace std { @@ -28,6 +26,6 @@ void __throw_out_of_range_fmt(const char *err, ...) __throw_out_of_range(err); } } -#endif // WORKAROUND +#endif // _ENABLE_GLIBC_WORKAROUND -#endif // GLIBC_WORKAROUND_H \ No newline at end of file +#endif // GLIBC_WORKAROUND \ No newline at end of file