diff options
author | Chris Bieneman <beanz@apple.com> | 2015-12-03 18:45:39 +0000 |
---|---|---|
committer | Chris Bieneman <beanz@apple.com> | 2015-12-03 18:45:39 +0000 |
commit | bf2c4126ff316e1c91751c991d4221ac5426378f (patch) | |
tree | 40d65906c44ce2dc4c551ff7a3403f349c90e290 | |
parent | 725c4f71d1f8cdc379a1db8fcb03173a6e174566 (diff) | |
download | bcm5719-llvm-bf2c4126ff316e1c91751c991d4221ac5426378f.tar.gz bcm5719-llvm-bf2c4126ff316e1c91751c991d4221ac5426378f.zip |
[CMake] Add option LLVM_EXTERNALIZE_DEBUGINFO
Summary: This adds support for generating dSYM files and stripping debug info from executables and dylibs. It also supports passing -object_path_lto to the linker to generate dSYMs for LTO builds.
Reviewers: bogner, friss
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D15133
llvm-svn: 254627
-rw-r--r-- | llvm/CMakeLists.txt | 3 | ||||
-rw-r--r-- | llvm/cmake/modules/AddLLVM.cmake | 27 |
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index fc46413640c..c4ff8f3cd28 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -301,6 +301,9 @@ endif( LLVM_USE_INTEL_JITEVENTS ) option(LLVM_USE_OPROFILE "Use opagent JIT interface to inform OProfile about JIT code" OFF) +option(LLVM_EXTERNALIZE_DEBUGINFO + "Generate dSYM files and strip executables and libraries (Darwin Only)" OFF) + # If enabled, verify we are on a platform that supports oprofile. if( LLVM_USE_OPROFILE ) if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index b5517d0b893..97ac96ed428 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -512,6 +512,10 @@ function(llvm_add_library name) add_dependencies(${objlib} ${LLVM_COMMON_DEPENDS}) endforeach() endif() + + if(ARG_SHARED OR ARG_MODULE) + llvm_externalize_debuginfo(${name}) + endif() endfunction() macro(add_llvm_library name) @@ -655,6 +659,8 @@ macro(add_llvm_executable name) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) endif( LLVM_COMMON_DEPENDS ) + + llvm_externalize_debuginfo(${name}) endmacro(add_llvm_executable name) function(export_executable_symbols target) @@ -1168,3 +1174,24 @@ function(add_llvm_tool_symlink name dest) endif() endif() endfunction() + +function(llvm_externalize_debuginfo name) + if(NOT LLVM_EXTERNALIZE_DEBUGINFO) + return() + endif() + + if(APPLE) + if(CMAKE_CXX_FLAGS MATCHES "-flto" + OR CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE} MATCHES "-flto") + + set(lto_object ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${name}-lto.o) + set_target_properties(${name} PROPERTIES + LINK_FLAGS "-Wl,-object_path_lto -Wl,${lto_object}") + endif() + add_custom_command(TARGET ${name} POST_BUILD + COMMAND xcrun dsymutil $<TARGET_FILE:${name}> + COMMAND xcrun strip -Sl $<TARGET_FILE:${name}>) + else() + message(FATAL_ERROR "LLVM_EXTERNALIZE_DEBUGINFO isn't implemented for non-darwin platforms!") + endif() +endfunction() |