diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -726,6 +726,39 @@ endforeach() endif() + if (${name} IN_LIST LLVM_CUSTOM_BINARIES) + if (NOT LLVM_${name}_COMPILER_FLAGS AND NOT LLVM_${name}_SHARED_LINKER_FLAGS AND NOT LLVM_${name}_MODULE_LINKER_FLAGS) + message(FATAL_ERROR "At least one of compiler or linker flags must be provided when specifying LLVM_CUSTOM_BINARIES") + else() + if (LLVM_${name}_COMPILER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_COMPILER_FLAGS} to ${name}") + target_compile_options(${name} PRIVATE ${LLVM_${name}_COMPILER_FLAGS}) + # For binaries that link with static libraries, recursively apply the flag to those targets. + get_target_property(target_libraries ${name} LINK_LIBRARIES) + foreach(lib ${target_libraries}) + if(TARGET ${lib}) + message(STATUS "Applying ${LLVM_${name}_COMPILER_FLAGS} to ${lib}") + target_compile_options(${lib} PRIVATE ${LLVM_${name}_COMPILER_FLAGS}) + else() + message(STATUS "Target ${lib} does not exist in the project. Skipping...") + endif() + endforeach() + endif() + if (ARG_SHARED) + if (LLVM_${name}_SHARED_LINKER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_SHARED_LINKER_FLAGS} to ${name}") + target_link_options(${name} PRIVATE ${LLVM_${name}_SHARED_LINKER_FLAGS}) + endif() + endif() + if (ARG_MODULE) + if (LLVM_${name}_MODULE_LINKER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_MODULE_LINKER_FLAGS} to ${name}") + target_link_options(${name} PRIVATE ${LLVM_${name}_MODULE_LINKER_FLAGS}) + endif() + endif() + endif() + endif() + if(ARG_SHARED OR ARG_MODULE) llvm_externalize_debuginfo(${name}) llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) @@ -1019,6 +1052,31 @@ endforeach() endif( LLVM_COMMON_DEPENDS ) + if (${name} IN_LIST LLVM_CUSTOM_BINARIES) + if (NOT LLVM_${name}_COMPILER_FLAGS AND NOT LLVM_${name}_EXE_LINKER_FLAGS) + message(FATAL_ERROR "At least one of compiler or linker flags must be provided when specifying LLVM_CUSTOM_BINARIES") + else() + if (LLVM_${name}_COMPILER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_COMPILER_FLAGS} to ${name}") + target_compile_options(${name} PRIVATE ${LLVM_${name}_COMPILER_FLAGS}) + # For binaries that link with static libraries, recursively apply the flag to those targets. + get_target_property(target_libraries ${name} LINK_LIBRARIES) + foreach(lib ${target_libraries}) + if(TARGET ${lib}) + message(STATUS "Applying ${LLVM_${name}_COMPILER_FLAGS} to ${lib}") + target_compile_options(${lib} PRIVATE ${LLVM_${name}_COMPILER_FLAGS}) + else() + message(STATUS "Target ${lib} does not exist in the project. Skipping...") + endif() + endforeach() + endif() + if (LLVM_${name}_EXE_LINKER_FLAGS) + message(STATUS "Applying ${LLVM_${name}_EXE_LINKER_FLAGS} to ${name}") + target_link_options(${name} PRIVATE ${LLVM_${name}_EXE_LINKER_FLAGS}) + endif() + endif() + endif() + if(NOT ARG_IGNORE_EXTERNALIZE_DEBUGINFO) llvm_externalize_debuginfo(${name}) endif()