-
Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathCMakeLists.txt
170 lines (151 loc) · 6.15 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# In the absence of fine grained tablegen dependencies we need to ensure that
# Swift's libraries all build after the LLVM & Clang tablegen-generated headers
# are generated. When building out-of-tree (as with build-script) LLVM & Clang's
# CMake configuration files create these targets as dummies so we can safely
# depend on them directly here.
# See https://github.com/apple/swift/issues/48583.
#
# LLVM_COMMON_DEPENDS is a construct from the LLVM build system. It is a special
# purpose variable that provides common dependencies for all libraries, and
# executables generated when it is set. CMake's scoping rules enforce that these
# new dependencies will only be added to targets created under Swift's lib
# directory.
list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen clang-tablegen-targets)
# Set up for linking against swift-syntax.
if (SWIFT_SWIFT_PARSER)
# Set up linking against the swift-syntax modules.
# Link against the swift-syntax modules.
set(SWIFT_SYNTAX_MODULES
SwiftBasicFormat
SwiftParser
SwiftParserDiagnostics
SwiftDiagnostics
SwiftSyntax
SwiftOperators
SwiftSyntaxBuilder
SwiftSyntaxMacros
SwiftSyntaxMacroExpansion
SwiftCompilerPluginMessageHandling
)
# Compute the list of SwiftSyntax targets that we will link against.
list(TRANSFORM SWIFT_SYNTAX_MODULES PREPEND "SwiftSyntax::"
OUTPUT_VARIABLE SWIFT_SYNTAX_TARGETS)
set(SWIFT_SYNTAX_LIBRARIES_BUILD_DIR
"${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/lib/swift/host")
set(SWIFT_HOST_LIBRARIES_DEST_DIR
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/swift/host")
# Determine the SwiftSyntax shared library files that were built as
# part of earlyswiftsyntax.
list(TRANSFORM SWIFT_SYNTAX_MODULES PREPEND "${CMAKE_SHARED_LIBRARY_PREFIX}"
OUTPUT_VARIABLE SWIFT_SYNTAX_SHARED_LIBRARIES)
list(TRANSFORM SWIFT_SYNTAX_SHARED_LIBRARIES APPEND
"${CMAKE_SHARED_LIBRARY_SUFFIX}"
OUTPUT_VARIABLE SWIFT_SYNTAX_SHARED_LIBRARIES)
# Interface library to collect swiftinterfaces and swiftmodules from
# SwiftSyntax
add_library(swiftSyntaxLibraries INTERFACE)
# Copy over all of the shared libraries from earlyswiftsyntax so they can
# be found via RPATH.
foreach (sharedlib ${SWIFT_SYNTAX_SHARED_LIBRARIES})
set(add_origin_rpath)
if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD")
# At runtime, use swiftCore in the current toolchain.
swift_get_set_rpath_script_file(setrpath_command)
set(add_origin_rpath COMMAND ${CMAKE_COMMAND}
"-DSWIFT_SET_RPATH_FILE=${SWIFT_HOST_LIBRARIES_DEST_DIR}/${sharedlib}"
"-DSWIFT_SET_RPATH_NEW_RPATH='$$ORIGIN:$$ORIGIN/../${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}'"
-P "${setrpath_command}"
)
endif()
add_custom_command(
OUTPUT "${SWIFT_HOST_LIBRARIES_DEST_DIR}/${sharedlib}"
DEPENDS "${SWIFT_SYNTAX_LIBRARIES_BUILD_DIR}/${sharedlib}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SWIFT_SYNTAX_LIBRARIES_BUILD_DIR}/${sharedlib} ${SWIFT_HOST_LIBRARIES_DEST_DIR}/${sharedlib}
${add_origin_rpath}
)
add_custom_target(copy_swiftSyntaxLibrary_${sharedlib}
DEPENDS "${SWIFT_HOST_LIBRARIES_DEST_DIR}/${sharedlib}"
COMMENT "Copying ${sharedlib}"
)
swift_install_in_component(
PROGRAMS "${SWIFT_HOST_LIBRARIES_DEST_DIR}/${sharedlib}"
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host"
COMPONENT compiler
)
add_dependencies(swiftSyntaxLibraries copy_swiftSyntaxLibrary_${sharedlib})
endforeach()
# Copy all of the Swift modules from earlyswiftsyntax so they can be found
# in the same relative place within the build directory as in the final
# toolchain.
list(TRANSFORM SWIFT_SYNTAX_MODULES APPEND ".swiftmodule"
OUTPUT_VARIABLE SWIFT_SYNTAX_MODULE_DIRS)
foreach(module_dir ${SWIFT_SYNTAX_MODULE_DIRS})
# Find all of the source module files.
file(GLOB module_files
"${SWIFT_SYNTAX_LIBRARIES_BUILD_DIR}/${module_dir}/*.swiftinterface")
# Determine the destination module files.
set(dest_module_files)
foreach(full_module_file ${module_files})
get_filename_component(module_file ${full_module_file} NAME)
list(APPEND dest_module_files
"${SWIFT_HOST_LIBRARIES_DEST_DIR}/${module_dir}/${module_file}")
endforeach()
add_custom_command(
OUTPUT ${dest_module_files}
DEPENDS ${module_files}
COMMAND ${CMAKE_COMMAND} -E make_directory ${SWIFT_HOST_LIBRARIES_DEST_DIR}/${module_dir}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${module_files} ${SWIFT_HOST_LIBRARIES_DEST_DIR}/${module_dir}/
)
add_custom_target(copy_swiftSyntaxModule_${module_dir}
DEPENDS ${dest_module_files}
COMMENT "Copying ${module_dir}"
)
swift_install_in_component(
FILES ${dest_module_files}
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift/host/${module_dir}"
COMPONENT compiler
)
add_dependencies(swiftSyntaxLibraries copy_swiftSyntaxModule_${module_dir})
endforeach()
# Add copied SwiftSyntax libraries to global dependencies.
list(APPEND LLVM_COMMON_DEPENDS swiftSyntaxLibraries)
endif()
add_subdirectory(APIDigester)
add_subdirectory(AST)
add_subdirectory(ASTGen)
add_subdirectory(ASTSectionImporter)
add_subdirectory(Basic)
add_subdirectory(ConstExtract)
add_subdirectory(ClangImporter)
add_subdirectory(Demangling)
add_subdirectory(DependencyScan)
add_subdirectory(Driver)
add_subdirectory(DriverTool)
add_subdirectory(Frontend)
add_subdirectory(FrontendTool)
add_subdirectory(Index)
add_subdirectory(IDE)
add_subdirectory(IDETool)
add_subdirectory(Immediate)
add_subdirectory(IRGen)
add_subdirectory(LLVMPasses)
add_subdirectory(Localization)
add_subdirectory(Macros)
add_subdirectory(Markup)
add_subdirectory(Migrator)
add_subdirectory(Option)
add_subdirectory(Parse)
add_subdirectory(PrintAsClang)
add_subdirectory(Refactoring)
add_subdirectory(RemoteAST)
add_subdirectory(Sema)
add_subdirectory(Serialization)
add_subdirectory(SwiftDemangle)
add_subdirectory(SwiftRemoteInspection)
add_subdirectory(SwiftRemoteMirror)
add_subdirectory(SIL)
add_subdirectory(SILGen)
add_subdirectory(SILOptimizer)
add_subdirectory(StaticMirror)
add_subdirectory(SymbolGraphGen)
add_subdirectory(Threading)