Skip to content

Commit 4fc8e6e

Browse files
committed
build: enable vendoring dependencies
Setup the support for building SPM with vendored dependencies. This is preparatory work to enable the build of the LSP which is not possible to build with SPM on Windows and thus prevented from being able to be built and debugged outside of the toolchain build.
1 parent 02f047a commit 4fc8e6e

File tree

1 file changed

+118
-18
lines changed

1 file changed

+118
-18
lines changed

CMakeLists.txt

Lines changed: 118 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
# See http://swift.org/LICENSE.txt for license information
77
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
88

9+
cmake_minimum_required(VERSION 3.19)
10+
11+
if(POLICY CMP0077)
12+
cmake_policy(SET CMP0077 NEW)
13+
endif()
14+
915
if(POLICY CMP0091)
1016
cmake_policy(SET CMP0091 NEW)
1117
endif()
1218

13-
cmake_minimum_required(VERSION 3.19)
14-
15-
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
16-
1719
project(SwiftPM LANGUAGES C Swift)
1820

1921
option(BUILD_SHARED_LIBS "Build shared libraries by default" YES)
20-
option(FIND_PM_DEPS "Search for all external Package Manager dependencies" YES)
2122

2223
set(CMAKE_Swift_LANGUAGE_VERSION 5)
2324
set(CMAKE_Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift)
@@ -27,32 +28,131 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
2728
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
2829
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
2930

31+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
3032
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
3133
set(CMAKE_POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS})
3234

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()
3665

37-
find_package(LLBuild CONFIG)
38-
if(NOT LLBuild_FOUND)
66+
find_package(LLBuild CONFIG)
67+
if(NOT LLBuild_FOUND)
68+
if(APPLE)
3969
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)
4077
endif()
78+
endif()
4179

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()
48147
endif()
49148

50-
find_package(dispatch QUIET)
51-
find_package(Foundation QUIET)
52149
find_package(SQLite3 REQUIRED)
53150

54151
# Enable `package` modifier for the whole package.
55152
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:-package-name;SwiftPM>")
56153

154+
set(BUILD_TESTING ${_SPM_SAVED_BUILD_TESTING})
155+
set(BUILD_EXAMPLES ${_SPM_SAVED_BUILD_EXAMPLES})
156+
57157
add_subdirectory(Sources)
58158
add_subdirectory(cmake/modules)

0 commit comments

Comments
 (0)