diff --git a/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake b/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake --- a/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake +++ b/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake @@ -70,4 +70,9 @@ ${target} ${CLANGD_FRAMEWORK_LOCATION} ) + + # clangd is already signed as a standalone executable, so it must be forced. + llvm_codesign(ClangdXPC BUNDLE_PATH "${CLANGD_FRAMEWORK_OUT_LOCATION}/XPCServices/${CLANGD_XPC_SERVICE_NAME}.xpc/" FORCE) + # ClangdXPC library is already signed as a standalone library, so it must be forced. + llvm_codesign(ClangdXPC BUNDLE_PATH "${CLANGD_FRAMEWORK_LOCATION}" FORCE) endmacro(create_clangd_xpc_framework) 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 @@ -1659,9 +1659,9 @@ endif() endfunction() -# Usage: llvm_codesign(name [ENTITLEMENTS file]) +# Usage: llvm_codesign(name [FORCE] [ENTITLEMENTS file] [BUNDLE_PATH path]) function(llvm_codesign name) - cmake_parse_arguments(ARG "" "ENTITLEMENTS" "" ${ARGN}) + cmake_parse_arguments(ARG "FORCE" "ENTITLEMENTS;BUNDLE_PATH" "" ${ARGN}) if(NOT LLVM_CODESIGNING_IDENTITY) return() @@ -1691,12 +1691,20 @@ set(pass_entitlements --entitlements ${ARG_ENTITLEMENTS}) endif() + if (NOT ARG_BUNDLE_PATH) + set(ARG_BUNDLE_PATH $) + endif() + + if(ARG_FORCE) + set(force_flag "-f") + endif() + add_custom_command( TARGET ${name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE} ${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY} - ${pass_entitlements} $ + ${pass_entitlements} ${force_flag} ${ARG_BUNDLE_PATH} ) endif() endfunction()