15
15
16
16
PACKAGE_DIR = os .path .dirname (os .path .realpath (__file__ ))
17
17
WORKSPACE_DIR = os .path .dirname (PACKAGE_DIR )
18
+ EXAMPLES_DIR = os .path .join (PACKAGE_DIR , "Examples" )
18
19
SOURCES_DIR = os .path .join (PACKAGE_DIR , "Sources" )
19
20
SWIFTSYNTAX_DIR = os .path .join (SOURCES_DIR , "SwiftSyntax" )
20
21
SWIFTSYNTAX_DOCUMENTATION_DIR = \
@@ -401,13 +402,13 @@ def clear_gyb_files_from_previous_run(
401
402
402
403
403
404
def get_swiftpm_invocation (
404
- toolchain : str , action : str , build_dir : Optional [str ],
405
+ toolchain : str , action : str , package_dir : str , build_dir : Optional [str ],
405
406
multiroot_data_file : Optional [str ], release : bool
406
407
) -> List [str ]:
407
408
swift_exec = os .path .join (toolchain , "bin" , "swift" )
408
409
409
410
swiftpm_call = [swift_exec , action ]
410
- swiftpm_call .extend (["--package-path" , PACKAGE_DIR ])
411
+ swiftpm_call .extend (["--package-path" , package_dir ])
411
412
if platform .system () != "Darwin" :
412
413
swiftpm_call .extend (["--enable-test-discovery" ])
413
414
if release :
@@ -421,9 +422,12 @@ def get_swiftpm_invocation(
421
422
422
423
423
424
class Builder (object ):
424
- swiftpm_call : List [str ]
425
425
verbose : bool
426
426
toolchain : str
427
+ build_dir : Optional [str ]
428
+ multiroot_data_file : Optional [str ]
429
+ release : bool
430
+ disable_sandbox : bool
427
431
428
432
def __init__ (
429
433
self ,
@@ -434,23 +438,38 @@ def __init__(
434
438
verbose : bool ,
435
439
disable_sandbox : bool = False ,
436
440
) -> None :
437
- self .swiftpm_call = get_swiftpm_invocation (
438
- toolchain = toolchain ,
439
- action = "build" ,
440
- build_dir = build_dir ,
441
- multiroot_data_file = multiroot_data_file ,
442
- release = release ,
443
- )
444
- if disable_sandbox :
445
- self .swiftpm_call .append ("--disable-sandbox" )
446
- if verbose :
447
- self .swiftpm_call .extend (["--verbose" ])
441
+ self .build_dir = build_dir
442
+ self .multiroot_data_file = multiroot_data_file
443
+ self .release = release
444
+ self .disable_sandbox = disable_sandbox
448
445
self .verbose = verbose
449
446
self .toolchain = toolchain
450
447
451
- def build (self , product_name : str ) -> None :
452
- print ("** Building " + product_name + " **" )
453
- command = list (self .swiftpm_call )
448
+ def __get_swiftpm_invocation (self , package_dir : str ) -> List [str ]:
449
+ invocation = get_swiftpm_invocation (
450
+ self .toolchain ,
451
+ "build" ,
452
+ package_dir ,
453
+ self .build_dir ,
454
+ self .multiroot_data_file ,
455
+ self .release
456
+ )
457
+ if self .disable_sandbox :
458
+ invocation .append ("--disable-sandbox" )
459
+ if self .verbose :
460
+ invocation .append ("--verbose" )
461
+ return invocation
462
+
463
+ def buildProduct (self , product_name : str ) -> None :
464
+ print ("** Building product " + product_name + " **" )
465
+ self .__build (PACKAGE_DIR , product_name )
466
+
467
+ def buildExample (self , example_name : str ) -> None :
468
+ print ("** Building example " + example_name + " **" )
469
+ self .__build (EXAMPLES_DIR , example_name )
470
+
471
+ def __build (self , package_dir : str , product_name : str ) -> None :
472
+ command = list (self .__get_swiftpm_invocation (package_dir ))
454
473
command .extend (["--product" , product_name ])
455
474
456
475
env = dict (os .environ )
@@ -599,6 +618,7 @@ def find_lit_test_helper_exec(
599
618
swiftpm_call = get_swiftpm_invocation (
600
619
toolchain = toolchain ,
601
620
action = "build" ,
621
+ package_dir = PACKAGE_DIR ,
602
622
build_dir = build_dir ,
603
623
multiroot_data_file = None ,
604
624
release = release ,
@@ -651,6 +671,7 @@ def run_xctests(toolchain: str, build_dir: Optional[str],
651
671
swiftpm_call = get_swiftpm_invocation (
652
672
toolchain = toolchain ,
653
673
action = "test" ,
674
+ package_dir = PACKAGE_DIR ,
654
675
build_dir = build_dir ,
655
676
multiroot_data_file = multiroot_data_file ,
656
677
release = release ,
@@ -738,9 +759,14 @@ def build_command(args: argparse.Namespace) -> None:
738
759
)
739
760
# Until rdar://53881101 is implemented, we cannot request a build of multiple
740
761
# targets simultaneously. For now, just build one product after the other.
741
- builder .build ("SwiftSyntax" )
742
- builder .build ("SwiftSyntaxParser" )
743
- builder .build ("SwiftSyntaxBuilder" )
762
+ builder .buildProduct ("SwiftSyntax" )
763
+ builder .buildProduct ("SwiftSyntaxParser" )
764
+ builder .buildProduct ("SwiftSyntaxBuilder" )
765
+
766
+ # Build examples
767
+ builder .buildExample ("AddOneToIntegerLiterals" )
768
+ builder .buildExample ("CodeGenerationUsingSwiftSyntaxBuilder" )
769
+ builder .buildExample ("MigrateToNewIfLetSyntax" )
744
770
except subprocess .CalledProcessError as e :
745
771
fail_for_called_process_error ("Building SwiftSyntax failed" , e )
746
772
@@ -756,7 +782,7 @@ def test_command(args: argparse.Namespace) -> None:
756
782
disable_sandbox = args .disable_sandbox ,
757
783
)
758
784
759
- builder .build ("lit-test-helper" )
785
+ builder .buildProduct ("lit-test-helper" )
760
786
761
787
run_tests (
762
788
toolchain = args .toolchain ,
0 commit comments