|
| 1 | +if(NOT SWIFT_BUILD_SWIFT_SYNTAX) |
| 2 | + return() |
| 3 | +endif() |
| 4 | +if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}") |
| 5 | + message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE") |
| 6 | + return() |
| 7 | +endif() |
| 8 | + |
| 9 | +# Build swift-syntax libraries with FetchContent. |
| 10 | +set(CMAKE_Swift_COMPILER_TARGET ${SWIFT_HOST_TRIPLE}) |
| 11 | +set(BUILD_SHARED_LIBS ON) |
| 12 | +# All libraries in 'swift-syntax' goes to 'lib/swift/host'. |
| 13 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}") |
| 14 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}") |
| 15 | +if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD") |
| 16 | + set(SWIFT_HOST_LIBRARIES_RPATH "$ORIGIN;$ORIGIN/../${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") |
| 17 | +endif() |
| 18 | +# Add unique ABI prefix to swift-syntax libraries so that compiler libraries (e.g. sourcekitdInProc) |
| 19 | +# can be used from tools that has its own swift-syntax libraries as SwiftPM dependencies. |
| 20 | +set(SWIFT_MODULE_ABI_NAME_PREFIX "Compiler") |
| 21 | + |
| 22 | +file(TO_CMAKE_PATH "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}" swift_syntax_path) |
| 23 | +FetchContent_Declare(SwiftSyntax SOURCE_DIR "${swift_syntax_path}") |
| 24 | +FetchContent_MakeAvailable(SwiftSyntax) |
| 25 | + |
| 26 | +# Install swift-syntax libraries. |
| 27 | +set(SWIFT_SYNTAX_MODULES |
| 28 | + SwiftBasicFormat |
| 29 | + SwiftParser |
| 30 | + SwiftParserDiagnostics |
| 31 | + SwiftDiagnostics |
| 32 | + SwiftSyntax |
| 33 | + SwiftOperators |
| 34 | + SwiftSyntaxBuilder |
| 35 | + SwiftSyntaxMacros |
| 36 | + SwiftSyntaxMacroExpansion |
| 37 | + SwiftCompilerPluginMessageHandling |
| 38 | + # Support for LSP |
| 39 | + SwiftIDEUtils |
| 40 | +) |
| 41 | + |
| 42 | +# Install shared runtime libraries |
| 43 | +if(CMAKE_SYSTEM_NAME MATCHES Windows) |
| 44 | + swift_install_in_component(TARGETS ${SWIFT_SYNTAX_MODULES} |
| 45 | + RUNTIME |
| 46 | + DESTINATION "bin" |
| 47 | + COMPONENT swift-syntax-lib) |
| 48 | +else() |
| 49 | + swift_install_in_component(TARGETS ${SWIFT_SYNTAX_MODULES} |
| 50 | + LIBRARY |
| 51 | + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host" |
| 52 | + COMPONENT swift-syntax-lib) |
| 53 | +endif() |
| 54 | + |
| 55 | +# Install import libraries in Windows. |
| 56 | +if(CMAKE_SYSTEM_NAME MATCHES Windows) |
| 57 | + list(TRANSFORM SWIFT_SYNTAX_MODULES |
| 58 | + PREPEND "${CMAKE_IMPORT_LIBRARY_PREFIX}" |
| 59 | + OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES) |
| 60 | + list(TRANSFORM SWIFT_SYNTAX_IMPORT_LIBRARIES |
| 61 | + APPEND "${CMAKE_IMPORT_LIBRARY_SUFFIX}" |
| 62 | + OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES) |
| 63 | + list(TRANSFORM SWIFT_SYNTAX_IMPORT_LIBRARIES |
| 64 | + PREPEND "${SWIFT_HOST_LIBRARIES_DEST_DIR}/" |
| 65 | + OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES) |
| 66 | + swift_install_in_component(PROGRAMS "${SWIFT_SYNTAX_IMPORT_LIBRARIES}" |
| 67 | + DESTINATION lib |
| 68 | + COMPONENT swift-syntax-lib) |
| 69 | +endif() |
| 70 | + |
| 71 | +add_dependencies(swift-syntax-lib |
| 72 | + ${SWIFT_SYNTAX_MODULES}) |
| 73 | + |
| 74 | +# Install Swift module interface files. |
| 75 | +foreach(module ${SWIFT_SYNTAX_MODULES}) |
| 76 | + set(module_dir "${module}.swiftmodule") |
| 77 | + set(module_file "${SWIFT_HOST_LIBRARIES_DEST_DIR}/${module_dir}/${SWIFT_HOST_MODULE_TRIPLE}") |
| 78 | + swift_install_in_component(FILES "${module_file}.swiftinterface" "${module_file}.private.swiftinterface" |
| 79 | + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host/${module_dir}" |
| 80 | + COMPONENT swift-syntax-lib) |
| 81 | +endforeach() |
| 82 | + |
| 83 | +export(TARGETS ${SWIFT_SYNTAX_MODULES} |
| 84 | + NAMESPACE SwiftSyntax:: |
| 85 | + FILE ${CMAKE_BINARY_DIR}/cmake/modules/SwiftSyntaxConfig.cmake |
| 86 | + EXPORT_LINK_INTERFACE_LIBRARIES) |
0 commit comments