Skip to content

Commit 3dda7ee

Browse files
authored
Merge pull request #21901 from nkcsgexi/libparser-build
WIP: build-script: add a flag to build libSwiftSyntaxParser only.
2 parents 049c3cd + eefa0b1 commit 3dda7ee

File tree

5 files changed

+29
-4
lines changed

5 files changed

+29
-4
lines changed

utils/build-script

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ class BuildScriptInvocation(object):
404404
if not args.test_watchos_host:
405405
self.platforms_to_skip_test_host.add(
406406
StdlibDeploymentTarget.AppleWatch)
407+
self.build_libparser_only = args.build_libparser_only
407408

408409
def initialize_runtime_environment(self):
409410
"""Change the program environment for building."""
@@ -697,7 +698,8 @@ class BuildScriptInvocation(object):
697698
impl_args += ["--skip-test-optimized"]
698699
if not args.test_optimize_for_size:
699700
impl_args += ["--skip-test-optimize-for-size"]
700-
701+
if args.build_libparser_only:
702+
impl_args += ["--build-libparser-only"]
701703
if args.android:
702704
impl_args += [
703705
"--android-arch", args.android_arch,

utils/build-script-impl

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ KNOWN_SETTINGS=(
103103
installable-package "" "the path to the archive of the installation directory"
104104
test-installable-package "" "whether to run post-packaging tests on the produced package"
105105
reconfigure "" "force a CMake configuration run even if CMakeCache.txt already exists"
106+
build-libparser-only "" "only build libSwiftSyntaxParser"
106107
skip-reconfigure "" "set to skip reconfigure"
107108
swift-primary-variant-sdk "" "default SDK for target binaries"
108109
swift-primary-variant-arch "" "default arch for target binaries"
@@ -1140,7 +1141,6 @@ function get_stdlib_targets_for_host() {
11401141
# and architecture of each stdlib target -- currently it only captures the SDK.
11411142
#
11421143
# We turn these targets in to SWIFT_SDKS in `calculate_targets_for_host()`
1143-
11441144
if [[ $(is_cross_tools_host $1) ]] ; then
11451145
echo "$1"
11461146
else
@@ -1824,6 +1824,16 @@ function set_swiftsyntax_build_command() {
18241824
SWIFT_TEST="$(build_directory_bin ${LOCAL_HOST} swiftpm)/swift-test"
18251825
fi
18261826

1827+
if [ "${BUILD_LIBPARSER_ONLY}" ]; then
1828+
# we don't have a compiler built so we have to use the one in the environment.
1829+
SWIFTC_BIN="$(xcrun_find_tool swiftc)"
1830+
# we don't have a swiftpm built so we have to use the one in the environment.
1831+
SWIFT_BUILD="$(xcrun_find_tool swift-build)"
1832+
SWIFT_TEST="$(xcrun_find_tool swift-test)"
1833+
else
1834+
SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
1835+
fi
1836+
18271837
swiftsyntax_build_command=("${SWIFTSYNTAX_SOURCE_DIR}/build-script.py")
18281838
# Add --release if we have to build in release mode.
18291839
if [[ $(is_cmake_release_build_type "${SWIFTSYNTAX_BUILD_TYPE}") ]] ; then
@@ -1836,7 +1846,7 @@ function set_swiftsyntax_build_command() {
18361846
--build-dir="${build_dir}"
18371847
--swift-build-exec="${SWIFT_BUILD}"
18381848
--swift-test-exec="${SWIFT_TEST}"
1839-
--swiftc-exec="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
1849+
--swiftc-exec="${SWIFTC_BIN}"
18401850
--syntax-parser-header-dir="${SWIFT_SOURCE_DIR}/include/swift-c/SyntaxParser"
18411851
--syntax-parser-lib-dir="$(build_directory ${host} swift)/lib"
18421852
--swift-syntax-test-exec="$(build_directory_bin ${LOCAL_HOST} swift)/swift-syntax-test"
@@ -2388,7 +2398,9 @@ for host in "${ALL_HOSTS[@]}"; do
23882398
build_targets=("${build_targets[@]}"
23892399
"${SWIFT_BENCHMARK_TARGETS[@]}")
23902400
fi
2391-
2401+
if [ "${BUILD_LIBPARSER_ONLY}" ]; then
2402+
build_targets=(libSwiftSyntaxParser)
2403+
fi
23922404
skip_build=${SKIP_BUILD_SWIFT}
23932405
;;
23942406
lldb)

utils/build_swift/driver_arguments.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,9 @@ def create_argument_parser():
542542
option('--build-ninja', toggle_true,
543543
help='build the Ninja tool')
544544

545+
option(['--build-libparser-only'], store_true('build_libparser_only'),
546+
help='build only libParser for SwiftSyntax')
547+
545548
# -------------------------------------------------------------------------
546549
in_group('Extra actions to perform before or in addition to building')
547550

utils/build_swift/tests/expected_options.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
'build_swift_stdlib_unittest_extra': False,
8383
'build_swiftpm': False,
8484
'build_swiftsyntax': False,
85+
'build_libparser_only': False,
8586
'build_skstresstester': False,
8687
'build_swiftevolve': False,
8788
'build_tvos': True,
@@ -400,6 +401,7 @@ class IgnoreOption(_BaseOption):
400401
SetTrueOption('--skip-build'),
401402
SetTrueOption('--swiftpm', dest='build_swiftpm'),
402403
SetTrueOption('--swiftsyntax', dest='build_swiftsyntax'),
404+
SetTrueOption('--build-libparser-only', dest='build_libparser_only'),
403405
SetTrueOption('--skstresstester', dest='build_skstresstester'),
404406
SetTrueOption('--swiftevolve', dest='build_swiftevolve'),
405407
SetTrueOption('-B', dest='benchmark'),

utils/build_swift/tests/test_driver_arguments.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,12 @@ def test_implied_defaults_host_test(self):
690690
self.assertFalse(namespace.test_tvos_host)
691691
self.assertFalse(namespace.test_watchos_host)
692692
self.assertFalse(namespace.test_android_host)
693+
self.assertFalse(namespace.build_libparser_only)
694+
695+
def test_build_lib_swiftsyntaxparser_only(self):
696+
with self.assertNotRaises(ParserError):
697+
namespace = self.parse_default_args(['--build-libparser-only'])
698+
self.assertTrue(namespace.build_libparser_only)
693699

694700

695701
if __name__ == '__main__':

0 commit comments

Comments
 (0)