brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · d5ba449 Raw
85 lines · plain
1# Creates the ClangdXPC framework.2macro(create_clangd_xpc_framework target name)3  set(CLANGD_FRAMEWORK_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${name}.framework")4  set(CLANGD_FRAMEWORK_OUT_LOCATION "${CLANGD_FRAMEWORK_LOCATION}/Versions/A")5 6  # Create the framework info PLIST.7  set(CLANGD_XPC_FRAMEWORK_NAME "${name}")8  configure_file(9    "${CLANGD_XPC_SOURCE_DIR}/cmake/Info.plist.in"10    "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist")11 12  set(CLANGD_XPC_SERVICE_NAME "clangd")13  set(CLANGD_XPC_SERVICE_OUT_LOCATION14      "${CLANGD_FRAMEWORK_OUT_LOCATION}/XPCServices/${CLANGD_XPC_SERVICE_NAME}.xpc/Contents")15 16  # Create the XPC service info PLIST.17  set(CLANGD_XPC_SERVICE_BUNDLE_NAME "org.llvm.${CLANGD_XPC_SERVICE_NAME}")18  configure_file(19    "${CLANGD_XPC_SOURCE_DIR}/cmake/XPCServiceInfo.plist.in"20    "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist")21 22  # Create the custom command23  add_custom_command(OUTPUT ${CLANGD_FRAMEWORK_LOCATION}24    # Copy the PLIST.25    COMMAND ${CMAKE_COMMAND} -E copy26      "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist"27      "${CLANGD_FRAMEWORK_OUT_LOCATION}/Resources/Info.plist"28 29    # Copy the framework binary.30    COMMAND ${CMAKE_COMMAND} -E copy31       "$<TARGET_FILE:${target}>"32       "${CLANGD_FRAMEWORK_OUT_LOCATION}/${name}"33 34    # Copy the XPC Service PLIST.35    COMMAND ${CMAKE_COMMAND} -E copy36      "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist"37      "${CLANGD_XPC_SERVICE_OUT_LOCATION}/Info.plist"38 39    # Copy the Clangd binary.40    COMMAND ${CMAKE_COMMAND} -E copy41      "$<TARGET_FILE:clangd>"42      "${CLANGD_XPC_SERVICE_OUT_LOCATION}/MacOS/clangd"43 44     COMMAND ${CMAKE_COMMAND} -E create_symlink "A"45     "${CLANGD_FRAMEWORK_LOCATION}/Versions/Current"46 47     COMMAND ${CMAKE_COMMAND} -E create_symlink48     "Versions/Current/Resources"49     "${CLANGD_FRAMEWORK_LOCATION}/Resources"50 51     COMMAND ${CMAKE_COMMAND} -E create_symlink52     "Versions/Current/XPCServices"53     "${CLANGD_FRAMEWORK_LOCATION}/XPCServices"54 55     COMMAND ${CMAKE_COMMAND} -E create_symlink56     "Versions/Current/${name}"57     "${CLANGD_FRAMEWORK_LOCATION}/${name}"58 59    DEPENDS60      "${CLANGD_XPC_BINARY_DIR}/${name}.Info.plist"61      "${CLANGD_XPC_BINARY_DIR}/${name}Service.Info.plist"62      clangd63    COMMENT "Creating ClangdXPC framework"64    VERBATIM65  )66 67  add_custom_target(68    ClangdXPC69    DEPENDS70    ${target}71    ${CLANGD_FRAMEWORK_LOCATION}72  )73 74  set_property(75    TARGET ClangdXPC76    APPEND77    PROPERTY ADDITIONAL_CLEAN_FILES ${CLANGD_FRAMEWORK_LOCATION}78  )79 80  # clangd is already signed as a standalone executable, so it must be forced.81  llvm_codesign(ClangdXPC BUNDLE_PATH "${CLANGD_FRAMEWORK_OUT_LOCATION}/XPCServices/${CLANGD_XPC_SERVICE_NAME}.xpc/" FORCE)82  # ClangdXPC library is already signed as a standalone library, so it must be forced.83  llvm_codesign(ClangdXPC BUNDLE_PATH "${CLANGD_FRAMEWORK_LOCATION}" FORCE)84endmacro(create_clangd_xpc_framework)85