Skip to content

Commit 668e3cd

Browse files
committed
build: initial support for building with CMake
Add support for building with CMake which is required to get the toolchain bootstrapped. This partially addresses #7.
1 parent 74bc85d commit 668e3cd

File tree

20 files changed

+732
-0
lines changed

20 files changed

+732
-0
lines changed

CMakeLists.txt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
cmake_minimum_required(VERSION 3.26...3.29)
2+
project(SwiftBuild
3+
LANGUAGES C CXX Swift)
4+
5+
set(CMAKE_C_VISIBILITY hidden)
6+
set(CMAKE_CXX_VISIBILITY hidden)
7+
set(CMAKE_CXX_STANDARD 17)
8+
set(CMAKE_CXX_STANDARD_REQUIRED YES)
9+
set(CMAKE_CXX_EXTENSIONS NO)
10+
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
11+
12+
option(SwiftBuild_USE_LLBUILD_FRAMEWORK "Use LLBuild Framework" NO)
13+
14+
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:SHELL:-package-name SwiftBuild>"
15+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature ConciseMagicFile>"
16+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature DeprecateApplicationMain>"
17+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature DisableOutwardActorInference>"
18+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature ForwardTrailingClosures>"
19+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature GlobalConcurrency>"
20+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature ImplicitOpenExistentials>"
21+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature ImplicitOpenExistentialsImportObjcForwardDeclarations>"
22+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature InferSendableFromCaptures>"
23+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature IsolatedDefaultValues>"
24+
# rdar://127809703
25+
# "$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature RegionBasedIsolation>"
26+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature ExistentialAny>"
27+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-upcoming-feature InternalImportsByDefault>")
28+
29+
find_package(ArgumentParser)
30+
find_package(LLBuild)
31+
find_package(SwiftDriver)
32+
find_package(SwiftSystem)
33+
find_package(TSC)
34+
# NOTE: these two are required for LLBuild dependencies
35+
find_package(Threads)
36+
find_package(SQLite3)
37+
38+
add_subdirectory(Sources/SWBMacro)
39+
add_subdirectory(Sources/SWBCore)
40+
add_subdirectory(Sources/SWBServiceCore)
41+
add_subdirectory(Sources/SWBBuildSystem)
42+
add_subdirectory(Sources/SWBTaskExecution)
43+
add_subdirectory(Sources/SWBBuildService)
44+
add_subdirectory(Sources/SWBCAS)
45+
add_subdirectory(Sources/SWBCSupport)
46+
add_subdirectory(Sources/SWBCLibc)
47+
add_subdirectory(Sources/SWBLibc)
48+
add_subdirectory(Sources/SWBLLBuild)
49+
add_subdirectory(Sources/SWBProjectModel)
50+
add_subdirectory(Sources/SWBProtocol)
51+
add_subdirectory(Sources/SWBTaskConstruction)
52+
add_subdirectory(Sources/SWBUtil)
53+
add_subdirectory(Sources/SwiftBuild)
54+
55+
add_subdirectory(Sources/swbuild)
56+
add_subdirectory(Sources/SWBBuildServiceBundle)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
add_library(SWBBuildService
3+
BuildDependencyInfo.swift
4+
BuildOperationMessages.swift
5+
BuildService.swift
6+
BuildServiceEntryPoint.swift
7+
ClientExchangeDelegate.swift
8+
DependencyGraphMessages.swift
9+
DocumentationInfo.swift
10+
LocalizationInfo.swift
11+
Messages.swift
12+
PlanningOperation.swift
13+
PreviewInfo.swift
14+
ProjectDescriptor.swift
15+
Session.swift
16+
Tools.swift)
17+
set_target_properties(SWBBuildService PROPERTIES
18+
Swift_LANGUAGE_VERSION 5)
19+
target_link_libraries(SWBBuildService PUBLIC
20+
SWBBuildSystem
21+
SWBServiceCore
22+
SWBTaskExecution
23+
SwiftSystem::SystemPackage)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
add_executable(SWBBuildServiceBundle
3+
main.swift)
4+
set_target_properties(SWBBuildServiceBundle PROPERTIES
5+
Swift_LANGUAGE_VERSION 6)
6+
target_link_libraries(SWBBuildServiceBundle PRIVATE
7+
SWBBuildService
8+
SWBBuildSystem
9+
SWBServiceCore
10+
SWBUtil
11+
SWBCore)

Sources/SWBBuildSystem/CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
add_library(SWBBuildSystem
3+
BuildManager.swift
4+
BuildOperation.swift
5+
BuildOperationExtension.swift
6+
BuildSystemCache.swift
7+
CleanOperation.swift
8+
DependencyCycleFormatter.swift
9+
SandboxViolations.swift)
10+
set_target_properties(SWBBuildSystem PROPERTIES
11+
Swift_LANGUAGE_VERSION 5)
12+
target_link_libraries(SWBBuildSystem PUBLIC
13+
SWBCore
14+
SWBTaskConstruction
15+
SWBTaskExecution)

Sources/SWBCAS/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
add_library(SWBCAS
3+
CASFSNode.swift
4+
CASProtocol.swift
5+
Errors.swift
6+
plugin_api_t.swift
7+
ToolchainCASPlugin.swift)
8+
set_target_properties(SWBCAS PROPERTIES
9+
Swift_LANGUAGE_VERSION 6)
10+
target_link_libraries(SWBCAS PUBLIC
11+
SWBUtil
12+
SWBCSupport)

Sources/SWBCLibc/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
add_library(SWBCLibc
3+
libc.c)
4+
target_include_directories(SWBCLibc INTERFACE
5+
include)

Sources/SWBCSupport/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
add_library(SWBCSupport STATIC
3+
CLibclang.cpp
4+
CLibRemarksHelper.c)
5+
target_compile_definitions(SWBCSupport PRIVATE
6+
$<$<PLATFORM_ID:Windows>:_CRT_SECURE_NO_WARNINGS>
7+
$<$<PLATFORM_ID:Windows>:_CRT_NONSTDC_NO_WARNINGS>)
8+
target_compile_options(SWBCSupport PRIVATE
9+
-fblocks)
10+
target_include_directories(SWBCSupport PUBLIC
11+
${CMAKE_CURRENT_SOURCE_DIR})
12+
# TODO(compnerd) wire this up with `find_package`
13+
target_link_libraries(SWBCSupport PRIVATE
14+
BlocksRuntime)

Sources/SWBCSupport/module.modulemap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module SWBCSupport {
2+
header "SWBCSupport.h"
3+
export *
4+
}

Sources/SWBCore/CMakeLists.txt

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
2+
add_library(SWBCore
3+
ActivityReporting.swift
4+
Apple/DeviceFamily.swift
5+
Apple/InterfaceBuilderShared.swift
6+
BuildFileFilteringContext.swift
7+
BuildFileResolution.swift
8+
BuildParameters.swift
9+
BuildRequest.swift
10+
BuildRequestContext.swift
11+
BuildRuleAction.swift
12+
BuildRuleCondition.swift
13+
BuildRuleSet.swift
14+
CapturedBuildInfo.swift
15+
ClangModuleVerifier/ModuleVerifierFilenameMap.swift
16+
ClangModuleVerifier/ModuleVerifierFramework.swift
17+
ClangModuleVerifier/ModuleVerifierHeader.swift
18+
ClangModuleVerifier/ModuleVerifierLanguage.swift
19+
ClangModuleVerifier/ModuleVerifierModuleMap.swift
20+
ClangModuleVerifier/ModuleVerifierModuleMapFileVerifier.swift
21+
ClangModuleVerifier/ModuleVerifierTarget.swift
22+
ClangModuleVerifierOutputParser.swift
23+
ClangSerializedDiagnostics.swift
24+
CommandLineArgument.swift
25+
ConfiguredTarget.swift
26+
Core.swift
27+
CustomTaskTypeDescription.swift
28+
DependencyInfoEditPayload.swift
29+
DependencyResolution.swift
30+
DiagnosticSupport.swift
31+
EnvironmentBindings.swift
32+
ExecutableTask.swift
33+
Extensions/DiagnosticToolingExtension.swift
34+
Extensions/EnvironmentExtension.swift
35+
Extensions/FeatureAvailabilityExtension.swift
36+
Extensions/InputFileGroupingStrategyExtension.swift
37+
Extensions/PlatformInfoExtension.swift
38+
Extensions/SDKRegistryExtension.swift
39+
Extensions/SDKVariantInfoExtension.swift
40+
Extensions/SettingsBuilderExtension.swift
41+
Extensions/SpecificationsExtension.swift
42+
Extensions/ToolchainRegistryExtension.swift
43+
FileSystemSignatureBasedCache.swift
44+
FileToBuild.swift
45+
KnownFolders.swift
46+
LibclangVendored/ArrayExtensions.swift
47+
LibclangVendored/CStringArray.swift
48+
LibclangVendored/Libclang.swift
49+
LibSwiftDriver/LibSwiftDriver.swift
50+
LibSwiftDriver/PlannedBuild.swift
51+
LinkageDependencyResolver.swift
52+
MacCatalystInfo.swift
53+
MacroConfigFileLoader.swift
54+
MacroEvaluationExtensions.swift
55+
MacroExpressionSourceExtensions.swift
56+
MissingFrameworkDiagnostics.swift
57+
OnDemandResources.swift
58+
OptimizationRemarks.swift
59+
PlannedNode.swift
60+
PlannedTask.swift
61+
PlannedTaskAction.swift
62+
PlatformEnvironment.swift
63+
PlatformFiltering.swift
64+
PlatformRegistry.swift
65+
Process.swift
66+
ProcessExecutionCache.swift
67+
ProductTypeIdentifier.swift
68+
ProjectModel/BuildConfiguration.swift
69+
ProjectModel/BuildFile.swift
70+
ProjectModel/BuildPhase.swift
71+
ProjectModel/BuildRule.swift
72+
ProjectModel/DependencyInfoFormat.swift
73+
ProjectModel/FilePathResolver.swift
74+
ProjectModel/FileTextEncoding.swift
75+
ProjectModel/ImpartedBuildProperties.swift
76+
ProjectModel/PIFLoader.swift
77+
ProjectModel/PlatformFilter.swift
78+
ProjectModel/Project.swift
79+
ProjectModel/ProjectModelItem.swift
80+
ProjectModel/Reference.swift
81+
ProjectModel/ReferenceLookupContext.swift
82+
ProjectModel/Target.swift
83+
ProjectModel/Workspace.swift
84+
ProjectModel/WorkspaceHeaderIndex.swift
85+
ProvisionalTask.swift
86+
Provisioning.swift
87+
ProvisioningTaskInputs.swift
88+
SDKRegistry.swift
89+
Settings/BuildRuleFile.swift
90+
Settings/BuiltinMacros.swift
91+
Settings/CASOptions.swift
92+
Settings/RecursiveSearchPathResolver.swift
93+
Settings/Settings.swift
94+
Settings/StackedSearchPaths.swift
95+
ShellScript.swift
96+
SigningSupport.swift
97+
Specs/CommandLineToolSpec.swift
98+
Specs/CompilerSpec.swift
99+
Specs/CoreBuildSystem.xcspec
100+
Specs/ExternalBuildSystem.xcspec
101+
Specs/FileTypes.swift
102+
Specs/LinkerSpec.swift
103+
Specs/NativeBuildSystem.xcspec
104+
Specs/ProductTypes.swift
105+
Specs/PropertyDomainSpec.swift
106+
Specs/RegisterSpecs.swift
107+
Specs/SpecParser.swift
108+
Specs/SpecRegistry.swift
109+
Specs/Specs.swift
110+
Specs/Tools/AppIntentsMetadataCompiler.swift
111+
Specs/Tools/AppIntentsSSUTrainingCompiler.swift
112+
Specs/Tools/AppShortcutStringsMetadataCompiler.swift
113+
Specs/Tools/CCompiler.swift
114+
Specs/Tools/ClangModuleVerifierInputGenerator.swift
115+
Specs/Tools/ClangStatCache.swift
116+
Specs/Tools/CodeSign.swift
117+
Specs/Tools/ConcatenateTool.swift
118+
Specs/Tools/ConstructStubExecutorFileListTool.swift
119+
Specs/Tools/CopyTool.swift
120+
Specs/Tools/CreateAssetPackManifestTool.swift
121+
Specs/Tools/CreateBuildDirectory.swift
122+
Specs/Tools/DocumentationCompiler.swift
123+
Specs/Tools/DsymutilTool.swift
124+
Specs/Tools/Gate.swift
125+
Specs/Tools/GCCCompatibleCompilerSupport.swift
126+
Specs/Tools/GenerateAppPlaygroundAssetCatalog.swift
127+
Specs/Tools/InfoPlistTool.swift
128+
Specs/Tools/LaunchServicesRegisterTool.swift
129+
Specs/Tools/LinkerTools.swift
130+
Specs/Tools/Lipo.swift
131+
Specs/Tools/MasterObjectLink.swift
132+
Specs/Tools/MergeInfoPlist.swift
133+
Specs/Tools/MkdirTool.swift
134+
Specs/Tools/ModulesVerifierTool.swift
135+
Specs/Tools/PLUtilTool.swift
136+
Specs/Tools/ProcessXCFrameworkLibrary.swift
137+
Specs/Tools/ProductPackaging.swift
138+
Specs/Tools/RegisterExecutionPolicyException.swift
139+
Specs/Tools/SetAttributes.swift
140+
Specs/Tools/ShellScriptTool.swift
141+
Specs/Tools/SignatureCollection.swift
142+
Specs/Tools/StripTool.swift
143+
Specs/Tools/SwiftABICheckerTool.swift
144+
Specs/Tools/SwiftABIGenerationTool.swift
145+
Specs/Tools/SwiftCompiler.swift
146+
Specs/Tools/SwiftHeaderTool.swift
147+
Specs/Tools/SwiftStdLibTool.swift
148+
Specs/Tools/SwiftSymbolExtractor.swift
149+
Specs/Tools/SymlinkTool.swift
150+
Specs/Tools/TAPISymbolExtractor.swift
151+
Specs/Tools/TAPITools.swift
152+
Specs/Tools/TiffUtilTool.swift
153+
Specs/Tools/TouchTool.swift
154+
Specs/Tools/UnifdefTool.swift
155+
Specs/Tools/ValidateDevelopmentAssets.swift
156+
Specs/Tools/ValidateEmbeddedBinaryTool.swift
157+
Specs/Tools/ValidateProductTool.swift
158+
Specs/Tools/WriteFile.swift
159+
SWBFeatureFlag.swift
160+
TargetDependencyResolver.swift
161+
TargetPlatformDiagnostics.swift
162+
TaskGeneration.swift
163+
TaskResult.swift
164+
ToolchainRegistry.swift
165+
ToolInfo/ClangToolInfo.swift
166+
Tuning.swift
167+
WorkspaceContext.swift
168+
WorkspaceSettingsCache.swift
169+
XCFramework.swift)
170+
set_target_properties(SWBCore PROPERTIES
171+
Swift_LANGUAGE_VERSION 5)
172+
target_link_libraries(SWBCore PUBLIC
173+
SWBMacro
174+
SWBProtocol
175+
SWBServiceCore
176+
SWBUtil
177+
SWBCAS
178+
SWBLLBuild
179+
SwiftDriver)

Sources/SWBLLBuild/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
add_library(SWBLLBuild
3+
LowLevelBuildSystem.swift)
4+
set_target_properties(SWBLLBuild PROPERTIES
5+
Swift_LANGUAGE_VERSION 6)
6+
target_link_libraries(SWBLLBuild PUBLIC
7+
SWBUtil
8+
$<$<NOT:$<BOOL:${SwiftBuild_USE_LLBUILD_FRAMEWORK}>>:libllbuild>
9+
$<$<NOT:$<BOOL:${SwiftBuild_USE_LLBUILD_FRAMEWORK}>>:llbuildSwift>)

Sources/SWBLibc/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
add_library(SWBLibc
3+
libc.swift)
4+
set_target_properties(SWBLibc PROPERTIES
5+
Swift_LANGUAGE_VERSION 6)
6+
target_link_libraries(SWBLibc PUBLIC
7+
SWBCLibc)
8+
9+
# FIXME: why is this needed? We should be wiring up the Swift_MODULE_DIRECTORY
10+
# without this explicit configuration.
11+
target_include_directories(SWBLibc PUBLIC
12+
${CMAKE_CURRENT_BINARY_DIR})

Sources/SWBMacro/CMakeLists.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
add_library(SWBMacro
3+
MacroCondition.swift
4+
MacroConditionExpression.swift
5+
MacroConditionParameter.swift
6+
MacroConditionSet.swift
7+
MacroConfigFileDiagnostic.swift
8+
MacroConfigFileParser.swift
9+
MacroDeclaration.swift
10+
MacroEvaluationProgram.swift
11+
MacroEvaluationScope.swift
12+
MacroExpression.swift
13+
MacroExpressionDiagnostic.swift
14+
MacroExpressionParsing.swift
15+
MacroNamespace.swift
16+
MacroType.swift
17+
MacroValueAssignmentTable.swift)
18+
set_target_properties(SWBMacro PROPERTIES
19+
Swift_LANGUAGE_VERSION 6)
20+
target_link_libraries(SWBMacro PUBLIC
21+
SWBUtil
22+
SwiftDriver
23+
TSCBasic)
24+
25+
target_include_directories(SWBMacro PUBLIC
26+
${CMAKE_CURRENT_BINARY_DIR})
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
add_library(SWBProjectModel
3+
IDE/IDEPIFGenerating.swift
4+
IDE/IDEPIFGUID.swift
5+
IDE/IDEPIFObject.swift
6+
IDE/IDEPIFObjectInfo.swift
7+
IDE/IDEPIFSerializer.swift
8+
IDE/IDESwiftPackageExtensions.swift
9+
PIFGenerationModel.swift)
10+
set_target_properties(SWBProjectModel PROPERTIES
11+
Swift_LANGUAGE_VERSION 6)
12+
target_link_libraries(SWBProjectModel PUBLIC
13+
SWBProtocol)

0 commit comments

Comments
 (0)