summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/modules/AddClang.cmake7
-rw-r--r--tools/CMakeLists.txt3
-rw-r--r--tools/clang-shlib/CMakeLists.txt18
-rw-r--r--tools/clang-shlib/clang-shlib.cpp1
4 files changed, 27 insertions, 2 deletions
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake
index 18bac7172b..b598f13ff6 100644
--- a/cmake/modules/AddClang.cmake
+++ b/cmake/modules/AddClang.cmake
@@ -81,9 +81,12 @@ macro(add_clang_library name)
)
endif()
if(ARG_SHARED)
- set(ARG_ENABLE_SHARED SHARED)
+ set(LIBTYPE SHARED)
+ else()
+ set(LIBTYPE STATIC OBJECT)
+ set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name})
endif()
- llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
+ llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
if(TARGET ${name})
target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 43dfffe149..f5c90ba783 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -13,6 +13,9 @@ add_clang_subdirectory(c-index-test)
add_clang_subdirectory(clang-rename)
add_clang_subdirectory(clang-refactor)
+if(UNIX)
+ add_clang_subdirectory(clang-shlib)
+endif()
if(CLANG_ENABLE_ARCMT)
add_clang_subdirectory(arcmt-test)
diff --git a/tools/clang-shlib/CMakeLists.txt b/tools/clang-shlib/CMakeLists.txt
new file mode 100644
index 0000000000..018aee3755
--- /dev/null
+++ b/tools/clang-shlib/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Building libclang_shared.so fails if LLVM_ENABLE_PIC=Off
+if (NOT LLVM_ENABLE_PIC)
+ return()
+endif()
+
+get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)
+
+foreach (lib ${clang_libs})
+ list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
+ list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>)
+endforeach ()
+
+add_clang_library(clang_shared
+ SHARED
+ clang-shlib.cpp
+ ${_OBJECTS}
+ LINK_LIBS
+ ${_DEPS})
diff --git a/tools/clang-shlib/clang-shlib.cpp b/tools/clang-shlib/clang-shlib.cpp
new file mode 100644
index 0000000000..0093622e6a
--- /dev/null
+++ b/tools/clang-shlib/clang-shlib.cpp
@@ -0,0 +1 @@
+// Intentionally empty source file to make CMake happy