Skip to content

Commit 7e316ac

Browse files
[bootstrap] consolidate some build_... functions into build_dependency
This removes some repetition. Some functions such as `build_llbuild` and `build_swiftpm_with_cmake` are are not consolidated, because they're more different.
1 parent e4201de commit 7e316ac

File tree

1 file changed

+57
-97
lines changed

1 file changed

+57
-97
lines changed

Utilities/bootstrap

Lines changed: 57 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,16 @@ def add_test_args(parser):
167167

168168
def parse_global_args(args):
169169
"""Parses and cleans arguments necessary for all actions."""
170-
args.build_dir = os.path.abspath(args.build_dir)
171-
args.project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
172-
args.tsc_source_dir = os.path.join(args.project_root, "..", "swift-tools-support-core")
173-
args.yams_source_dir = os.path.join(args.project_root, "..", "yams")
174-
args.swift_argument_parser_source_dir = os.path.join(args.project_root, "..", "swift-argument-parser")
175-
args.swift_driver_source_dir = os.path.join(args.project_root, "..", "swift-driver")
176-
args.swift_crypto_source_dir = os.path.join(args.project_root, "..", "swift-crypto")
177-
args.source_root = os.path.join(args.project_root, "Sources")
170+
args.build_dir = os.path.abspath(args.build_dir)
171+
args.build_dirs = {}
172+
args.project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
173+
args.source_dirs = {}
174+
args.source_dirs["tsc"] = os.path.join(args.project_root, "..", "swift-tools-support-core")
175+
args.source_dirs["yams"] = os.path.join(args.project_root, "..", "yams")
176+
args.source_dirs["swift-argument-parser"] = os.path.join(args.project_root, "..", "swift-argument-parser")
177+
args.source_dirs["swift-driver"] = os.path.join(args.project_root, "..", "swift-driver")
178+
args.source_dirs["swift-crypto"] = os.path.join(args.project_root, "..", "swift-crypto")
179+
args.source_root = os.path.join(args.project_root, "Sources")
178180

179181
if platform.system() == 'Darwin':
180182
args.sysroot = call_output(["xcrun", "--sdk", "macosx", "--show-sdk-path"], verbose=args.verbose)
@@ -193,6 +195,8 @@ def parse_build_args(args):
193195

194196
if args.llbuild_build_dir:
195197
args.llbuild_build_dir = os.path.abspath(args.llbuild_build_dir)
198+
199+
args.build_dirs["llbuild"] = args.llbuild_build_dir
196200

197201
args.swiftc_path = get_swiftc_path(args)
198202
args.clang_path = get_clang_path(args)
@@ -313,15 +317,23 @@ def build(args):
313317
parse_build_args(args)
314318

315319
# Build llbuild if its build path is not passed in.
316-
if not args.llbuild_build_dir:
320+
if not "llbuild" in args.build_dirs:
317321
build_llbuild(args)
318322

319323
if args.bootstrap:
320-
build_tsc(args)
321-
build_yams(args)
322-
build_swift_argument_parser(args)
323-
build_swift_driver(args)
324-
build_swift_crypto(args)
324+
# tsc, swift-argument-parser, and yams are depended on by swift-driver, so they must be built first.
325+
build_dependency(args, "tsc")
326+
build_dependency(args, "swift-argument-parser", ["-DBUILD_TESTING=NO", "-DBUILD_EXAMPLES=NO"])
327+
build_dependency(args, "yams", [], [get_foundation_cmake_arg(args)] if args.foundation_build_dir else [])
328+
329+
swift_driver_cmake_flags = [
330+
get_llbuild_cmake_arg(args),
331+
"-DTSC_DIR=" + os.path.join(args.build_dirs["tsc"], "cmake/modules"),
332+
"-DYams_DIR=" + os.path.join(args.build_dirs["yams"], "cmake/modules"),
333+
"-DArgumentParser_DIR=" + os.path.join(args.build_dirs["swift-argument-parser"], "cmake/modules"),
334+
]
335+
build_dependency(args, "swift-driver", swift_driver_cmake_flags)
336+
build_dependency(args, "swift-crypto")
325337
build_swiftpm_with_cmake(args)
326338

327339
build_swiftpm_with_swiftpm(args,integrated_swift_driver=False)
@@ -486,9 +498,9 @@ def build_llbuild(args):
486498
note("Building llbuild")
487499

488500
# Set where we are going to build llbuild for future steps to find it
489-
args.llbuild_build_dir = os.path.join(args.target_dir, "llbuild")
501+
args.build_dirs["llbuild"] = os.path.join(args.target_dir, "llbuild")
490502

491-
api_dir = os.path.join(args.llbuild_build_dir, ".cmake/api/v1/query")
503+
api_dir = os.path.join(args.build_dirs["llbuild"], ".cmake/api/v1/query")
492504
mkdir_p(api_dir)
493505
call(["touch", "codemodel-v2"], cwd=api_dir, verbose=args.verbose)
494506

@@ -505,73 +517,21 @@ def build_llbuild(args):
505517
if args.sysroot:
506518
flags.append("-DSQLite3_INCLUDE_DIR=%s/usr/include" % args.sysroot)
507519

508-
llbuild_source_dir = get_llbuild_source_path(args)
509-
build_with_cmake(args, flags, llbuild_source_dir, args.llbuild_build_dir)
510-
511-
def build_tsc(args):
512-
note("Building TSC")
513-
args.tsc_build_dir = os.path.join(args.target_dir, "tsc")
514-
515-
cmake_flags = []
516-
if platform.system() == 'Darwin':
517-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
518-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
519-
520-
build_with_cmake(args, cmake_flags, args.tsc_source_dir, args.tsc_build_dir)
520+
args.source_dirs["llbuild"] = get_llbuild_source_path(args)
521+
build_with_cmake(args, flags, args.source_dirs["llbuild"], args.build_dirs["llbuild"])
521522

522-
def build_swift_argument_parser(args):
523-
note("Building swift-argument-parser")
524-
args.swift_argument_parser_build_dir = os.path.join(args.target_dir, "swift-argument-parser")
523+
def build_dependency(args, target_name, common_cmake_flags = [], non_darwin_cmake_flags = []):
524+
note("Building " + target_name)
525+
args.build_dirs[target_name] = os.path.join(args.target_dir, target_name)
525526

526-
cmake_flags = []
527-
if platform.system() == 'Darwin':
528-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
529-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
530-
531-
cmake_flags.append("-DBUILD_TESTING=NO")
532-
cmake_flags.append("-DBUILD_EXAMPLES=NO")
533-
build_with_cmake(args, cmake_flags, args.swift_argument_parser_source_dir, args.swift_argument_parser_build_dir)
534-
535-
def build_yams(args):
536-
note("Building Yams")
537-
args.yams_build_dir = os.path.join(args.target_dir, "yams")
538-
539-
cmake_flags = []
527+
cmake_flags = common_cmake_flags
540528
if platform.system() == 'Darwin':
541529
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
542530
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
543531
else:
544-
if args.foundation_build_dir:
545-
cmake_flags.append(get_foundation_cmake_arg(args))
546-
547-
build_with_cmake(args, cmake_flags, args.yams_source_dir, args.yams_build_dir)
548-
549-
def build_swift_driver(args):
550-
note("Building SwiftDriver")
551-
args.swift_driver_build_dir = os.path.join(args.target_dir, "swift-driver")
552-
553-
cmake_flags = [
554-
get_llbuild_cmake_arg(args),
555-
"-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
556-
"-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
557-
"-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
558-
]
559-
if platform.system() == 'Darwin':
560-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
561-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
562-
563-
build_with_cmake(args, cmake_flags, args.swift_driver_source_dir, args.swift_driver_build_dir)
564-
565-
def build_swift_crypto(args):
566-
note("Building SwiftCrypto")
567-
args.swift_crypto_build_dir = os.path.join(args.target_dir, "swift-crypto")
568-
569-
cmake_flags = []
570-
if platform.system() == 'Darwin':
571-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
572-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
532+
cmake_flags += non_darwin_cmake_flags
573533

574-
build_with_cmake(args, cmake_flags, args.swift_crypto_source_dir, args.swift_crypto_build_dir)
534+
build_with_cmake(args, cmake_flags, args.source_dirs[target_name], args.build_dirs[target_name])
575535

576536
def add_rpath_for_cmake_build(args, rpath):
577537
"Adds the given rpath to the CMake-built swift-build"
@@ -586,11 +546,11 @@ def build_swiftpm_with_cmake(args):
586546

587547
cmake_flags = [
588548
get_llbuild_cmake_arg(args),
589-
"-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
590-
"-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
591-
"-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
592-
"-DSwiftDriver_DIR=" + os.path.join(args.swift_driver_build_dir, "cmake/modules"),
593-
"-DSwiftCrypto_DIR=" + os.path.join(args.swift_crypto_build_dir, "cmake/modules"),
549+
"-DTSC_DIR=" + os.path.join(args.build_dirs["tsc"], "cmake/modules"),
550+
"-DYams_DIR=" + os.path.join(args.build_dirs["yams"], "cmake/modules"),
551+
"-DArgumentParser_DIR=" + os.path.join(args.build_dirs["swift-argument-parser"], "cmake/modules"),
552+
"-DSwiftDriver_DIR=" + os.path.join(args.build_dirs["swift-driver"], "cmake/modules"),
553+
"-DSwiftCrypto_DIR=" + os.path.join(args.build_dirs["swift-crypto"], "cmake/modules"),
594554
]
595555

596556
if platform.system() == 'Darwin':
@@ -600,13 +560,13 @@ def build_swiftpm_with_cmake(args):
600560
build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir)
601561

602562
if args.llbuild_link_framework:
603-
add_rpath_for_cmake_build(args, args.llbuild_build_dir)
563+
add_rpath_for_cmake_build(args, args.build_dirs["llbuild"])
604564

605565
if platform.system() == "Darwin":
606-
add_rpath_for_cmake_build(args, os.path.join(args.yams_build_dir, "lib"))
607-
add_rpath_for_cmake_build(args, os.path.join(args.swift_argument_parser_build_dir, "lib"))
608-
add_rpath_for_cmake_build(args, os.path.join(args.swift_driver_build_dir, "lib"))
609-
add_rpath_for_cmake_build(args, os.path.join(args.swift_crypto_build_dir, "lib"))
566+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["yams"], "lib"))
567+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-argument-parser"], "lib"))
568+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-driver"], "lib"))
569+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-crypto"], "lib"))
610570

611571
def build_swiftpm_with_swiftpm(args, integrated_swift_driver):
612572
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
@@ -671,9 +631,9 @@ def get_foundation_cmake_arg(args):
671631
def get_llbuild_cmake_arg(args):
672632
"""Returns the CMake argument to the LLBuild framework/binary to use for bulding SwiftPM."""
673633
if args.llbuild_link_framework:
674-
return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args.llbuild_build_dir
634+
return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args.build_dirs["llbuild"]
675635
else:
676-
llbuild_dir = os.path.join(args.llbuild_build_dir, "cmake/modules")
636+
llbuild_dir = os.path.join(args.build_dirs["llbuild"], "cmake/modules")
677637
return "-DLLBuild_DIR=" + llbuild_dir
678638

679639
def get_llbuild_source_path(args):
@@ -698,13 +658,13 @@ def get_swiftpm_env_cmd(args):
698658

699659
if args.bootstrap:
700660
libs_joined = ":".join([
701-
os.path.join(args.bootstrap_dir, "lib"),
702-
os.path.join(args.tsc_build_dir, "lib"),
703-
os.path.join(args.llbuild_build_dir, "lib"),
704-
os.path.join(args.yams_build_dir, "lib"),
705-
os.path.join(args.swift_argument_parser_build_dir, "lib"),
706-
os.path.join(args.swift_driver_build_dir, "lib"),
707-
os.path.join(args.swift_crypto_build_dir, "lib"),
661+
os.path.join(args.bootstrap_dir, "lib"),
662+
os.path.join(args.build_dirs["tsc"], "lib"),
663+
os.path.join(args.build_dirs["llbuild"], "lib"),
664+
os.path.join(args.build_dirs["yams"], "lib"),
665+
os.path.join(args.build_dirs["swift-argument-parser"], "lib"),
666+
os.path.join(args.build_dirs["swift-driver"], "lib"),
667+
os.path.join(args.build_dirs["swift-crypto"], "lib"),
708668
] + args.target_info["paths"]["runtimeLibraryPaths"])
709669

710670
if platform.system() == 'Darwin':
@@ -730,8 +690,8 @@ def get_swiftpm_flags(args):
730690

731691
if args.llbuild_link_framework:
732692
build_flags.extend([
733-
"-Xswiftc", "-F" + args.llbuild_build_dir,
734-
"-Xlinker", "-F" + args.llbuild_build_dir,
693+
"-Xswiftc", "-F" + args.build_dirs["llbuild"],
694+
"-Xlinker", "-F" + args.build_dirs["llbuild"],
735695

736696
# For LLBuild in Xcode.
737697
"-Xlinker", "-rpath",

0 commit comments

Comments
 (0)