Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit d265021

Browse files
committed
[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. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@374079 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 2a88a04 commit d265021

File tree

3 files changed

+64
-72
lines changed

3 files changed

+64
-72
lines changed

CMakeLists.txt

+61
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,66 @@ if (LIBCXX_STANDALONE_BUILD AND SANITIZER_FLAGS)
731731
add_flags(${SANITIZER_FLAGS})
732732
endif()
733733

734+
# Link system libraries =======================================================
735+
function(cxx_link_system_libraries target)
736+
target_add_link_flags_if_supported(${target} PRIVATE "-nodefaultlibs")
737+
target_add_compile_flags_if_supported(${target} PRIVATE "/Zl")
738+
target_add_link_flags_if_supported(${target} PRIVATE "/nodefaultlib")
739+
740+
if (LIBCXX_HAS_SYSTEM_LIB)
741+
target_link_libraries(${target} PRIVATE System)
742+
endif()
743+
744+
if (LIBCXX_HAS_PTHREAD_LIB)
745+
target_link_libraries(${target} PRIVATE pthread)
746+
endif()
747+
748+
if (LIBCXX_HAS_C_LIB)
749+
target_link_libraries(${target} PRIVATE c)
750+
endif()
751+
752+
if (LIBCXX_HAS_M_LIB)
753+
target_link_libraries(${target} PRIVATE m)
754+
endif()
755+
756+
if (LIBCXX_HAS_RT_LIB)
757+
target_link_libraries(${target} PRIVATE rt)
758+
endif()
759+
760+
if (LIBCXX_USE_COMPILER_RT)
761+
find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
762+
if (LIBCXX_BUILTINS_LIBRARY)
763+
target_link_libraries(${target} PRIVATE "${LIBCXX_BUILTINS_LIBRARY}")
764+
endif()
765+
elseif (LIBCXX_HAS_GCC_S_LIB)
766+
target_link_libraries(${target} PRIVATE gcc_s)
767+
endif()
768+
769+
if (LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
770+
target_link_libraries(${target} PRIVATE atomic)
771+
endif()
772+
773+
if (MINGW)
774+
target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
775+
endif()
776+
777+
if (LIBCXX_TARGETING_MSVC)
778+
if (LIBCXX_DEBUG_BUILD)
779+
set(LIB_SUFFIX "d")
780+
else()
781+
set(LIB_SUFFIX "")
782+
endif()
783+
784+
target_link_libraries(${target} PRIVATE ucrt${LIB_SUFFIX}) # Universal C runtime
785+
target_link_libraries(${target} PRIVATE vcruntime${LIB_SUFFIX}) # C++ runtime
786+
target_link_libraries(${target} PRIVATE msvcrt${LIB_SUFFIX}) # C runtime startup files
787+
target_link_libraries(${target} PRIVATE msvcprt${LIB_SUFFIX}) # C++ standard library. Required for exception_ptr internals.
788+
# Required for standards-complaint wide character formatting functions
789+
# (e.g. `printfw`/`scanfw`)
790+
target_link_libraries(${target} PRIVATE iso_stdio_wide_specifiers)
791+
endif()
792+
endfunction()
793+
734794
# Windows-related flags =======================================================
735795
function(cxx_add_windows_flags target)
736796
if(WIN32 AND NOT MINGW)
@@ -840,6 +900,7 @@ function(cxx_add_common_build_flags target)
840900
cxx_add_exception_flags(${target})
841901
cxx_add_rtti_flags(${target})
842902
cxx_add_module_flags(${target})
903+
cxx_link_system_libraries(${target})
843904
endfunction()
844905

845906
#===============================================================================

benchmarks/CMakeLists.txt

+1-9
Original file line numberDiff line numberDiff line change
@@ -146,21 +146,13 @@ function(add_benchmark_test name source_file)
146146
if (LLVM_USE_SANITIZER)
147147
target_link_libraries(${libcxx_target} PRIVATE -ldl)
148148
endif()
149-
if (LIBCXX_HAS_C_LIB)
150-
target_link_libraries(${libcxx_target} PRIVATE -lc)
151-
endif()
152-
if (LIBCXX_HAS_M_LIB)
153-
target_link_libraries(${libcxx_target} PRIVATE -lm)
154-
endif()
155-
if (LIBCXX_HAS_PTHREAD_LIB)
156-
target_link_libraries(${libcxx_target} PRIVATE -lpthread)
157-
endif()
158149
set_target_properties(${libcxx_target}
159150
PROPERTIES
160151
OUTPUT_NAME "${name}.libcxx.out"
161152
RUNTIME_OUTPUT_DIRECTORY "${BENCHMARK_OUTPUT_DIR}"
162153
COMPILE_FLAGS "${BENCHMARK_TEST_LIBCXX_COMPILE_FLAGS}"
163154
LINK_FLAGS "${BENCHMARK_TEST_LIBCXX_LINK_FLAGS}")
155+
cxx_link_system_libraries(${libcxx_target})
164156
if (LIBCXX_BENCHMARK_NATIVE_STDLIB)
165157
if (LIBCXX_BENCHMARK_NATIVE_STDLIB STREQUAL "libstdc++" AND NOT DEFINED LIBSTDCXX_FILESYSTEM_LIB
166158
AND "${name}" STREQUAL "filesystem")

src/CMakeLists.txt

+2-63
Original file line numberDiff line numberDiff line change
@@ -137,65 +137,6 @@ if (APPLE AND LLVM_USE_SANITIZER)
137137
endif()
138138
endif()
139139

140-
function(cxx_link_system_libraries target)
141-
target_add_link_flags_if_supported(${target} PRIVATE "-nodefaultlibs")
142-
target_add_compile_flags_if_supported(${target} PRIVATE "/Zl")
143-
target_add_link_flags_if_supported(${target} PRIVATE "/nodefaultlib")
144-
145-
if (LIBCXX_HAS_SYSTEM_LIB)
146-
target_link_libraries(${target} PRIVATE System)
147-
endif()
148-
149-
if (LIBCXX_HAS_PTHREAD_LIB)
150-
target_link_libraries(${target} PRIVATE pthread)
151-
endif()
152-
153-
if (LIBCXX_HAS_C_LIB)
154-
target_link_libraries(${target} PRIVATE c)
155-
endif()
156-
157-
if (LIBCXX_HAS_M_LIB)
158-
target_link_libraries(${target} PRIVATE m)
159-
endif()
160-
161-
if (LIBCXX_HAS_RT_LIB)
162-
target_link_libraries(${target} PRIVATE rt)
163-
endif()
164-
165-
if (LIBCXX_USE_COMPILER_RT)
166-
find_compiler_rt_library(builtins LIBCXX_BUILTINS_LIBRARY)
167-
if (LIBCXX_BUILTINS_LIBRARY)
168-
target_link_libraries(${target} PRIVATE "${LIBCXX_BUILTINS_LIBRARY}")
169-
endif()
170-
elseif (LIBCXX_HAS_GCC_S_LIB)
171-
target_link_libraries(${target} PRIVATE gcc_s)
172-
endif()
173-
174-
if (LIBCXX_HAVE_CXX_ATOMICS_WITH_LIB)
175-
target_link_libraries(${target} PRIVATE atomic)
176-
endif()
177-
178-
if (MINGW)
179-
target_link_libraries(${target} PRIVATE "${MINGW_LIBRARIES}")
180-
endif()
181-
182-
if (LIBCXX_TARGETING_MSVC)
183-
if (LIBCXX_DEBUG_BUILD)
184-
set(LIB_SUFFIX "d")
185-
else()
186-
set(LIB_SUFFIX "")
187-
endif()
188-
189-
target_link_libraries(${target} PRIVATE ucrt${LIB_SUFFIX}) # Universal C runtime
190-
target_link_libraries(${target} PRIVATE vcruntime${LIB_SUFFIX}) # C++ runtime
191-
target_link_libraries(${target} PRIVATE msvcrt${LIB_SUFFIX}) # C runtime startup files
192-
target_link_libraries(${target} PRIVATE msvcprt${LIB_SUFFIX}) # C++ standard library. Required for exception_ptr internals.
193-
# Required for standards-complaint wide character formatting functions
194-
# (e.g. `printfw`/`scanfw`)
195-
target_link_libraries(${target} PRIVATE iso_stdio_wide_specifiers)
196-
endif()
197-
endfunction()
198-
199140
if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS AND NOT TARGET pstl::ParallelSTL)
200141
message(FATAL_ERROR "Could not find ParallelSTL")
201142
endif()
@@ -219,7 +160,6 @@ if (LIBCXX_ENABLE_SHARED)
219160
if(COMMAND llvm_setup_rpath)
220161
llvm_setup_rpath(cxx_shared)
221162
endif()
222-
cxx_link_system_libraries(cxx_shared)
223163
target_link_libraries(cxx_shared PRIVATE ${LIBCXX_LIBRARIES})
224164
set_target_properties(cxx_shared
225165
PROPERTIES
@@ -322,7 +262,6 @@ endif()
322262
# Build the static library.
323263
if (LIBCXX_ENABLE_STATIC)
324264
add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS})
325-
cxx_link_system_libraries(cxx_static)
326265
target_link_libraries(cxx_static PRIVATE ${LIBCXX_LIBRARIES})
327266
set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
328267
set_target_properties(cxx_static
@@ -385,9 +324,9 @@ if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY)
385324
)
386325
add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES})
387326
if (LIBCXX_ENABLE_SHARED)
388-
target_link_libraries(cxx_experimental cxx_shared)
327+
target_link_libraries(cxx_experimental PRIVATE cxx_shared)
389328
else()
390-
target_link_libraries(cxx_experimental cxx_static)
329+
target_link_libraries(cxx_experimental PRIVATE cxx_static)
391330
endif()
392331

393332
set_target_properties(cxx_experimental

0 commit comments

Comments
 (0)