Skip to content

Commit 1a3cbfa

Browse files
authored
Add MinimalStdlib build-script product, build is in main CI jobs and PR testing jobs (#64492)
1 parent 736fc8b commit 1a3cbfa

File tree

7 files changed

+198
-2
lines changed

7 files changed

+198
-2
lines changed

utils/build-presets.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,6 +1607,8 @@ swiftsyntax
16071607
swiftformat
16081608
swiftdocc
16091609

1610+
build-minimal-stdlib
1611+
16101612
# Don't generate the SwiftSyntax gyb files. Instead verify that up-to-date ones
16111613
# are checked in.
16121614
swiftsyntax-verify-generated-files

utils/build_swift/build_swift/defaults.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def llvm_install_components():
119119
platforms.
120120
"""
121121
components = ['llvm-ar', 'llvm-cov', 'llvm-profdata', 'IndexStore', 'clang',
122-
'clang-resource-headers', 'compiler-rt', 'clangd']
122+
'clang-resource-headers', 'compiler-rt', 'clangd', 'LTO']
123123
if os.sys.platform == 'darwin':
124124
components.extend(['dsymutil'])
125125
else:

utils/build_swift/build_swift/driver_arguments.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,9 @@ def create_argument_parser():
739739
toggle_true('build_swift_inspect'),
740740
help='build SwiftInspect using swiftpm against the just built '
741741
'toolchain')
742+
option(['--build-minimal-stdlib'], toggle_true('build_minimalstdlib'),
743+
help='build the \'minimal\' freestanding stdlib variant into a '
744+
'separate build directory ')
742745

743746
option('--xctest', toggle_true('build_xctest'),
744747
help='build xctest')

utils/build_swift/tests/expected_options.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
'build_swiftformat': False,
101101
'build_swiftevolve': False,
102102
'build_swiftdocc': False,
103+
'build_minimalstdlib': False,
103104
'build_indexstoredb': False,
104105
'test_indexstoredb_sanitize_all': False,
105106
'test_sourcekitlsp_sanitize_all': False,
@@ -539,6 +540,7 @@ class BuildScriptImplOption(_BaseOption):
539540
SetTrueOption('--swiftformat', dest='build_swiftformat'),
540541
SetTrueOption('--swiftevolve', dest='build_swiftevolve'),
541542
SetTrueOption('--swiftdocc', dest='build_swiftdocc'),
543+
SetTrueOption('--build-minimal-stdlib', dest='build_minimalstdlib'),
542544
SetTrueOption('-B', dest='benchmark'),
543545
SetTrueOption('-S', dest='skip_build'),
544546
SetTrueOption('-b', dest='build_llbuild'),

utils/swift_build_support/swift_build_support/build_script_invocation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@ def compute_product_pipelines(self):
654654
is_enabled=self.args.build_swiftdocc)
655655
builder.add_product(products.SwiftDocCRender,
656656
is_enabled=self.args.install_swiftdocc)
657+
builder.add_product(products.MinimalStdlib,
658+
is_enabled=self.args.build_minimalstdlib)
657659

658660
# Keep SwiftDriver at last.
659661
# swift-driver's integration with the build scripts is not fully

utils/swift_build_support/swift_build_support/products/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from .llbuild import LLBuild
2626
from .lldb import LLDB
2727
from .llvm import LLVM
28+
from .minimalstdlib import MinimalStdlib
2829
from .ninja import Ninja
2930
from .playgroundsupport import PlaygroundSupport
3031
from .skstresstester import SKStressTester
@@ -45,7 +46,6 @@
4546
__all__ = [
4647
'BackDeployConcurrency',
4748
'CMark',
48-
'Ninja',
4949
'Foundation',
5050
'LibCXX',
5151
'LibDispatch',
@@ -56,6 +56,7 @@
5656
'LLBuild',
5757
'LLDB',
5858
'LLVM',
59+
'MinimalStdlib',
5960
'Ninja',
6061
'PlaygroundSupport',
6162
'Swift',
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
# swift_build_support/products/minimalstdlib.py -----------------*- python -*-
2+
#
3+
# This source file is part of the Swift.org open source project
4+
#
5+
# Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
6+
# Licensed under Apache License v2.0 with Runtime Library Exception
7+
#
8+
# See https://swift.org/LICENSE.txt for license information
9+
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
#
11+
# ----------------------------------------------------------------------------
12+
13+
import os
14+
import platform
15+
16+
from . import cmake_product
17+
from . import cmark
18+
from . import libcxx
19+
from . import llvm
20+
from . import swift
21+
22+
23+
class MinimalStdlib(cmake_product.CMakeProduct):
24+
@classmethod
25+
def product_source_name(cls):
26+
return os.path.join("swift")
27+
28+
@classmethod
29+
def is_build_script_impl_product(cls):
30+
return False
31+
32+
@classmethod
33+
def is_before_build_script_impl_product(cls):
34+
return False
35+
36+
def should_build(self, host_target):
37+
return platform.system() == 'Darwin'
38+
39+
def build(self, host_target):
40+
build_variant = 'MinSizeRel'
41+
self.cmake_options.define('CMAKE_BUILD_TYPE:STRING', build_variant)
42+
self.cmake_options.define(
43+
'SWIFT_STDLIB_BUILD_TYPE:STRING', build_variant)
44+
45+
build_root = os.path.dirname(self.build_dir)
46+
llvm_build_dir = os.path.join(
47+
'..', build_root, '%s-%s' % ('llvm', host_target))
48+
llvm_cmake_dir = os.path.join(llvm_build_dir, 'lib', 'cmake', 'llvm')
49+
self.cmake_options.define('LLVM_DIR:PATH', llvm_cmake_dir)
50+
51+
# Use the just-built toolchain
52+
toolchain_dir = self.install_toolchain_path(host_target)
53+
self.cmake_options.define('TOOLCHAIN_DIR:PATH', toolchain_dir)
54+
self.cmake_options.define(
55+
'SWIFT_NATIVE_CLANG_TOOLS_PATH:STRING', toolchain_dir + '/bin')
56+
self.cmake_options.define(
57+
'SWIFT_NATIVE_LLVM_TOOLS_PATH:STRING', toolchain_dir + '/bin')
58+
self.cmake_options.define(
59+
'SWIFT_NATIVE_SWIFT_TOOLS_PATH:STRING', toolchain_dir + '/bin')
60+
61+
# Build the freestanding variant, with these options
62+
self.cmake_options.define('SWIFT_SDKS:STRING', 'FREESTANDING')
63+
self.cmake_options.define(
64+
'SWIFT_FREESTANDING_ARCHS:STRING', 'x86_64;arm64')
65+
self.cmake_options.define('SWIFT_FREESTANDING_FLAVOR:STRING', 'apple')
66+
self.cmake_options.define('SWIFT_FREESTANDING_IS_DARWIN:BOOL', 'FALSE')
67+
self.cmake_options.define(
68+
'SWIFT_FREESTANDING_MODULE_NAME:STRING', 'macos')
69+
self.cmake_options.define('SWIFT_FREESTANDING_SDK:STRING', 'macosx')
70+
self.cmake_options.define(
71+
'SWIFT_FREESTANDING_TRIPLE_NAME:STRING', 'macosx11.0')
72+
self.cmake_options.define(
73+
'SWIFT_PRIMARY_VARIANT_ARCH:STRING', 'x86_64')
74+
self.cmake_options.define(
75+
'SWIFT_PRIMARY_VARIANT_SDK:STRING', 'FREESTANDING')
76+
self.cmake_options.define(
77+
'SWIFT_HOST_TRIPLE:STRING', 'x86_64-apple-macosx10.13')
78+
self.cmake_options.define('SWIFT_HOST_VARIANT', 'macosx')
79+
self.cmake_options.define('SWIFT_HOST_VARIANT_ARCH', 'x86_64')
80+
self.cmake_options.define('SWIFT_HOST_VARIANT_SDK', 'OSX')
81+
self.cmake_options.define('SWIFT_STDLIB_ASSERTIONS:BOOL', 'FALSE')
82+
83+
# Configure build to only build the stdlib, and only a static version of it
84+
self.cmake_options.define(
85+
'SWIFT_BUILD_DYNAMIC_SDK_OVERLAY:BOOL', 'FALSE')
86+
self.cmake_options.define('SWIFT_BUILD_DYNAMIC_STDLIB:BOOL', 'FALSE')
87+
self.cmake_options.define('SWIFT_BUILD_REMOTE_MIRROR:BOOL', 'FALSE')
88+
self.cmake_options.define(
89+
'SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER:BOOL', 'FALSE')
90+
self.cmake_options.define(
91+
'SWIFT_BUILD_STATIC_SDK_OVERLAY:BOOL', 'FALSE')
92+
self.cmake_options.define('SWIFT_BUILD_STATIC_STDLIB:BOOL', 'TRUE')
93+
self.cmake_options.define('SWIFT_INCLUDE_TESTS:BOOL', 'TRUE')
94+
self.cmake_options.define('SWIFT_INCLUDE_TOOLS:BOOL', 'FALSE')
95+
96+
# Stdlib feature flags
97+
self.cmake_options.define('SWIFT_ENABLE_BACKTRACING:BOOL', 'FALSE')
98+
self.cmake_options.define('SWIFT_ENABLE_DISPATCH:BOOL', 'FALSE')
99+
self.cmake_options.define(
100+
'SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY:BOOL', 'TRUE')
101+
self.cmake_options.define(
102+
'SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING:BOOL', 'FALSE')
103+
self.cmake_options.define(
104+
'SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED:BOOL', 'FALSE')
105+
self.cmake_options.define(
106+
'SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION:BOOL', 'FALSE')
107+
self.cmake_options.define('SWIFT_ENABLE_REFLECTION:BOOL', 'FALSE')
108+
self.cmake_options.define(
109+
'SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS:BOOL', 'FALSE')
110+
self.cmake_options.define(
111+
'SWIFT_IMPLICIT_CONCURRENCY_IMPORT:BOOL', 'FALSE')
112+
self.cmake_options.define(
113+
'SWIFT_RUNTIME_CRASH_REPORTER_CLIENT:BOOL', 'FALSE')
114+
self.cmake_options.define(
115+
'SWIFT_RUNTIME_ENABLE_LEAK_CHECKER:BOOL', 'FALSE')
116+
self.cmake_options.define(
117+
'SWIFT_RUNTIME_STATIC_IMAGE_INSPECTION:BOOL', 'FALSE')
118+
self.cmake_options.define('SWIFT_STDLIB_BUILD_PRIVATE:BOOL', 'TRUE')
119+
self.cmake_options.define(
120+
'SWIFT_STDLIB_CONCURRENCY_TRACING:BOOL', 'FALSE')
121+
self.cmake_options.define(
122+
'SWIFT_STDLIB_DISABLE_INSTANTIATION_CACHES:BOOL', 'TRUE')
123+
self.cmake_options.define(
124+
'SWIFT_STDLIB_ENABLE_DEBUG_PRECONDITIONS_IN_RELEASE', 'FALSE')
125+
self.cmake_options.define('SWIFT_STDLIB_ENABLE_LTO:STRING', 'full')
126+
self.cmake_options.define(
127+
'SWIFT_STDLIB_ENABLE_OBJC_INTEROP:BOOL', 'FALSE')
128+
self.cmake_options.define(
129+
'SWIFT_STDLIB_ENABLE_PRESPECIALIZATION:BOOL', 'FALSE')
130+
self.cmake_options.define(
131+
'SWIFT_STDLIB_ENABLE_STDLIBCORE_EXCLUSIVITY_CHECKING:BOOL', 'FALSE')
132+
self.cmake_options.define('SWIFT_STDLIB_ENABLE_UNICODE_DATA', 'FALSE')
133+
self.cmake_options.define(
134+
'SWIFT_STDLIB_ENABLE_VECTOR_TYPES:BOOL', 'FALSE')
135+
self.cmake_options.define(
136+
'SWIFT_STDLIB_EXPERIMENTAL_HERMETIC_SEAL_AT_LINK:BOOL', 'TRUE')
137+
self.cmake_options.define('SWIFT_STDLIB_HAS_ASL:BOOL', 'FALSE')
138+
self.cmake_options.define('SWIFT_STDLIB_HAS_COMMANDLINE:BOOL', 'FALSE')
139+
self.cmake_options.define(
140+
'SWIFT_STDLIB_HAS_DARWIN_LIBMALLOC:BOOL', 'FALSE')
141+
self.cmake_options.define('SWIFT_STDLIB_HAS_DLADDR:BOOL', 'FALSE')
142+
self.cmake_options.define('SWIFT_STDLIB_HAS_ENVIRON:BOOL', 'FALSE')
143+
self.cmake_options.define('SWIFT_STDLIB_HAS_LOCALE:BOOL', 'FALSE')
144+
self.cmake_options.define('SWIFT_STDLIB_HAS_STDIN:BOOL', 'FALSE')
145+
self.cmake_options.define(
146+
'SWIFT_STDLIB_HAS_TYPE_PRINTING:BOOL', 'FALSE')
147+
self.cmake_options.define('SWIFT_STDLIB_OS_VERSIONING:BOOL', 'FALSE')
148+
self.cmake_options.define(
149+
'SWIFT_STDLIB_PASSTHROUGH_METADATA_ALLOCATOR:BOOL', 'TRUE')
150+
self.cmake_options.define(
151+
'SWIFT_STDLIB_REFLECTION_METADATA:STRING', 'debugger-only')
152+
self.cmake_options.define(
153+
'SWIFT_STDLIB_SHORT_MANGLING_LOOKUPS:BOOL', 'FALSE')
154+
self.cmake_options.define('SWIFT_STDLIB_SIL_DEBUGGING:BOOL', 'FALSE')
155+
self.cmake_options.define(
156+
'SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY:BOOL', 'FALSE')
157+
self.cmake_options.define('SWIFT_STDLIB_STABLE_ABI:BOOL', 'FALSE')
158+
self.cmake_options.define('SWIFT_STDLIB_STATIC_PRINT', 'TRUE')
159+
self.cmake_options.define(
160+
'SWIFT_STDLIB_SUPPORTS_BACKTRACE_REPORTING:BOOL', 'FALSE')
161+
self.cmake_options.define(
162+
'SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT:BOOL', 'FALSE')
163+
self.cmake_options.define('SWIFT_STDLIB_TRAP_FUNCTION:STRING', '')
164+
self.cmake_options.define(
165+
'SWIFT_STDLIB_USE_RELATIVE_PROTOCOL_WITNESS_TABLES:BOOL', 'TRUE')
166+
self.cmake_options.define('SWIFT_THREADING_PACKAGE:STRING', 'none')
167+
168+
# Build!
169+
self.build_with_cmake(["swift-stdlib-freestanding"], build_variant, [],
170+
prefer_just_built_toolchain=True)
171+
172+
def should_test(self, host_target):
173+
return False
174+
175+
def test(self, host_target):
176+
raise RuntimeError("Testing not implemented")
177+
178+
def should_install(self, host_target):
179+
return False
180+
181+
@classmethod
182+
def get_dependencies(cls):
183+
return [cmark.CMark,
184+
llvm.LLVM,
185+
libcxx.LibCXX,
186+
swift.Swift]

0 commit comments

Comments
 (0)