6
6
# See http://swift.org/LICENSE.txt for license information
7
7
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
8
8
9
+ cmake_minimum_required (VERSION 3.19 )
10
+
11
+ if (POLICY CMP0077 )
12
+ cmake_policy (SET CMP0077 NEW )
13
+ endif ()
14
+
9
15
if (POLICY CMP0091 )
10
16
cmake_policy (SET CMP0091 NEW )
11
17
endif ()
12
18
13
- cmake_minimum_required (VERSION 3.19 )
14
-
15
- list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake/modules )
16
-
17
19
project (SwiftPM LANGUAGES C Swift )
18
20
19
21
option (BUILD_SHARED_LIBS "Build shared libraries by default" YES )
20
- option (FIND_PM_DEPS "Search for all external Package Manager dependencies" YES )
21
22
22
23
set (CMAKE_Swift_LANGUAGE_VERSION 5 )
23
24
set (CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR} /swift )
@@ -27,32 +28,131 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
27
28
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /lib )
28
29
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin )
29
30
31
+ list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake/modules )
30
32
set (CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL )
31
33
set (CMAKE_POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} )
32
34
33
- if (FIND_PM_DEPS )
34
- find_package (SwiftSystem CONFIG REQUIRED )
35
- find_package (TSC CONFIG REQUIRED )
35
+ # Toolchain Vended dependencies
36
+ find_package (dispatch QUIET )
37
+ find_package (Foundation QUIET )
38
+
39
+ include (FetchContent )
40
+
41
+ set (_SPM_SAVED_BUILD_TESTING ${BUILD_TESTING} )
42
+ set (_SPM_SAVED_BUILD_EXAMPLES ${BUILD_EXAMPLES} )
43
+ set (_SPM_VENDOR_DEPENDENCIES )
44
+
45
+ set (BUILD_EXAMPLES NO )
46
+ set (BUILD_TESTING NO )
47
+
48
+ find_package (ArgumentParser CONFIG )
49
+ if (NOT ArgumentParser_FOUND )
50
+ message (STATUS "Vending swift-argument-parser" )
51
+ FetchContent_Declare (ArgumentParser
52
+ GIT_REPOSITORY https://github.com/apple/swift-argument-parser
53
+ GIT_TAG 1.2.3 )
54
+ list (APPEND _SPM_VENDOR_DEPENDENCIES ArgumentParser )
55
+ endif ()
56
+
57
+ find_package (TSC CONFIG )
58
+ if (NOT TSC_FOUND )
59
+ message (STATUS "Vending swift-tools-support-core" )
60
+ FetchContent_Declare (ToolsSupportCore
61
+ GIT_REPOSITORY https://github.com/apple/swift-tools-support-core
62
+ GIT_TAG main )
63
+ list (APPEND _SPM_VENDOR_DEPENDENCIES ToolsSupportCore )
64
+ endif ()
36
65
37
- find_package (LLBuild CONFIG )
38
- if (NOT LLBuild_FOUND )
66
+ find_package (LLBuild CONFIG )
67
+ if (NOT LLBuild_FOUND )
68
+ if (APPLE )
39
69
find_package (LLBuild REQUIRED )
70
+ else ()
71
+ message (STATUS "Vending swift-llbuild" )
72
+ set (LLBUILD_SUPPORT_BINDINGS Swift )
73
+ FetchContent_Declare (LLBuild
74
+ GIT_REPOSITORY https://github.com/apple/swift-llbuild
75
+ GIT_TAG main )
76
+ list (APPEND _SPM_VENDOR_DEPENDENCIES LLBuild )
40
77
endif ()
78
+ endif ()
41
79
42
- find_package (ArgumentParser CONFIG REQUIRED )
43
- find_package (SwiftDriver CONFIG REQUIRED )
44
- find_package (SwiftCollections CONFIG REQUIRED )
45
- find_package (SwiftASN1 CONFIG REQUIRED )
46
- find_package (SwiftCertificates CONFIG REQUIRED )
47
- find_package (SwiftCrypto CONFIG REQUIRED )
80
+ find_package (SwiftASN1 CONFIG )
81
+ if (NOT SwiftASN1_FOUND )
82
+ message (STATUS "Vending swift-asn1" )
83
+ FetchContent_Declare (ASN1
84
+ GIT_REPOSITORY https://github.com/apple/swift-asn1
85
+ GIT_TAG 1.1.0 )
86
+ list (APPEND _SPM_VENDOR_DEPENDENCIES ASN1 )
87
+ endif ()
88
+
89
+ find_package (SwiftCertificates CONFIG )
90
+ if (NOT SwiftCertificates_FOUND )
91
+ message (STATUS "Vending swift-certificates" )
92
+ FetchContent_Declare (Certificates
93
+ GIT_REPOSITORY https://github.com/apple/swift-certificates
94
+ GIT_TAG main )
95
+ list (APPEND _SPM_VENDOR_DEPENDENCIES Certificates )
96
+ endif ()
97
+
98
+ find_package (SwiftCollections CONFIG )
99
+ if (NOT SwiftCollections_FOUND )
100
+ message (STATUS "Vending swift-collections" )
101
+ FetchContent_Declare (Collections
102
+ GIT_REPOSITORY https://github.com/apple/swift-collections
103
+ GIT_TAG release/1.0 )
104
+ list (APPEND _SPM_VENDOR_DEPENDENCIES Collections )
105
+ endif ()
106
+
107
+ find_package (SwiftCrypto CONFIG )
108
+ if (NOT SwiftCrypto_FOUND )
109
+ message (STATUS "Vending swift-crypto" )
110
+ FetchContent_Declare (Crypto
111
+ GIT_REPOSITORY https://github.com/apple/swift-crypto
112
+ GIT_TAG 3.0.0 )
113
+ list (APPEND _SPM_VENDOR_DEPENDENCIES Crypto )
114
+ endif ()
115
+
116
+ find_package (SwiftDriver CONFIG )
117
+ if (NOT SwiftDriver_FOUND )
118
+ message (STATUS "Vending swift-driver" )
119
+ FetchContent_Declare (Driver
120
+ GIT_REPOSITORY https://github.com/apple/swift-driver
121
+ GIT_TAG main )
122
+ list (APPEND _SPM_VENDOR_DEPENDENCIES Driver )
123
+ endif ()
124
+
125
+ find_package (SwiftSystem CONFIG )
126
+ if (NOT SwiftSystem_FOUND )
127
+ message (STATUS "Vending swift-system" )
128
+ FetchContent_Declare (System
129
+ GIT_REPOSITORY https://github.com/apple/swift-system
130
+ GIT_TAG 1.1.1 )
131
+ list (APPEND _SPM_VENDOR_DEPENDENCIES System )
132
+ endif ()
133
+
134
+ if (_SPM_VENDOR_DEPENDENCIES )
135
+ FetchContent_MakeAvailable (${_SPM_VENDOR_DEPENDENCIES} )
136
+
137
+ if (NOT TARGET SwiftCollections::DequeModule )
138
+ add_library (SwiftCollections::DequeModule ALIAS DequeModule )
139
+ endif ()
140
+ if (NOT TARGET SwiftCollections::OrderedCollections )
141
+ add_library (SwiftCollections::OrderedCollections ALIAS OrderedCollections )
142
+ endif ()
143
+
144
+ if (NOT TARGET SwiftSystem::SystemPackage )
145
+ add_library (SwiftSystem::SystemPackage ALIAS SystemPackage )
146
+ endif ()
48
147
endif ()
49
148
50
- find_package (dispatch QUIET )
51
- find_package (Foundation QUIET )
52
149
find_package (SQLite3 REQUIRED )
53
150
54
151
# Enable `package` modifier for the whole package.
55
152
add_compile_options ("$<$<COMPILE_LANGUAGE:Swift>:-package-name;SwiftPM>" )
56
153
154
+ set (BUILD_TESTING ${_SPM_SAVED_BUILD_TESTING} )
155
+ set (BUILD_EXAMPLES ${_SPM_SAVED_BUILD_EXAMPLES} )
156
+
57
157
add_subdirectory (Sources )
58
158
add_subdirectory (cmake/modules )
0 commit comments