diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 93011522e498e6e..72661594f643fae 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -726,6 +726,8 @@ function(llvm_add_library name) endforeach() endif() + add_custom_linker_flags(${name}) + if(ARG_SHARED OR ARG_MODULE) llvm_externalize_debuginfo(${name}) llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) @@ -1019,6 +1021,8 @@ macro(add_llvm_executable name) endforeach() endif( LLVM_COMMON_DEPENDS ) + add_custom_linker_flags(${name}) + if(NOT ARG_IGNORE_EXTERNALIZE_DEBUGINFO) llvm_externalize_debuginfo(${name}) endif() @@ -1524,6 +1528,13 @@ macro(add_llvm_tool_subdirectory name) add_llvm_external_project(${name}) endmacro(add_llvm_tool_subdirectory) +macro(add_custom_linker_flags name) + if (LLVM_${name}_LINKER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_LINKER_FLAGS} to ${name}") + target_link_options(${name} PRIVATE ${LLVM_${name}_LINKER_FLAGS}) + endif() +endmacro() + function(get_project_name_from_src_var var output) string(REGEX MATCH "LLVM_EXTERNAL_(.*)_SOURCE_DIR" MACHED_TOOL "${var}") diff --git a/llvm/docs/CMake.rst b/llvm/docs/CMake.rst index c70b6b8206c2f92..c76cb8a789beee7 100644 --- a/llvm/docs/CMake.rst +++ b/llvm/docs/CMake.rst @@ -428,6 +428,9 @@ enabled sub-projects. Nearly all of these variable names begin with $CMAKE_INSTALL_PREFIX/Toolchains containing an xctoolchain directory which can be used to override the default system tools. +**LLVM__LINKER_FLAGS**:STRING + Defines the set of linker flags that should be applied to a . + **LLVM_DEFAULT_TARGET_TRIPLE**:STRING LLVM target to use for code generation when no target is explicitly specified. It defaults to "host", meaning that it shall pick the architecture