diff --git a/CMakeLists.txt b/CMakeLists.txt index cfbf9562f03..b91ba15f553 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -557,7 +557,7 @@ if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) # Make sure we don't get -rdynamic in every binary. For those that need it, -# use set_target_properties(target PROPERTIES ENABLE_EXPORTS 1) +# use export_executable_symbols(target). set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") include(AddLLVM) diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index de542f54b3a..83897935e27 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -490,6 +490,12 @@ macro(add_llvm_executable name) endif( LLVM_COMMON_DEPENDS ) endmacro(add_llvm_executable name) +function(export_executable_symbols target) + if (NOT MSVC) # MSVC's linker doesn't support exporting all symbols. + set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) + endif() +endfunction() + set (LLVM_TOOLCHAIN_TOOLS llvm-ar diff --git a/examples/ExceptionDemo/CMakeLists.txt b/examples/ExceptionDemo/CMakeLists.txt index 9cadd94c24a..2a7667dfba4 100644 --- a/examples/ExceptionDemo/CMakeLists.txt +++ b/examples/ExceptionDemo/CMakeLists.txt @@ -15,4 +15,4 @@ add_llvm_example(ExceptionDemo ExceptionDemo.cpp ) -set_target_properties(ExceptionDemo PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(ExceptionDemo) diff --git a/tools/bugpoint/CMakeLists.txt b/tools/bugpoint/CMakeLists.txt index d71e097918c..daf502e16cc 100644 --- a/tools/bugpoint/CMakeLists.txt +++ b/tools/bugpoint/CMakeLists.txt @@ -31,7 +31,7 @@ add_llvm_tool(bugpoint ToolRunner.cpp bugpoint.cpp ) -set_target_properties(bugpoint PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(bugpoint) if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS) target_link_libraries(bugpoint Polly) diff --git a/tools/llc/CMakeLists.txt b/tools/llc/CMakeLists.txt index 484ff4028f8..dcbcf9da612 100644 --- a/tools/llc/CMakeLists.txt +++ b/tools/llc/CMakeLists.txt @@ -17,4 +17,4 @@ set(LLVM_NO_DEAD_STRIP 1) add_llvm_tool(llc llc.cpp ) -set_target_properties(llc PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(llc) diff --git a/tools/lli/CMakeLists.txt b/tools/lli/CMakeLists.txt index 463c8530894..aad8367f34e 100644 --- a/tools/lli/CMakeLists.txt +++ b/tools/lli/CMakeLists.txt @@ -39,4 +39,4 @@ add_llvm_tool(lli RemoteTarget.cpp RemoteTargetExternal.cpp ) -set_target_properties(lli PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(llvm-stress) diff --git a/tools/llvm-stress/CMakeLists.txt b/tools/llvm-stress/CMakeLists.txt index 106ced14194..d5c10e13f5b 100644 --- a/tools/llvm-stress/CMakeLists.txt +++ b/tools/llvm-stress/CMakeLists.txt @@ -7,4 +7,4 @@ set(LLVM_LINK_COMPONENTS add_llvm_tool(llvm-stress llvm-stress.cpp ) -set_target_properties(llvm-stress PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(llvm-stress) diff --git a/tools/opt/CMakeLists.txt b/tools/opt/CMakeLists.txt index 12dc4f0a9f5..5f825220cc8 100644 --- a/tools/opt/CMakeLists.txt +++ b/tools/opt/CMakeLists.txt @@ -31,7 +31,7 @@ add_llvm_tool(opt PrintSCC.cpp opt.cpp ) -set_target_properties(opt PROPERTIES ENABLE_EXPORTS 1) +export_executable_symbols(opt) if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS) target_link_libraries(opt Polly)