Skip to content

Commit fb2ecaa

Browse files
authored
Add an option to not build the private part of the Standard Library (swiftlang#40548)
This can be useful to reduce build times in certain configurations (e.g. when we don't run tests). Addresses rdar://86474460
1 parent e31c155 commit fb2ecaa

File tree

6 files changed

+41
-2
lines changed

6 files changed

+41
-2
lines changed

stdlib/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ option(SWIFT_ENABLE_REFLECTION
164164
"Build stdlib with support for runtime reflection and mirrors."
165165
TRUE)
166166

167+
option(SWIFT_STDLIB_BUILD_PRIVATE
168+
"Build private part of the Standard Library."
169+
TRUE)
170+
167171
if(SWIFT_STDLIB_SINGLE_THREADED_RUNTIME)
168172
set(SWIFT_CONCURRENCY_GLOBAL_EXECUTOR_default "singlethreaded")
169173
else()
@@ -329,5 +333,7 @@ swift_create_stdlib_targets("swift-test-stdlib" "" FALSE)
329333
# the clang resource directory symlink stops installing correctly.
330334
add_subdirectory(toolchain)
331335
add_subdirectory(public)
332-
add_subdirectory(private)
336+
if(SWIFT_STDLIB_BUILD_PRIVATE)
337+
add_subdirectory(private)
338+
endif()
333339
add_subdirectory(tools)

utils/build-presets.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2582,10 +2582,12 @@ swift-freestanding-is-darwin=1
25822582
swift-freestanding-triple-name=macosx11.0
25832583
swift-freestanding-module-name=macos
25842584
swift-freestanding-archs=x86_64
2585+
build-swift-private-stdlib=0
25852586

25862587
[preset: stdlib_S_standalone_darwin_x86_64,build,test]
25872588
mixin-preset=stdlib_S_standalone_darwin_x86_64,build
25882589

2590+
build-swift-private-stdlib=1
25892591
test
25902592
validation-test
25912593

utils/build_swift/build_swift/driver_arguments.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,12 @@ def create_argument_parser():
10351035
option('--build-external-benchmarks', toggle_true,
10361036
help='skip building Swift Benchmark Suite')
10371037

1038+
option('--build-swift-private-stdlib', toggle_true,
1039+
default=True,
1040+
help='build the private part of the Standard Library. '
1041+
'This can be useful to reduce build times when e.g. '
1042+
'tests do not need to run')
1043+
10381044
# -------------------------------------------------------------------------
10391045
in_group('Skip testing specified targets')
10401046

utils/build_swift/tests/expected_options.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
'build_swift_dynamic_sdk_overlay': True,
8585
'build_swift_dynamic_stdlib': True,
8686
'build_swift_inspect': False,
87+
'build_swift_private_stdlib': True,
8788
'build_swift_static_sdk_overlay': False,
8889
'build_swift_static_stdlib': False,
8990
'build_swift_stdlib_unittest_extra': False,
@@ -539,6 +540,7 @@ class BuildScriptImplOption(_BaseOption):
539540
EnableOption('--build-swift-static-stdlib'),
540541
EnableOption('--build-swift-stdlib-unittest-extra'),
541542
EnableOption('--build-swift-stdlib-static-print'),
543+
EnableOption('--build-swift-private-stdlib'),
542544
EnableOption('--distcc'),
543545
EnableOption('--sccache'),
544546
EnableOption('--enable-asan'),

utils/swift_build_support/swift_build_support/products/swift.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def __init__(self, args, toolchain, source_dir, build_dir):
6565
# Add freestanding related flags.
6666
self.cmake_options.extend(self._freestanding_is_darwin)
6767

68+
self.cmake_options.extend(self._build_swift_private_stdlib)
69+
6870
@classmethod
6971
def is_build_script_impl_product(cls):
7072
"""is_build_script_impl_product -> bool
@@ -179,6 +181,11 @@ def _freestanding_is_darwin(self):
179181
return [('SWIFT_FREESTANDING_IS_DARWIN:BOOL',
180182
self.args.swift_freestanding_is_darwin)]
181183

184+
@property
185+
def _build_swift_private_stdlib(self):
186+
return [('SWIFT_STDLIB_BUILD_PRIVATE:BOOL',
187+
self.args.build_swift_private_stdlib)]
188+
182189
@classmethod
183190
def get_dependencies(cls):
184191
return [cmark.CMark,

utils/swift_build_support/tests/products/test_swift.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ def setUp(self):
6363
enable_experimental_distributed=False,
6464
build_swift_stdlib_static_print=False,
6565
enable_experimental_string_processing=False,
66-
swift_freestanding_is_darwin=False)
66+
swift_freestanding_is_darwin=False,
67+
build_swift_private_stdlib=True)
6768

6869
# Setup shell
6970
shell.dry_run = True
@@ -100,6 +101,7 @@ def test_by_default_no_cmake_options(self):
100101
'-DSWIFT_STDLIB_STATIC_PRINT=FALSE',
101102
'-DSWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING:BOOL=FALSE',
102103
'-DSWIFT_FREESTANDING_IS_DARWIN:BOOL=FALSE',
104+
'-DSWIFT_STDLIB_BUILD_PRIVATE:BOOL=TRUE',
103105
]
104106
self.assertEqual(set(swift.cmake_options), set(expected))
105107

@@ -121,6 +123,7 @@ def test_swift_runtime_tsan(self):
121123
'-DSWIFT_STDLIB_STATIC_PRINT=FALSE',
122124
'-DSWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING:BOOL=FALSE',
123125
'-DSWIFT_FREESTANDING_IS_DARWIN:BOOL=FALSE',
126+
'-DSWIFT_STDLIB_BUILD_PRIVATE:BOOL=TRUE',
124127
]
125128
self.assertEqual(set(swift.cmake_options), set(flags_set))
126129

@@ -385,3 +388,16 @@ def test_freestanding_is_darwin_flags(self):
385388
'TRUE'],
386389
[x for x in swift.cmake_options
387390
if 'SWIFT_FREESTANDING_IS_DARWIN' in x])
391+
392+
def test_build_swift_private_stdlib_flags(self):
393+
self.args.build_swift_private_stdlib = False
394+
swift = Swift(
395+
args=self.args,
396+
toolchain=self.toolchain,
397+
source_dir='/path/to/src',
398+
build_dir='/path/to/build')
399+
self.assertEqual(
400+
['-DSWIFT_STDLIB_BUILD_PRIVATE:BOOL='
401+
'FALSE'],
402+
[x for x in swift.cmake_options
403+
if 'SWIFT_STDLIB_BUILD_PRIVATE' in x])

0 commit comments

Comments
 (0)