Skip to content

Commit 2d527c4

Browse files
committed
[CMake] Move swift-syntax library definitions to 'lib/SwiftSyntax'
Previously, swift-syntax libraries were built in '/CMakeLists.txt', and were installed in '/lib/CMakeLists.txt'. Consolidate them into '/lib/SwiftSyntax/CMakeLists.txt'. Now the swift-syntax libraries look like any other tool libraries outside the 'lib/SwiftSyntax', as they should.
1 parent 0bbcae4 commit 2d527c4

File tree

3 files changed

+87
-97
lines changed

3 files changed

+87
-97
lines changed

CMakeLists.txt

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,6 @@ endif()
13511351
add_subdirectory(include)
13521352

13531353
if(SWIFT_INCLUDE_TOOLS)
1354-
13551354
# TODO Remove this once release/5.9 is done and we can finish migrating Swift
13561355
# off of `llvm::None`/`llvm::Optional`, and `llvm::makeArrayRef`.
13571356
# This is to silence the avalanche of deprecation warnings from LLVM headers
@@ -1360,38 +1359,6 @@ if(SWIFT_INCLUDE_TOOLS)
13601359
# warnings or the massive number of merge-conflicts we would get otherwise.
13611360
add_definitions(-DSWIFT_TARGET)
13621361

1363-
# Include 'swift-syntax'.
1364-
# This is a function because we want to set some 'CMAKE_*' variables temporarily.'
1365-
# TODO: Replace this with 'block()' after CMake 3.25
1366-
function(include_swift_syntax)
1367-
if(NOT SWIFT_BUILD_SWIFT_SYNTAX)
1368-
return()
1369-
endif()
1370-
if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}")
1371-
message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE")
1372-
return()
1373-
endif()
1374-
1375-
set(CMAKE_Swift_COMPILER_TARGET ${SWIFT_HOST_TRIPLE})
1376-
set(BUILD_SHARED_LIBS ON)
1377-
# All libraries in 'swift-syntax' goes to 'lib/swift/host'.
1378-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}")
1379-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}")
1380-
if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD")
1381-
set(SWIFT_HOST_LIBRARIES_RPATH "$ORIGIN;$ORIGIN/../${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
1382-
endif()
1383-
# Add unique ABI prefix to swift-syntax libraries so that compiler libraries (e.g. sourcekitdInProc)
1384-
# can be used from tools that has its own swift-syntax libraries as SwiftPM dependencies.
1385-
set(SWIFT_MODULE_ABI_NAME_PREFIX "Compiler")
1386-
1387-
file(TO_CMAKE_PATH "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}" swift_syntax_path)
1388-
FetchContent_Declare(SwiftSyntax
1389-
SOURCE_DIR "${swift_syntax_path}"
1390-
)
1391-
FetchContent_MakeAvailable(SwiftSyntax)
1392-
endfunction()
1393-
include_swift_syntax()
1394-
13951362
add_subdirectory(lib)
13961363

13971364
add_subdirectory(SwiftCompilerSources)

lib/CMakeLists.txt

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -12,70 +12,6 @@
1212
# directory.
1313
list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen clang-tablegen-targets)
1414

15-
# Set up for linking against swift-syntax.
16-
if (SWIFT_BUILD_SWIFT_SYNTAX)
17-
set(SWIFT_SYNTAX_MODULES
18-
SwiftBasicFormat
19-
SwiftParser
20-
SwiftParserDiagnostics
21-
SwiftDiagnostics
22-
SwiftSyntax
23-
SwiftOperators
24-
SwiftSyntaxBuilder
25-
SwiftSyntaxMacros
26-
SwiftSyntaxMacroExpansion
27-
SwiftCompilerPluginMessageHandling
28-
# Support for LSP
29-
SwiftIDEUtils
30-
)
31-
32-
# Install shared runtime libraries
33-
if(CMAKE_SYSTEM_NAME MATCHES Windows)
34-
swift_install_in_component(TARGETS ${SWIFT_SYNTAX_MODULES}
35-
RUNTIME
36-
DESTINATION "bin"
37-
COMPONENT swift-syntax-lib)
38-
else()
39-
swift_install_in_component(TARGETS ${SWIFT_SYNTAX_MODULES}
40-
LIBRARY
41-
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host"
42-
COMPONENT swift-syntax-lib)
43-
endif()
44-
45-
# Install import libraries in Windows.
46-
if(CMAKE_SYSTEM_NAME MATCHES Windows)
47-
list(TRANSFORM SWIFT_SYNTAX_MODULES
48-
PREPEND "${CMAKE_IMPORT_LIBRARY_PREFIX}"
49-
OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES)
50-
list(TRANSFORM SWIFT_SYNTAX_IMPORT_LIBRARIES
51-
APPEND "${CMAKE_IMPORT_LIBRARY_SUFFIX}"
52-
OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES)
53-
list(TRANSFORM SWIFT_SYNTAX_IMPORT_LIBRARIES
54-
PREPEND "${SWIFT_HOST_LIBRARIES_DEST_DIR}/"
55-
OUTPUT_VARIABLE SWIFT_SYNTAX_IMPORT_LIBRARIES)
56-
swift_install_in_component(PROGRAMS "${SWIFT_SYNTAX_IMPORT_LIBRARIES}"
57-
DESTINATION lib
58-
COMPONENT swift-syntax-lib)
59-
endif()
60-
61-
add_dependencies(swift-syntax-lib
62-
${SWIFT_SYNTAX_MODULES})
63-
64-
# Install Swift module interface files.
65-
foreach(module ${SWIFT_SYNTAX_MODULES})
66-
set(module_dir "${module}.swiftmodule")
67-
set(module_file "${SWIFT_HOST_LIBRARIES_DEST_DIR}/${module_dir}/${SWIFT_HOST_MODULE_TRIPLE}")
68-
swift_install_in_component(FILES "${module_file}.swiftinterface" "${module_file}.private.swiftinterface"
69-
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host/${module_dir}"
70-
COMPONENT swift-syntax-lib)
71-
endforeach()
72-
73-
export(TARGETS ${SWIFT_SYNTAX_MODULES}
74-
NAMESPACE SwiftSyntax::
75-
FILE ${CMAKE_BINARY_DIR}/cmake/modules/SwiftSyntaxConfig.cmake
76-
EXPORT_LINK_INTERFACE_LIBRARIES)
77-
endif()
78-
7915
# Create a library that depends on all tool headers defined in include/module.modulemap
8016
#
8117
# TODO: generate this dynamically through the modulemap; this cannot use `sed`
@@ -136,4 +72,5 @@ add_subdirectory(SILGen)
13672
add_subdirectory(SILOptimizer)
13773
add_subdirectory(StaticMirror)
13874
add_subdirectory(SymbolGraphGen)
75+
add_subdirectory(SwiftSyntax)
13976
add_subdirectory(Threading)

lib/SwiftSyntax/CMakeLists.txt

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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

Comments
 (0)