@@ -167,14 +167,16 @@ def add_test_args(parser):
167
167
168
168
def parse_global_args (args ):
169
169
"""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" )
178
180
179
181
if platform .system () == 'Darwin' :
180
182
args .sysroot = call_output (["xcrun" , "--sdk" , "macosx" , "--show-sdk-path" ], verbose = args .verbose )
@@ -191,8 +193,8 @@ def parse_build_args(args):
191
193
if args .foundation_build_dir :
192
194
args .foundation_build_dir = os .path .abspath (args .foundation_build_dir )
193
195
194
- if args .llbuild_build_dir :
195
- args .llbuild_build_dir = os .path .abspath (args .llbuild_build_dir )
196
+ if "llbuild" in args .build_dirs :
197
+ args .build_dirs [ "llbuild" ] = os .path .abspath (args .build_dirs [ "llbuild" ] )
196
198
197
199
args .swiftc_path = get_swiftc_path (args )
198
200
args .clang_path = get_clang_path (args )
@@ -313,15 +315,23 @@ def build(args):
313
315
parse_build_args (args )
314
316
315
317
# Build llbuild if its build path is not passed in.
316
- if not args .llbuild_build_dir :
318
+ if not "llbuild" in args .build_dirs :
317
319
build_llbuild (args )
318
320
319
321
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 )
322
+ # tsc, swift-argument-parser, and yams are depended on by swift-driver, so they must be built first.
323
+ build_dependency (args , "tsc" )
324
+ build_dependency (args , "swift-argument-parser" , ["-DBUILD_TESTING=NO" , "-DBUILD_EXAMPLES=NO" ])
325
+ build_dependency (args , "yams" , [], [get_foundation_cmake_arg (args )] if args .foundation_build_dir else [])
326
+
327
+ swift_driver_cmake_flags = [
328
+ get_llbuild_cmake_arg (args ),
329
+ "-DTSC_DIR=" + os .path .join (args .build_dirs ["tsc" ], "cmake/modules" ),
330
+ "-DYams_DIR=" + os .path .join (args .build_dirs ["yams" ], "cmake/modules" ),
331
+ "-DArgumentParser_DIR=" + os .path .join (args .build_dirs ["swift-argument-parser" ], "cmake/modules" ),
332
+ ]
333
+ build_dependency (args , "swift-driver" , swift_driver_cmake_flags )
334
+ build_dependency (args , "swift-crypto" )
325
335
build_swiftpm_with_cmake (args )
326
336
327
337
build_swiftpm_with_swiftpm (args ,integrated_swift_driver = False )
@@ -486,9 +496,9 @@ def build_llbuild(args):
486
496
note ("Building llbuild" )
487
497
488
498
# 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" )
499
+ args .build_dirs [ "llbuild" ] = os .path .join (args .target_dir , "llbuild" )
490
500
491
- api_dir = os .path .join (args .llbuild_build_dir , ".cmake/api/v1/query" )
501
+ api_dir = os .path .join (args .build_dirs [ "llbuild" ] , ".cmake/api/v1/query" )
492
502
mkdir_p (api_dir )
493
503
call (["touch" , "codemodel-v2" ], cwd = api_dir , verbose = args .verbose )
494
504
@@ -505,73 +515,21 @@ def build_llbuild(args):
505
515
if args .sysroot :
506
516
flags .append ("-DSQLite3_INCLUDE_DIR=%s/usr/include" % args .sysroot )
507
517
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 )
518
+ args .source_dirs ["llbuild" ] = get_llbuild_source_path (args )
519
+ build_with_cmake (args , flags , args .source_dirs ["llbuild" ], args .build_dirs ["llbuild" ])
521
520
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" )
521
+ def build_dependency (args , target_name , common_cmake_flags = [], non_darwin_cmake_flags = [] ):
522
+ note ("Building " + target_name )
523
+ args .build_dirs [ target_name ] = os .path .join (args .target_dir , target_name )
525
524
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 = []
525
+ cmake_flags = common_cmake_flags
540
526
if platform .system () == 'Darwin' :
541
527
cmake_flags .append ("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target (args ), g_macos_deployment_target ))
542
528
cmake_flags .append ("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target )
543
529
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 )
530
+ cmake_flags += non_darwin_cmake_flags
573
531
574
- build_with_cmake (args , cmake_flags , args .swift_crypto_source_dir , args .swift_crypto_build_dir )
532
+ build_with_cmake (args , cmake_flags , args .source_dirs [ target_name ] , args .build_dirs [ target_name ] )
575
533
576
534
def add_rpath_for_cmake_build (args , rpath ):
577
535
"Adds the given rpath to the CMake-built swift-build"
@@ -586,11 +544,11 @@ def build_swiftpm_with_cmake(args):
586
544
587
545
cmake_flags = [
588
546
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" ),
547
+ "-DTSC_DIR=" + os .path .join (args .build_dirs [ "tsc" ], "cmake/modules" ),
548
+ "-DYams_DIR=" + os .path .join (args .build_dirs [ "yams" ], "cmake/modules" ),
549
+ "-DArgumentParser_DIR=" + os .path .join (args .build_dirs [ "swift-argument-parser" ] , "cmake/modules" ),
550
+ "-DSwiftDriver_DIR=" + os .path .join (args .build_dirs [ "swift-driver" ], "cmake/modules" ),
551
+ "-DSwiftCrypto_DIR=" + os .path .join (args .build_dirs [ "swift-crypto" ], "cmake/modules" ),
594
552
]
595
553
596
554
if platform .system () == 'Darwin' :
@@ -600,13 +558,13 @@ def build_swiftpm_with_cmake(args):
600
558
build_with_cmake (args , cmake_flags , args .project_root , args .bootstrap_dir )
601
559
602
560
if args .llbuild_link_framework :
603
- add_rpath_for_cmake_build (args , args .llbuild_build_dir )
561
+ add_rpath_for_cmake_build (args , args .build_dirs [ "llbuild" ] )
604
562
605
563
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" ))
564
+ add_rpath_for_cmake_build (args , os .path .join (args .build_dirs [ "yams" ], "lib" ))
565
+ add_rpath_for_cmake_build (args , os .path .join (args .build_dirs [ "swift-argument-parser" ] , "lib" ))
566
+ add_rpath_for_cmake_build (args , os .path .join (args .build_dirs [ "swift-driver" ], "lib" ))
567
+ add_rpath_for_cmake_build (args , os .path .join (args .build_dirs [ "swift-crypto" ], "lib" ))
610
568
611
569
def build_swiftpm_with_swiftpm (args , integrated_swift_driver ):
612
570
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
@@ -671,9 +629,9 @@ def get_foundation_cmake_arg(args):
671
629
def get_llbuild_cmake_arg (args ):
672
630
"""Returns the CMake argument to the LLBuild framework/binary to use for bulding SwiftPM."""
673
631
if args .llbuild_link_framework :
674
- return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args .llbuild_build_dir
632
+ return "-DCMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS=%s" % args .build_dirs [ "llbuild" ]
675
633
else :
676
- llbuild_dir = os .path .join (args .llbuild_build_dir , "cmake/modules" )
634
+ llbuild_dir = os .path .join (args .build_dirs [ "llbuild" ] , "cmake/modules" )
677
635
return "-DLLBuild_DIR=" + llbuild_dir
678
636
679
637
def get_llbuild_source_path (args ):
@@ -698,13 +656,13 @@ def get_swiftpm_env_cmd(args):
698
656
699
657
if args .bootstrap :
700
658
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" ),
659
+ os .path .join (args .bootstrap_dir , "lib" ),
660
+ os .path .join (args .build_dirs [ "tsc" ], "lib" ),
661
+ os .path .join (args .build_dirs [ "llbuild" ], "lib" ),
662
+ os .path .join (args .build_dirs [ "yams" ], "lib" ),
663
+ os .path .join (args .build_dirs [ "swift-argument-parser" ] , "lib" ),
664
+ os .path .join (args .build_dirs [ "swift-driver" ], "lib" ),
665
+ os .path .join (args .build_dirs [ "swift-crypto" ], "lib" ),
708
666
] + args .target_info ["paths" ]["runtimeLibraryPaths" ])
709
667
710
668
if platform .system () == 'Darwin' :
@@ -730,8 +688,8 @@ def get_swiftpm_flags(args):
730
688
731
689
if args .llbuild_link_framework :
732
690
build_flags .extend ([
733
- "-Xswiftc" , "-F" + args .llbuild_build_dir ,
734
- "-Xlinker" , "-F" + args .llbuild_build_dir ,
691
+ "-Xswiftc" , "-F" + args .build_dirs [ "llbuild" ] ,
692
+ "-Xlinker" , "-F" + args .build_dirs [ "llbuild" ] ,
735
693
736
694
# For LLBuild in Xcode.
737
695
"-Xlinker" , "-rpath" ,
0 commit comments