@@ -169,14 +169,16 @@ def add_test_args(parser):
169
169
170
170
def parse_global_args (args ):
171
171
"""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" )
180
182
181
183
if platform .system () == 'Darwin' :
182
184
args .sysroot = call_output (["xcrun" , "--sdk" , "macosx" , "--show-sdk-path" ], verbose = args .verbose )
@@ -193,8 +195,8 @@ def parse_build_args(args):
193
195
if args .foundation_build_dir :
194
196
args .foundation_build_dir = os .path .abspath (args .foundation_build_dir )
195
197
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" ] )
198
200
199
201
args .swiftc_path = get_swiftc_path (args )
200
202
args .clang_path = get_clang_path (args )
@@ -315,15 +317,23 @@ def build(args):
315
317
parse_build_args (args )
316
318
317
319
# 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 :
319
321
build_llbuild (args )
320
322
321
323
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" )
327
337
build_swiftpm_with_cmake (args )
328
338
329
339
build_swiftpm_with_swiftpm (args ,integrated_swift_driver = False )
@@ -517,9 +527,9 @@ def build_llbuild(args):
517
527
note ("Building llbuild" )
518
528
519
529
# 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" )
521
531
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" )
523
533
mkdir_p (api_dir )
524
534
call (["touch" , "codemodel-v2" ], cwd = api_dir , verbose = args .verbose )
525
535
@@ -536,73 +546,21 @@ def build_llbuild(args):
536
546
if args .sysroot :
537
547
flags .append ("-DSQLite3_INCLUDE_DIR=%s/usr/include" % args .sysroot )
538
548
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" ])
552
551
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 )
556
555
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
571
557
if platform .system () == 'Darwin' :
572
558
cmake_flags .append ("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target (args ), g_macos_deployment_target ))
573
559
cmake_flags .append ("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target )
574
560
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
604
562
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 ] )
606
564
607
565
def add_rpath_for_cmake_build (args , rpath ):
608
566
"Adds the given rpath to the CMake-built swift-build"
@@ -617,11 +575,11 @@ def build_swiftpm_with_cmake(args):
617
575
618
576
cmake_flags = [
619
577
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" ),
625
583
]
626
584
627
585
if platform .system () == 'Darwin' :
@@ -631,13 +589,13 @@ def build_swiftpm_with_cmake(args):
631
589
build_with_cmake (args , cmake_flags , args .project_root , args .bootstrap_dir )
632
590
633
591
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" ] )
635
593
636
594
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" ))
641
599
642
600
def build_swiftpm_with_swiftpm (args , integrated_swift_driver ):
643
601
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
@@ -702,9 +660,9 @@ def get_foundation_cmake_arg(args):
702
660
def get_llbuild_cmake_arg (args ):
703
661
"""Returns the CMake argument to the LLBuild framework/binary to use for bulding SwiftPM."""
704
662
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" ]
706
664
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" )
708
666
return "-DLLBuild_DIR=" + llbuild_dir
709
667
710
668
def get_llbuild_source_path (args ):
@@ -729,13 +687,13 @@ def get_swiftpm_env_cmd(args):
729
687
730
688
if args .bootstrap :
731
689
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" ),
739
697
] + args .target_info ["paths" ]["runtimeLibraryPaths" ])
740
698
741
699
if platform .system () == 'Darwin' :
@@ -761,8 +719,8 @@ def get_swiftpm_flags(args):
761
719
762
720
if args .llbuild_link_framework :
763
721
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" ] ,
766
724
767
725
# For LLBuild in Xcode.
768
726
"-Xlinker" , "-rpath" ,
0 commit comments