tstellar / rpms / llvm

Forked from rpms/llvm 5 years ago
Clone
1bbe5ad
From a61fc423f3c043314efd4c0cdb1367de2077ac36 Mon Sep 17 00:00:00 2001
1bbe5ad
From: Eric Fiselier <eric@efcs.ca>
1bbe5ad
Date: Fri, 10 Feb 2017 01:59:20 +0000
1bbe5ad
Subject: [PATCH] [CMake] Fix pthread handling for out-of-tree builds
1bbe5ad
1bbe5ad
LLVM defines `PTHREAD_LIB` which is used by AddLLVM.cmake and various projects
1bbe5ad
to correctly link the threading library when needed. Unfortunately
1bbe5ad
`PTHREAD_LIB` is defined by LLVM's `config-ix.cmake` file which isn't installed
1bbe5ad
and therefore can't be used when configuring out-of-tree builds. This causes
1bbe5ad
such builds to fail since `pthread` isn't being correctly linked.
1bbe5ad
1bbe5ad
This patch attempts to fix that problem by renaming and exporting
1bbe5ad
`LLVM_PTHREAD_LIB` as part of`LLVMConfig.cmake`. I renamed `PTHREAD_LIB`
1bbe5ad
because It seemed likely to cause collisions with downstream users of
1bbe5ad
`LLVMConfig.cmake`.
1bbe5ad
1bbe5ad
1bbe5ad
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294690 91177308-0d34-0410-b5e6-96231b3b80d8
1bbe5ad
---
1bbe5ad
 cmake/config-ix.cmake                             | 2 +-
1bbe5ad
 cmake/modules/AddLLVM.cmake                       | 6 +++---
1bbe5ad
 cmake/modules/LLVMConfig.cmake.in                 | 4 ++++
1bbe5ad
 examples/ParallelJIT/CMakeLists.txt               | 2 +-
1bbe5ad
 lib/CodeGen/CMakeLists.txt                        | 2 +-
1bbe5ad
 lib/ExecutionEngine/IntelJITEvents/CMakeLists.txt | 2 +-
1bbe5ad
 lib/Fuzzer/CMakeLists.txt                         | 4 ++--
1bbe5ad
 lib/Support/CMakeLists.txt                        | 2 +-
1bbe5ad
 unittests/ExecutionEngine/Orc/CMakeLists.txt      | 2 +-
1bbe5ad
 unittests/Support/CMakeLists.txt                  | 2 +-
1bbe5ad
 utils/unittest/CMakeLists.txt                     | 4 ++--
1bbe5ad
 11 files changed, 18 insertions(+), 14 deletions(-)
1bbe5ad
1bbe5ad
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
1bbe5ad
index 50bcc50..6bd2b53 100755
1bbe5ad
--- a/cmake/config-ix.cmake
1bbe5ad
+++ b/cmake/config-ix.cmake
1bbe5ad
@@ -115,7 +115,7 @@ if(HAVE_LIBPTHREAD)
1bbe5ad
   set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
1bbe5ad
   set(THREADS_HAVE_PTHREAD_ARG Off)
1bbe5ad
   find_package(Threads REQUIRED)
1bbe5ad
-  set(PTHREAD_LIB ${CMAKE_THREAD_LIBS_INIT})
1bbe5ad
+  set(LLVM_PTHREAD_LIB ${CMAKE_THREAD_LIBS_INIT})
1bbe5ad
 endif()
1bbe5ad
 
1bbe5ad
 # Don't look for these libraries on Windows. Also don't look for them if we're
1bbe5ad
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
1bbe5ad
index b3c7746..cb4171c 100644
1bbe5ad
--- a/cmake/modules/AddLLVM.cmake
1bbe5ad
+++ b/cmake/modules/AddLLVM.cmake
1bbe5ad
@@ -718,11 +718,11 @@ macro(add_llvm_executable name)
1bbe5ad
   if(NOT ARG_IGNORE_EXTERNALIZE_DEBUGINFO)
1bbe5ad
     llvm_externalize_debuginfo(${name})
1bbe5ad
   endif()
1bbe5ad
-  if (PTHREAD_LIB)
1bbe5ad
+  if (LLVM_PTHREAD_LIB)
1bbe5ad
     # libpthreads overrides some standard library symbols, so main
1bbe5ad
     # executable must be linked with it in order to provide consistent
1bbe5ad
     # API for all shared libaries loaded by this executable.
1bbe5ad
-    target_link_libraries(${name} ${PTHREAD_LIB})
1bbe5ad
+    target_link_libraries(${name} ${LLVM_PTHREAD_LIB})
1bbe5ad
   endif()
1bbe5ad
 endmacro(add_llvm_executable name)
1bbe5ad
 
1bbe5ad
@@ -1027,7 +1027,7 @@ function(add_unittest test_suite test_name)
1bbe5ad
   # libpthreads overrides some standard library symbols, so main
1bbe5ad
   # executable must be linked with it in order to provide consistent
1bbe5ad
   # API for all shared libaries loaded by this executable.
1bbe5ad
-  target_link_libraries(${test_name} gtest_main gtest ${PTHREAD_LIB})
1bbe5ad
+  target_link_libraries(${test_name} gtest_main gtest ${LLVM_PTHREAD_LIB})
1bbe5ad
 
1bbe5ad
   add_dependencies(${test_suite} ${test_name})
1bbe5ad
   get_target_property(test_suite_folder ${test_suite} FOLDER)
1bbe5ad
diff --git a/cmake/modules/LLVMConfig.cmake.in b/cmake/modules/LLVMConfig.cmake.in
1bbe5ad
index 2aea2dc..7a8eb36 100644
1bbe5ad
--- a/cmake/modules/LLVMConfig.cmake.in
1bbe5ad
+++ b/cmake/modules/LLVMConfig.cmake.in
1bbe5ad
@@ -45,6 +45,10 @@ set(LLVM_ENABLE_PIC @LLVM_ENABLE_PIC@)
1bbe5ad
 
1bbe5ad
 set(LLVM_BUILD_32_BITS @LLVM_BUILD_32_BITS@)
1bbe5ad
 
1bbe5ad
+if (NOT "@LLVM_PTHREAD_LIB@" STREQUAL "")
1bbe5ad
+  set(LLVM_PTHREAD_LIB "@LLVM_PTHREAD_LIB@")
1bbe5ad
+endif()
1bbe5ad
+
1bbe5ad
 set(LLVM_ENABLE_PLUGINS @LLVM_ENABLE_PLUGINS@)
1bbe5ad
 set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS @LLVM_EXPORT_SYMBOLS_FOR_PLUGINS@)
1bbe5ad
 set(LLVM_PLUGIN_EXT @LLVM_PLUGIN_EXT@)
1bbe5ad
diff --git a/examples/ParallelJIT/CMakeLists.txt b/examples/ParallelJIT/CMakeLists.txt
1bbe5ad
index e85b470..deeee07 100644
1bbe5ad
--- a/examples/ParallelJIT/CMakeLists.txt
1bbe5ad
+++ b/examples/ParallelJIT/CMakeLists.txt
1bbe5ad
@@ -11,4 +11,4 @@ add_llvm_example(ParallelJIT
1bbe5ad
   ParallelJIT.cpp
1bbe5ad
   )
1bbe5ad
 
1bbe5ad
-target_link_libraries(ParallelJIT ${PTHREAD_LIB})
1bbe5ad
+target_link_libraries(ParallelJIT ${LLVM_PTHREAD_LIB})
1bbe5ad
diff --git a/lib/CodeGen/CMakeLists.txt b/lib/CodeGen/CMakeLists.txt
1bbe5ad
index a1e5fd4..a9a3d85 100644
1bbe5ad
--- a/lib/CodeGen/CMakeLists.txt
1bbe5ad
+++ b/lib/CodeGen/CMakeLists.txt
1bbe5ad
@@ -150,7 +150,7 @@ add_llvm_library(LLVMCodeGen
1bbe5ad
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/CodeGen
1bbe5ad
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/CodeGen/PBQP
1bbe5ad
 
1bbe5ad
-  LINK_LIBS ${PTHREAD_LIB}
1bbe5ad
+  LINK_LIBS ${LLVM_PTHREAD_LIB}
1bbe5ad
 
1bbe5ad
   DEPENDS
1bbe5ad
   intrinsics_gen
1bbe5ad
diff --git a/lib/ExecutionEngine/IntelJITEvents/CMakeLists.txt b/lib/ExecutionEngine/IntelJITEvents/CMakeLists.txt
1bbe5ad
index 3b8c4b9..e6c33b2 100644
1bbe5ad
--- a/lib/ExecutionEngine/IntelJITEvents/CMakeLists.txt
1bbe5ad
+++ b/lib/ExecutionEngine/IntelJITEvents/CMakeLists.txt
1bbe5ad
@@ -4,7 +4,7 @@ if( HAVE_LIBDL )
1bbe5ad
     set(LLVM_INTEL_JIT_LIBS ${CMAKE_DL_LIBS})
1bbe5ad
 endif()
1bbe5ad
 
1bbe5ad
-set(LLVM_INTEL_JIT_LIBS ${PTHREAD_LIB} ${LLVM_INTEL_JIT_LIBS})
1bbe5ad
+set(LLVM_INTEL_JIT_LIBS ${LLVM_PTHREAD_LIB} ${LLVM_INTEL_JIT_LIBS})
1bbe5ad
 
1bbe5ad
 
1bbe5ad
 add_llvm_library(LLVMIntelJITEvents
1bbe5ad
diff --git a/lib/Fuzzer/CMakeLists.txt b/lib/Fuzzer/CMakeLists.txt
1bbe5ad
index 5ba126e..f490b36 100644
1bbe5ad
--- a/lib/Fuzzer/CMakeLists.txt
1bbe5ad
+++ b/lib/Fuzzer/CMakeLists.txt
1bbe5ad
@@ -34,12 +34,12 @@ if( LLVM_USE_SANITIZE_COVERAGE )
1bbe5ad
   add_library(LLVMFuzzerNoMain STATIC
1bbe5ad
     $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
1bbe5ad
     )
1bbe5ad
-  target_link_libraries(LLVMFuzzerNoMain ${PTHREAD_LIB})
1bbe5ad
+  target_link_libraries(LLVMFuzzerNoMain ${LLVM_PTHREAD_LIB})
1bbe5ad
   add_library(LLVMFuzzer STATIC
1bbe5ad
     FuzzerMain.cpp
1bbe5ad
     $<TARGET_OBJECTS:LLVMFuzzerNoMainObjects>
1bbe5ad
     )
1bbe5ad
-  target_link_libraries(LLVMFuzzer ${PTHREAD_LIB})
1bbe5ad
+  target_link_libraries(LLVMFuzzer ${LLVM_PTHREAD_LIB})
1bbe5ad
 
1bbe5ad
   if( LLVM_INCLUDE_TESTS )
1bbe5ad
     add_subdirectory(test)
1bbe5ad
diff --git a/lib/Support/CMakeLists.txt b/lib/Support/CMakeLists.txt
1bbe5ad
index 3301364..f7cfa76 100644
1bbe5ad
--- a/lib/Support/CMakeLists.txt
1bbe5ad
+++ b/lib/Support/CMakeLists.txt
1bbe5ad
@@ -17,7 +17,7 @@ elseif( CMAKE_HOST_UNIX )
1bbe5ad
   if( LLVM_ENABLE_THREADS AND HAVE_LIBATOMIC )
1bbe5ad
     set(system_libs ${system_libs} atomic)
1bbe5ad
   endif()
1bbe5ad
-  set(system_libs ${system_libs} ${PTHREAD_LIB})
1bbe5ad
+  set(system_libs ${system_libs} ${LLVM_PTHREAD_LIB})
1bbe5ad
   if ( LLVM_ENABLE_ZLIB AND HAVE_LIBZ )
1bbe5ad
     set(system_libs ${system_libs} z)
1bbe5ad
   endif()
1bbe5ad
diff --git a/unittests/ExecutionEngine/Orc/CMakeLists.txt b/unittests/ExecutionEngine/Orc/CMakeLists.txt
1bbe5ad
index 68f6d0c..80c344e 100644
1bbe5ad
--- a/unittests/ExecutionEngine/Orc/CMakeLists.txt
1bbe5ad
+++ b/unittests/ExecutionEngine/Orc/CMakeLists.txt
1bbe5ad
@@ -21,4 +21,4 @@ add_llvm_unittest(OrcJITTests
1bbe5ad
   RPCUtilsTest.cpp
1bbe5ad
   )
1bbe5ad
 
1bbe5ad
-target_link_libraries(OrcJITTests ${PTHREAD_LIB})
1bbe5ad
+target_link_libraries(OrcJITTests ${LLVM_PTHREAD_LIB})
1bbe5ad
diff --git a/unittests/Support/CMakeLists.txt b/unittests/Support/CMakeLists.txt
1bbe5ad
index 4c9bb5e..ea26079 100644
1bbe5ad
--- a/unittests/Support/CMakeLists.txt
1bbe5ad
+++ b/unittests/Support/CMakeLists.txt
1bbe5ad
@@ -64,4 +64,4 @@ add_llvm_unittest(SupportTests
1bbe5ad
   )
1bbe5ad
 
1bbe5ad
 # ManagedStatic.cpp uses <pthread>.
1bbe5ad
-target_link_libraries(SupportTests ${PTHREAD_LIB})
1bbe5ad
+target_link_libraries(SupportTests ${LLVM_PTHREAD_LIB})
1bbe5ad
diff --git a/utils/unittest/CMakeLists.txt b/utils/unittest/CMakeLists.txt
1bbe5ad
index a50733a..b42ac83 100644
1bbe5ad
--- a/utils/unittest/CMakeLists.txt
1bbe5ad
+++ b/utils/unittest/CMakeLists.txt
1bbe5ad
@@ -40,8 +40,8 @@ if (NOT LLVM_ENABLE_THREADS)
1bbe5ad
   add_definitions( -DGTEST_HAS_PTHREAD=0 )
1bbe5ad
 endif()
1bbe5ad
 
1bbe5ad
-find_library(PTHREAD_LIBRARY_PATH pthread)
1bbe5ad
-if (PTHREAD_LIBRARY_PATH)
1bbe5ad
+find_library(LLVM_PTHREAD_LIBRARY_PATH pthread)
1bbe5ad
+if (LLVM_PTHREAD_LIBRARY_PATH)
1bbe5ad
   list(APPEND LIBS pthread)
1bbe5ad
 endif()
1bbe5ad
 
1bbe5ad
-- 
1bbe5ad
1.8.3.1
1bbe5ad