From 85ab1e7fe79dcc05d2402c4cfc34f324c9ece65f Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 18 Mar 2015 20:09:13 +0000 Subject: [PATCH] CMake: Disable ENABLE_EXPORTS for executables with MSVC The MSVC linker won't produce a .lib file for an executable that doesn't export anything, and LLVM doesn't maintain dllexport annotations or .def files listing all C++ symbols. It also doesn't support exporting all symbols, like binutils ld. CMake 3.2 changed the Ninja generator to list both the .exe and .lib files as outputs of executable build targets. Ninja would always re-link executables with ENABLE_EXPORTS because the .lib output file was not present, and therefore the target was out of date. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232662 91177308-0d34-0410-b5e6-96231b3b80d8 --- CMakeLists.txt | 2 +- cmake/modules/AddLLVM.cmake | 6 ++++++ examples/ExceptionDemo/CMakeLists.txt | 2 +- tools/bugpoint/CMakeLists.txt | 2 +- tools/llc/CMakeLists.txt | 2 +- tools/lli/CMakeLists.txt | 2 +- tools/llvm-stress/CMakeLists.txt | 2 +- tools/opt/CMakeLists.txt | 2 +- 8 files changed, 13 insertions(+), 7 deletions(-) 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)