diff options
Diffstat (limited to 'clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake')
-rw-r--r-- | clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake b/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake new file mode 100644 index 00000000000..2299bc8ff4f --- /dev/null +++ b/clang-tools-extra/clangd/xpc/cmake/modules/CreateClangdXPCFramework.cmake @@ -0,0 +1,73 @@ +# Creates the ClangdXPC framework. +macro(create_clangd_xpc_framework target name) + set(CLANGD_FRAMEWORK_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${name}.framework") + set(CLANGD_FRAMEWORK_OUT_LOCATION "${CLANGD_FRAMEWORK_LOCATION}/Versions/A") + + # Create the framework info PLIST. + set(CLANGD_XPC_FRAMEWORK_NAME "${name}") + configure_file( + "${CLANGD_XPC_SOURCE_DIR}/cmake/Info.plist.in" + "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist") + + set(CLANGD_XPC_SERVICE_NAME "clangd") + set(CLANGD_XPC_SERVICE_OUT_LOCATION + "${CLANGD_FRAMEWORK_OUT_LOCATION}/XPCServices/${CLANGD_XPC_SERVICE_NAME}.xpc/Contents") + + # Create the XPC service info PLIST. + set(CLANGD_XPC_SERVICE_BUNDLE_NAME "org.llvm.${CLANGD_XPC_SERVICE_NAME}") + configure_file( + "${CLANGD_XPC_SOURCE_DIR}/cmake/XPCServiceInfo.plist.in" + "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist") + + # Create the custom command + add_custom_command(OUTPUT ${CLANGD_FRAMEWORK_LOCATION} + # Copy the PLIST. + COMMAND ${CMAKE_COMMAND} -E copy + "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist" + "${CLANGD_FRAMEWORK_OUT_LOCATION}/Resources/Info.plist" + + # Copy the framework binary. + COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${target}.dylib" + "${CLANGD_FRAMEWORK_OUT_LOCATION}/${name}" + + # Copy the XPC Service PLIST. + COMMAND ${CMAKE_COMMAND} -E copy + "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist" + "${CLANGD_XPC_SERVICE_OUT_LOCATION}/Info.plist" + + # Copy the Clangd binary. + COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clangd" + "${CLANGD_XPC_SERVICE_OUT_LOCATION}/MacOS/clangd" + + COMMAND ${CMAKE_COMMAND} -E create_symlink "A" + "${CLANGD_FRAMEWORK_LOCATION}/Versions/Current" + + COMMAND ${CMAKE_COMMAND} -E create_symlink + "Versions/Current/Resources" + "${CLANGD_FRAMEWORK_LOCATION}/Resources" + + COMMAND ${CMAKE_COMMAND} -E create_symlink + "Versions/Current/XPCServices" + "${CLANGD_FRAMEWORK_LOCATION}/XPCServices" + + COMMAND ${CMAKE_COMMAND} -E create_symlink + "Versions/Current/${name}" + "${CLANGD_FRAMEWORK_LOCATION}/${name}" + + DEPENDS + "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist" + "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist" + clangd + COMMENT "Creating ClangdXPC framework" + VERBATIM + ) + + add_custom_target( + ClangdXPC + DEPENDS + ${target} + ${CLANGD_FRAMEWORK_LOCATION} + ) +endmacro(create_clangd_xpc_framework) |