[libcxx-commits] [libcxx] r374079 - [libc++] Make sure we link all system libraries into the benchmarks
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Oct 8 09:26:24 PDT 2019
Author: ldionne
Date: Tue Oct 8 09:26:24 2019
New Revision: 374079
URL: http://llvm.org/viewvc/llvm-project?rev=374079&view=rev
Log:
[libc++] Make sure we link all system libraries into the benchmarks
It turns out that r374056 broke _some_ build bots again, specifically
the ones using sanitizers. Instead of trying to link the right system
libraries to the benchmarks bit-by-bit, let's just link exactly the
system libraries that libc++ itself needs.
Modified:
libcxx/trunk/CMakeLists.txt
libcxx/trunk/benchmarks/CMakeLists.txt
libcxx/trunk/src/CMakeLists.txt
Modified: libcxx/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists.txt?rev=374079&r1=374078&r2=374079&view=diff
==============================================================================
--- libcxx/trunk/CMakeLists.txt (original)
+++ libcxx/trunk/CMakeLists.txt Tue Oct 8 09:26:24 2019
@@ -731,6 +731,66 @@ if (LIBCXX_STANDALONE_BUILD AND SANITIZE
add_flags(${SANITIZER_FLAGS})
endif()
+# Link system libraries =======================================================
+function(cxx_link_system_libraries target)
+ target_add_link_flags_if_supported(${target} PRIVATE "-nodefaultlibs")
+ target_add_compile_flags_if_supported(${target} PRIVATE "/Zl")
+ target_add_link_flags_if_supported(${target} PRIVATE "/nodefaultlib")
+
+ if (LIBCXX_HAS_SYSTEM_LIB)
+ target_link_libraries(${target} PRIVATE System)
+ endif()
+
+ if (LIBCXX_HAS_PTHREAD_LIB)
+ target_link_libraries(${target} PRIVATE pthread)
+ endif()
+
+ if (LIBCXX_HAS_C_LIB)
+ target_link_libraries(${target} PRIVATE c)
+ endif()
+
+ if (LIBCXX_HAS_M_LIB)
+ target_link_libraries(${target} PRIVATE m)
+ endif()
+
+ if (LIBCXX_HAS_RT_LIB)
+ target_link_libraries(${target} PRIVATE rt)
+ endif()
+
+ if (LIBCXX_USE_COMPILER_RT)
+ find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
+ if (LIBCXX_BUILTINS_LIBRARY)
+ target_link_libraries(${target} PRIVATE "${LIBCXX_BUILTINS_LIBRARY}")
+ endif()
+ elseif (LIBCXX_HAS_GCC_S_LIB)
+ target_link_libraries(${target} PRIVATE gcc_s)
+ endif()
+
+ if (LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
+ target_link_libraries(${target} PRIVATE atomic)
+ endif()
+
+ if (MINGW)
+ target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
+ endif()
+
+ if (LIBCXX_TARGETING_MSVC)
+ if (LIBCXX_DEBUG_BUILD)
+ set(LIB_SUFFIX "d")
+ else()
+ set(LIB_SUFFIX "")
+ endif()
+
+ target_link_libraries(${target} PRIVATE ucrt${LIB_SUFFIX}) # Universal C runtime
+ target_link_libraries(${target} PRIVATE vcruntime${LIB_SUFFIX}) # C++ runtime
+ target_link_libraries(${target} PRIVATE msvcrt${LIB_SUFFIX}) # C runtime startup files
+ target_link_libraries(${target} PRIVATE msvcprt${LIB_SUFFIX}) # C++ standard library. Required for exception_ptr internals.
+ # Required for standards-complaint wide character formatting functions
+ # (e.g. `printfw`/`scanfw`)
+ target_link_libraries(${target} PRIVATE iso_stdio_wide_specifiers)
+ endif()
+endfunction()
+
# Windows-related flags =======================================================
function(cxx_add_windows_flags target)
if(WIN32 AND NOT MINGW)
@@ -840,6 +900,7 @@ function(cxx_add_common_build_flags targ
cxx_add_exception_flags(${target})
cxx_add_rtti_flags(${target})
cxx_add_module_flags(${target})
+ cxx_link_system_libraries(${target})
endfunction()
#===============================================================================
Modified: libcxx/trunk/benchmarks/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/benchmarks/CMakeLists.txt?rev=374079&r1=374078&r2=374079&view=diff
==============================================================================
--- libcxx/trunk/benchmarks/CMakeLists.txt (original)
+++ libcxx/trunk/benchmarks/CMakeLists.txt Tue Oct 8 09:26:24 2019
@@ -146,21 +146,13 @@ function(add_benchmark_test name source_
if (LLVM_USE_SANITIZER)
target_link_libraries(${libcxx_target} PRIVATE -ldl)
endif()
- if (LIBCXX_HAS_C_LIB)
- target_link_libraries(${libcxx_target} PRIVATE -lc)
- endif()
- if (LIBCXX_HAS_M_LIB)
- target_link_libraries(${libcxx_target} PRIVATE -lm)
- endif()
- if (LIBCXX_HAS_PTHREAD_LIB)
- target_link_libraries(${libcxx_target} PRIVATE -lpthread)
- endif()
set_target_properties(${libcxx_target}
PROPERTIES
OUTPUT_NAME "${name}.libcxx.out"
RUNTIME_OUTPUT_DIRECTORY "${BENCHMARK_OUTPUT_DIR}"
COMPILE_FLAGS "${BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS}"
LINK_FLAGS "${BENCHMARK_TEST_LIBCXX_LINK_FLAGS}")
+ cxx_link_system_libraries(${libcxx_target})
if (LIBCXX_BENCHMARK_NATIVE_STDLIB)
if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++" AND NOT DEFINED LIBSTDCXX_FILESYSTEM_LIB
AND "${name}" STREQUAL "filesystem")
Modified: libcxx/trunk/src/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/CMakeLists.txt?rev=374079&r1=374078&r2=374079&view=diff
==============================================================================
--- libcxx/trunk/src/CMakeLists.txt (original)
+++ libcxx/trunk/src/CMakeLists.txt Tue Oct 8 09:26:24 2019
@@ -137,65 +137,6 @@ if (APPLE AND LLVM_USE_SANITIZER)
endif()
endif()
-function(cxx_link_system_libraries target)
- target_add_link_flags_if_supported(${target} PRIVATE "-nodefaultlibs")
- target_add_compile_flags_if_supported(${target} PRIVATE "/Zl")
- target_add_link_flags_if_supported(${target} PRIVATE "/nodefaultlib")
-
- if (LIBCXX_HAS_SYSTEM_LIB)
- target_link_libraries(${target} PRIVATE System)
- endif()
-
- if (LIBCXX_HAS_PTHREAD_LIB)
- target_link_libraries(${target} PRIVATE pthread)
- endif()
-
- if (LIBCXX_HAS_C_LIB)
- target_link_libraries(${target} PRIVATE c)
- endif()
-
- if (LIBCXX_HAS_M_LIB)
- target_link_libraries(${target} PRIVATE m)
- endif()
-
- if (LIBCXX_HAS_RT_LIB)
- target_link_libraries(${target} PRIVATE rt)
- endif()
-
- if (LIBCXX_USE_COMPILER_RT)
- find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
- if (LIBCXX_BUILTINS_LIBRARY)
- target_link_libraries(${target} PRIVATE "${LIBCXX_BUILTINS_LIBRARY}")
- endif()
- elseif (LIBCXX_HAS_GCC_S_LIB)
- target_link_libraries(${target} PRIVATE gcc_s)
- endif()
-
- if (LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
- target_link_libraries(${target} PRIVATE atomic)
- endif()
-
- if (MINGW)
- target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
- endif()
-
- if (LIBCXX_TARGETING_MSVC)
- if (LIBCXX_DEBUG_BUILD)
- set(LIB_SUFFIX "d")
- else()
- set(LIB_SUFFIX "")
- endif()
-
- target_link_libraries(${target} PRIVATE ucrt${LIB_SUFFIX}) # Universal C runtime
- target_link_libraries(${target} PRIVATE vcruntime${LIB_SUFFIX}) # C++ runtime
- target_link_libraries(${target} PRIVATE msvcrt${LIB_SUFFIX}) # C runtime startup files
- target_link_libraries(${target} PRIVATE msvcprt${LIB_SUFFIX}) # C++ standard library. Required for exception_ptr internals.
- # Required for standards-complaint wide character formatting functions
- # (e.g. `printfw`/`scanfw`)
- target_link_libraries(${target} PRIVATE iso_stdio_wide_specifiers)
- endif()
-endfunction()
-
if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS AND NOT TARGET pstl::ParallelSTL)
message(FATAL_ERROR "Could not find ParallelSTL")
endif()
@@ -219,7 +160,6 @@ if (LIBCXX_ENABLE_SHARED)
if(COMMAND llvm_setup_rpath)
llvm_setup_rpath(cxx_shared)
endif()
- cxx_link_system_libraries(cxx_shared)
target_link_libraries(cxx_shared PRIVATE ${LIBCXX_LIBRARIES})
set_target_properties(cxx_shared
PROPERTIES
@@ -322,7 +262,6 @@ endif()
# Build the static library.
if (LIBCXX_ENABLE_STATIC)
add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
- cxx_link_system_libraries(cxx_static)
target_link_libraries(cxx_static PRIVATE ${LIBCXX_LIBRARIES})
set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
set_target_properties(cxx_static
@@ -385,9 +324,9 @@ if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
)
add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
if (LIBCXX_ENABLE_SHARED)
- target_link_libraries(cxx_experimental cxx_shared)
+ target_link_libraries(cxx_experimental PRIVATE cxx_shared)
else()
- target_link_libraries(cxx_experimental cxx_static)
+ target_link_libraries(cxx_experimental PRIVATE cxx_static)
endif()
set_target_properties(cxx_experimental
More information about the libcxx-commits
mailing list