summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-11-06 08:37:50 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2013-11-06 08:37:50 +0000
commit695f3e339f39999122340685d1555205be2511c2 (patch)
tree07ccabf816267b4e2c26b08b52119a80d897a9a5 /CMakeLists.txt
parent58b6db76adab8dee2e64fbc300360f9b46c561ba (diff)
downloadclang-695f3e339f39999122340685d1555205be2511c2.tar.gz
clang-695f3e339f39999122340685d1555205be2511c2.tar.bz2
clang-695f3e339f39999122340685d1555205be2511c2.tar.xz
[libclang] Some changes on the linker options for libclang on a CMake build.
- Use the 'libclang.exports' file. - Pass -Wl,-current_version - Set install name to "@rpath" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194134 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt39
1 files changed, 39 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 69679538f7..8d02bf05f8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -199,6 +199,41 @@ function(clang_tablegen)
endif()
endfunction(clang_tablegen)
+# FIXME: Generalize and move to llvm.
+function(add_clang_symbol_exports target_name export_file)
+ # Makefile.rules contains special cases for different platforms.
+ # We restrict ourselves to Darwin for the time being.
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ add_custom_command(OUTPUT symbol.exports
+ COMMAND sed -e "s/^/_/" < ${export_file} > symbol.exports
+ DEPENDS ${export_file}
+ VERBATIM
+ COMMENT "Creating export file for ${target_name}")
+ add_custom_target(${target_name}_exports DEPENDS symbol.exports)
+ set_property(DIRECTORY APPEND
+ PROPERTY ADDITIONAL_MAKE_CLEAN_FILES symbol.exports)
+
+ get_property(srcs TARGET ${target_name} PROPERTY SOURCES)
+ foreach(src ${srcs})
+ get_filename_component(extension ${src} EXT)
+ if(extension STREQUAL ".cpp")
+ set(first_source_file ${src})
+ break()
+ endif()
+ endforeach()
+
+ # Force re-linking when the exports file changes. Actually, it
+ # forces recompilation of the source file. The LINK_DEPENDS target
+ # property only works for makefile-based generators.
+ set_property(SOURCE ${first_source_file} APPEND PROPERTY
+ OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/symbol.exports)
+
+ set_property(TARGET ${target_name} APPEND_STRING PROPERTY
+ LINK_FLAGS " -Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/symbol.exports")
+ add_dependencies(${target_name} ${target_name}_exports)
+ endif()
+endfunction(add_clang_symbol_exports)
+
macro(add_clang_library name)
llvm_process_sources(srcs ${ARGN})
if(MSVC_IDE OR XCODE)
@@ -238,6 +273,10 @@ macro(add_clang_library name)
llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
target_link_libraries( ${name} ${LLVM_COMMON_LIBS} )
link_system_libs( ${name} )
+
+ if (SHARED_LIBRARY AND EXPORTED_SYMBOL_FILE)
+ add_clang_symbol_exports( ${name} ${EXPORTED_SYMBOL_FILE} )
+ endif()
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang")
install(TARGETS ${name}