[build-script] Move non-trivial argument default logic (#12408)

* Moved argument-defaults logic that should be determined outside the actual parser back into the build-script. This logic will be relocated again at a later date to a more suitable module with testing.

* Moved test-paths argument default logic into build-script until it can find a better home in the future.

* Removed old default value for stdlib_deployment_targets from the expected options.
This commit is contained in:
Ross Bayer
2017-10-13 12:25:38 -07:00
committed by GitHub
parent 8cd677eb1f
commit 615355c556
3 changed files with 60 additions and 66 deletions

View File

@@ -256,12 +256,69 @@ class BuildScriptInvocation(object):
@staticmethod
def apply_default_arguments(toolchain, args):
# infer if ninja is required
# Infer if ninja is required
ninja_required = (
args.cmake_generator == 'Ninja' or args.build_foundation)
if ninja_required and toolchain.ninja is None:
args.build_ninja = True
# Set the default stdlib-deployment-targets, if none were provided.
if args.stdlib_deployment_targets is None:
stdlib_targets = \
StdlibDeploymentTarget.default_stdlib_deployment_targets()
args.stdlib_deployment_targets = [
target.name for target in stdlib_targets]
# SwiftPM and XCTest have a dependency on Foundation.
# On OS X, Foundation is built automatically using xcodebuild.
# On Linux, we must ensure that it is built manually.
if ((args.build_swiftpm or args.build_xctest) and
platform.system() != "Darwin"):
args.build_foundation = True
# Foundation has a dependency on libdispatch.
# On OS X, libdispatch is provided by the OS.
# On Linux, we must ensure that it is built manually.
if (args.build_foundation and
platform.system() != "Darwin"):
args.build_libdispatch = True
if args.build_subdir is None:
args.build_subdir = \
workspace.compute_build_subdir(args)
# Set the default stdlib-deployment-targets, if none were provided.
if args.stdlib_deployment_targets is None:
stdlib_targets = \
StdlibDeploymentTarget.default_stdlib_deployment_targets()
args.stdlib_deployment_targets = [
target.name for target in stdlib_targets]
# --test-paths implies --test and/or --validation-test
# depending on what directories/files have been specified.
if args.test_paths:
for path in args.test_paths:
if path.startswith('test'):
args.test = True
elif path.startswith('validation-test'):
args.test = True
args.validation_test = True
# Add optional stdlib-deployment-targets
if args.android:
args.stdlib_deployment_targets.append(
StdlibDeploymentTarget.Android.armv7.name)
# Infer platform flags from manually-specified configure targets.
# This doesn't apply to Darwin platforms, as they are
# already configured. No building without the platform flag, though.
android_tgts = [tgt for tgt in args.stdlib_deployment_targets
if StdlibDeploymentTarget.Android.contains(tgt)]
if not args.android and len(android_tgts) > 0:
args.android = True
args.build_android = False
# ---
def __init__(self, toolchain, args):

View File

@@ -8,14 +8,12 @@
import argparse
import multiprocessing
import platform
import android.adb.commands
from swift_build_support.swift_build_support import arguments
from swift_build_support.swift_build_support import host
from swift_build_support.swift_build_support import targets
from swift_build_support.swift_build_support import workspace
from swift_build_support.swift_build_support.targets import \
StdlibDeploymentTarget
@@ -63,13 +61,6 @@ def _apply_default_arguments(args):
if args.build_variant is None:
args.build_variant = "Debug"
# Set the default stdlib-deployment-targets, if none were provided.
if args.stdlib_deployment_targets is None:
stdlib_targets = \
StdlibDeploymentTarget.default_stdlib_deployment_targets()
args.stdlib_deployment_targets = [
target.name for target in stdlib_targets]
if args.llvm_build_variant is None:
args.llvm_build_variant = args.build_variant
@@ -128,20 +119,6 @@ def _apply_default_arguments(args):
raise ValueError("error: --watchos-all is unavailable in open-source "
"Swift.\nUse --watchos to skip watchOS device tests.")
# SwiftPM and XCTest have a dependency on Foundation.
# On OS X, Foundation is built automatically using xcodebuild.
# On Linux, we must ensure that it is built manually.
if ((args.build_swiftpm or args.build_xctest) and
platform.system() != "Darwin"):
args.build_foundation = True
# Foundation has a dependency on libdispatch.
# On OS X, libdispatch is provided by the OS.
# On Linux, we must ensure that it is built manually.
if (args.build_foundation and
platform.system() != "Darwin"):
args.build_libdispatch = True
# Propagate global --skip-build
if args.skip_build:
args.build_linux = False
@@ -193,16 +170,6 @@ def _apply_default_arguments(args):
if args.test_optimize_for_size:
args.test = True
# --test-paths implies --test and/or --validation-test
# depending on what directories/files have been specified.
if args.test_paths:
for path in args.test_paths:
if path.startswith('test'):
args.test = True
elif path.startswith('validation-test'):
args.test = True
args.validation_test = True
# If none of tests specified skip swift stdlib test on all platforms
if not args.test and not args.validation_test and not args.long_test:
args.test_linux = False
@@ -253,25 +220,6 @@ def _apply_default_arguments(args):
args.test_watchos_host = False
args.test_android_host = False
if args.build_subdir is None:
args.build_subdir = \
workspace.compute_build_subdir(args)
# Add optional stdlib-deployment-targets
if args.android:
args.stdlib_deployment_targets.append(
StdlibDeploymentTarget.Android.armv7.name)
# Infer platform flags from manually-specified configure targets.
# This doesn't apply to Darwin platforms, as they are
# already configured. No building without the platform flag, though.
android_tgts = [tgt for tgt in args.stdlib_deployment_targets
if StdlibDeploymentTarget.Android.contains(tgt)]
if not args.android and len(android_tgts) > 0:
args.android = True
args.build_android = False
def create_argument_parser():
"""Return a configured argument parser."""

View File

@@ -69,7 +69,7 @@ EXPECTED_DEFAULTS = {
'build_playgroundsupport': False,
'build_runtime_with_host_compiler': False,
'build_stdlib_deployment_targets': ['all'],
'build_subdir': 'Ninja-DebugAssert',
'build_subdir': None,
'build_swift_dynamic_sdk_overlay': True,
'build_swift_dynamic_stdlib': True,
'build_swift_static_sdk_overlay': False,
@@ -145,18 +145,7 @@ EXPECTED_DEFAULTS = {
'lto_type': None,
'show_sdks': False,
'skip_build': False,
'stdlib_deployment_targets': [
'macosx-x86_64',
'iphonesimulator-i386',
'iphonesimulator-x86_64',
'appletvsimulator-x86_64',
'watchsimulator-i386',
'iphoneos-armv7',
'iphoneos-armv7s',
'iphoneos-arm64',
'appletvos-arm64',
'watchos-armv7k'
],
'stdlib_deployment_targets': None,
'swift_analyze_code_coverage': defaults.SWIFT_ANALYZE_CODE_COVERAGE,
'swift_assertions': True,
'swift_build_variant': 'Debug',