[PATCH] D84127: Make LLVM_ENABLE_LTO function with multi-arch values for CMAKE_OSX_ARCHITECTURES
Daniel Sanders via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 24 17:46:25 PDT 2020
dsanders updated this revision to Diff 280638.
dsanders added a comment.
- Add comment referencing the bug
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84127/new/
https://reviews.llvm.org/D84127
Files:
llvm/cmake/modules/AddLLVM.cmake
Index: llvm/cmake/modules/AddLLVM.cmake
===================================================================
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -1970,27 +1970,37 @@
set(file_ext dSYM)
endif()
- set(output_name "$<TARGET_FILE_NAME:${name}>.${file_ext}")
-
- if(LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR)
- set(output_path "-o=${LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR}/${output_name}")
- else()
- set(output_path "-o=${output_name}")
- endif()
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)
+ # As long as we compile at least one file from source code, clang will
+ # invoke dsymutil on the temporary objects after lipo'ing all the slices
+ # together.
+ # This is a workaround to a clang bug where dsymutil is not invoked for
+ # every case where debug info is present and temporary objects are being
+ # linked. See https://bugs.llvm.org/show_bug.cgi?id=46841 for more
+ # information.
+ set(lto_src ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${name}-lto.cpp)
+ file(WRITE "${lto_src}" "extern int dummy;\n")
set_property(TARGET ${name} APPEND_STRING PROPERTY
- LINK_FLAGS " -Wl,-object_path_lto,${lto_object}")
+ LINK_FLAGS " ${lto_src}")
endif()
- if(NOT CMAKE_DSYMUTIL)
- set(CMAKE_DSYMUTIL xcrun dsymutil)
+ if(LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR)
+ set(output_name "$<TARGET_FILE_NAME:${name}>.${file_ext}")
+ set(output_path "${LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR}/${output_name}")
+ add_custom_command(TARGET ${name} POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR}"
+ # Remove any old versions if present
+ COMMAND ${CMAKE_COMMAND} -E rm "-rf" "${output_path}"
+ # Move the dSYM clang emitted next to the output binary where we want it
+ # to be.
+ COMMAND ${CMAKE_COMMAND} -E rename "$<TARGET_FILE:${name}>.${file_ext}"
+ "${output_path}"
+ )
endif()
add_custom_command(TARGET ${name} POST_BUILD
- COMMAND ${CMAKE_DSYMUTIL} ${output_path} $<TARGET_FILE:${name}>
- ${strip_command}
+ COMMAND ${strip_command}
)
else()
add_custom_command(TARGET ${name} POST_BUILD
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84127.280638.patch
Type: text/x-patch
Size: 2482 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200725/c17fd5c2/attachment-0001.bin>
More information about the llvm-commits
mailing list