Skip to content

Commit a46dab9

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 be4822e commit a46dab9

File tree

1 file changed

+57
-99
lines changed

1 file changed

+57
-99
lines changed

Utilities/bootstrap

Lines changed: 57 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,16 @@ def add_test_args(parser):
169169

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

181183
if platform.system() == 'Darwin':
182184
args.sysroot = call_output(["xcrun", "--sdk", "macosx", "--show-sdk-path"], verbose=args.verbose)
@@ -193,8 +195,8 @@ def parse_build_args(args):
193195
if args.foundation_build_dir:
194196
args.foundation_build_dir = os.path.abspath(args.foundation_build_dir)
195197

196-
if args.llbuild_build_dir:
197-
args.llbuild_build_dir = os.path.abspath(args.llbuild_build_dir)
198+
if "llbuild" in args.build_dirs:
199+
args.build_dirs["llbuild"] = os.path.abspath(args.build_dirs["llbuild"])
198200

199201
args.swiftc_path = get_swiftc_path(args)
200202
args.clang_path = get_clang_path(args)
@@ -315,15 +317,23 @@ def build(args):
315317
parse_build_args(args)
316318

317319
# Build llbuild if its build path is not passed in.
318-
if not args.llbuild_build_dir:
320+
if not "llbuild" in args.build_dirs:
319321
build_llbuild(args)
320322

321323
if args.bootstrap:
322-
build_tsc(args)
323-
build_yams(args)
324-
build_swift_argument_parser(args)
325-
build_swift_driver(args)
326-
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")
327337
build_swiftpm_with_cmake(args)
328338

329339
build_swiftpm_with_swiftpm(args,integrated_swift_driver=False)
@@ -517,9 +527,9 @@ def build_llbuild(args):
517527
note("Building llbuild")
518528

519529
# Set where we are going to build llbuild for future steps to find it
520-
args.llbuild_build_dir = os.path.join(args.target_dir, "llbuild")
530+
args.build_dirs["llbuild"] = os.path.join(args.target_dir, "llbuild")
521531

522-
api_dir = os.path.join(args.llbuild_build_dir, ".cmake/api/v1/query")
532+
api_dir = os.path.join(args.build_dirs["llbuild"], ".cmake/api/v1/query")
523533
mkdir_p(api_dir)
524534
call(["touch", "codemodel-v2"], cwd=api_dir, verbose=args.verbose)
525535

@@ -536,73 +546,21 @@ def build_llbuild(args):
536546
if args.sysroot:
537547
flags.append("-DSQLite3_INCLUDE_DIR=%s/usr/include" % args.sysroot)
538548

539-
llbuild_source_dir = get_llbuild_source_path(args)
540-
build_with_cmake(args, flags, llbuild_source_dir, args.llbuild_build_dir)
541-
542-
def build_tsc(args):
543-
note("Building TSC")
544-
args.tsc_build_dir = os.path.join(args.target_dir, "tsc")
545-
546-
cmake_flags = []
547-
if platform.system() == 'Darwin':
548-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
549-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
550-
551-
build_with_cmake(args, cmake_flags, args.tsc_source_dir, args.tsc_build_dir)
549+
args.source_dirs["llbuild"] = get_llbuild_source_path(args)
550+
build_with_cmake(args, flags, args.source_dirs["llbuild"], args.build_dirs["llbuild"])
552551

553-
def build_swift_argument_parser(args):
554-
note("Building swift-argument-parser")
555-
args.swift_argument_parser_build_dir = os.path.join(args.target_dir, "swift-argument-parser")
552+
def build_dependency(args, target_name, common_cmake_flags = [], non_darwin_cmake_flags = []):
553+
note("Building " + target_name)
554+
args.build_dirs[target_name] = os.path.join(args.target_dir, target_name)
556555

557-
cmake_flags = []
558-
if platform.system() == 'Darwin':
559-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
560-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
561-
562-
cmake_flags.append("-DBUILD_TESTING=NO")
563-
cmake_flags.append("-DBUILD_EXAMPLES=NO")
564-
build_with_cmake(args, cmake_flags, args.swift_argument_parser_source_dir, args.swift_argument_parser_build_dir)
565-
566-
def build_yams(args):
567-
note("Building Yams")
568-
args.yams_build_dir = os.path.join(args.target_dir, "yams")
569-
570-
cmake_flags = []
556+
cmake_flags = common_cmake_flags
571557
if platform.system() == 'Darwin':
572558
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
573559
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
574560
else:
575-
if args.foundation_build_dir:
576-
cmake_flags.append(get_foundation_cmake_arg(args))
577-
578-
build_with_cmake(args, cmake_flags, args.yams_source_dir, args.yams_build_dir)
579-
580-
def build_swift_driver(args):
581-
note("Building SwiftDriver")
582-
args.swift_driver_build_dir = os.path.join(args.target_dir, "swift-driver")
583-
584-
cmake_flags = [
585-
get_llbuild_cmake_arg(args),
586-
"-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
587-
"-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
588-
"-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
589-
]
590-
if platform.system() == 'Darwin':
591-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
592-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
593-
594-
build_with_cmake(args, cmake_flags, args.swift_driver_source_dir, args.swift_driver_build_dir)
595-
596-
def build_swift_crypto(args):
597-
note("Building SwiftCrypto")
598-
args.swift_crypto_build_dir = os.path.join(args.target_dir, "swift-crypto")
599-
600-
cmake_flags = []
601-
if platform.system() == 'Darwin':
602-
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
603-
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
561+
cmake_flags += non_darwin_cmake_flags
604562

605-
build_with_cmake(args, cmake_flags, args.swift_crypto_source_dir, args.swift_crypto_build_dir)
563+
build_with_cmake(args, cmake_flags, args.source_dirs[target_name], args.build_dirs[target_name])
606564

607565
def add_rpath_for_cmake_build(args, rpath):
608566
"Adds the given rpath to the CMake-built swift-build"
@@ -617,11 +575,11 @@ def build_swiftpm_with_cmake(args):
617575

618576
cmake_flags = [
619577
get_llbuild_cmake_arg(args),
620-
"-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
621-
"-DYams_DIR=" + os.path.join(args.yams_build_dir, "cmake/modules"),
622-
"-DArgumentParser_DIR=" + os.path.join(args.swift_argument_parser_build_dir, "cmake/modules"),
623-
"-DSwiftDriver_DIR=" + os.path.join(args.swift_driver_build_dir, "cmake/modules"),
624-
"-DSwiftCrypto_DIR=" + os.path.join(args.swift_crypto_build_dir, "cmake/modules"),
578+
"-DTSC_DIR=" + os.path.join(args.build_dirs["tsc"], "cmake/modules"),
579+
"-DYams_DIR=" + os.path.join(args.build_dirs["yams"], "cmake/modules"),
580+
"-DArgumentParser_DIR=" + os.path.join(args.build_dirs["swift-argument-parser"], "cmake/modules"),
581+
"-DSwiftDriver_DIR=" + os.path.join(args.build_dirs["swift-driver"], "cmake/modules"),
582+
"-DSwiftCrypto_DIR=" + os.path.join(args.build_dirs["swift-crypto"], "cmake/modules"),
625583
]
626584

627585
if platform.system() == 'Darwin':
@@ -631,13 +589,13 @@ def build_swiftpm_with_cmake(args):
631589
build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir)
632590

633591
if args.llbuild_link_framework:
634-
add_rpath_for_cmake_build(args, args.llbuild_build_dir)
592+
add_rpath_for_cmake_build(args, args.build_dirs["llbuild"])
635593

636594
if platform.system() == "Darwin":
637-
add_rpath_for_cmake_build(args, os.path.join(args.yams_build_dir, "lib"))
638-
add_rpath_for_cmake_build(args, os.path.join(args.swift_argument_parser_build_dir, "lib"))
639-
add_rpath_for_cmake_build(args, os.path.join(args.swift_driver_build_dir, "lib"))
640-
add_rpath_for_cmake_build(args, os.path.join(args.swift_crypto_build_dir, "lib"))
595+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["yams"], "lib"))
596+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-argument-parser"], "lib"))
597+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-driver"], "lib"))
598+
add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-crypto"], "lib"))
641599

642600
def build_swiftpm_with_swiftpm(args, integrated_swift_driver):
643601
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
@@ -702,9 +660,9 @@ def get_foundation_cmake_arg(args):
702660
def get_llbuild_cmake_arg(args):
703661
"""Returns the CMake argument to the LLBuild framework/binary to use for bulding SwiftPM."""
704662
if args.llbuild_link_framework:
705-
return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args.llbuild_build_dir
663+
return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args.build_dirs["llbuild"]
706664
else:
707-
llbuild_dir = os.path.join(args.llbuild_build_dir, "cmake/modules")
665+
llbuild_dir = os.path.join(args.build_dirs["llbuild"], "cmake/modules")
708666
return "-DLLBuild_DIR=" + llbuild_dir
709667

710668
def get_llbuild_source_path(args):
@@ -729,13 +687,13 @@ def get_swiftpm_env_cmd(args):
729687

730688
if args.bootstrap:
731689
libs_joined = ":".join([
732-
os.path.join(args.bootstrap_dir, "lib"),
733-
os.path.join(args.tsc_build_dir, "lib"),
734-
os.path.join(args.llbuild_build_dir, "lib"),
735-
os.path.join(args.yams_build_dir, "lib"),
736-
os.path.join(args.swift_argument_parser_build_dir, "lib"),
737-
os.path.join(args.swift_driver_build_dir, "lib"),
738-
os.path.join(args.swift_crypto_build_dir, "lib"),
690+
os.path.join(args.bootstrap_dir, "lib"),
691+
os.path.join(args.build_dirs["tsc"], "lib"),
692+
os.path.join(args.build_dirs["llbuild"], "lib"),
693+
os.path.join(args.build_dirs["yams"], "lib"),
694+
os.path.join(args.build_dirs["swift-argument-parser"], "lib"),
695+
os.path.join(args.build_dirs["swift-driver"], "lib"),
696+
os.path.join(args.build_dirs["swift-crypto"], "lib"),
739697
] + args.target_info["paths"]["runtimeLibraryPaths"])
740698

741699
if platform.system() == 'Darwin':
@@ -761,8 +719,8 @@ def get_swiftpm_flags(args):
761719

762720
if args.llbuild_link_framework:
763721
build_flags.extend([
764-
"-Xswiftc", "-F" + args.llbuild_build_dir,
765-
"-Xlinker", "-F" + args.llbuild_build_dir,
722+
"-Xswiftc", "-F" + args.build_dirs["llbuild"],
723+
"-Xlinker", "-F" + args.build_dirs["llbuild"],
766724

767725
# For LLBuild in Xcode.
768726
"-Xlinker", "-rpath",

0 commit comments

Comments
 (0)