@@ -382,9 +382,9 @@ def build_using_cmake(args, toolchain_bin, build_dir):
382
382
else :
383
383
swift_flags .append ('-O' )
384
384
385
+ base_cmake_flags = []
385
386
for target in targets :
386
387
swift_flags .append ('-target %s' % target )
387
- base_cmake_flags = ['-DCMAKE_Swift_FLAGS=' + ' ' .join (swift_flags )]
388
388
if platform .system () == 'Darwin' :
389
389
base_cmake_flags .append ('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target )
390
390
@@ -394,17 +394,22 @@ def build_using_cmake(args, toolchain_bin, build_dir):
394
394
dependencies_dir = os .path .join (driver_dir , 'dependencies' )
395
395
396
396
# LLBuild
397
- build_llbuild_using_cmake (args , target , swiftc_exec , dependencies_dir , base_cmake_flags )
397
+ build_llbuild_using_cmake (args , target , swiftc_exec , dependencies_dir ,
398
+ base_cmake_flags , swift_flags )
398
399
# TSC
399
- build_tsc_using_cmake (args , target , swiftc_exec , dependencies_dir , base_cmake_flags )
400
+ build_tsc_using_cmake (args , target , swiftc_exec , dependencies_dir ,
401
+ base_cmake_flags , swift_flags )
400
402
# Argument Parser
401
- build_argument_parser_using_cmake (args , target , swiftc_exec , dependencies_dir , base_cmake_flags )
403
+ build_argument_parser_using_cmake (args , target , swiftc_exec , dependencies_dir ,
404
+ base_cmake_flags , swift_flags )
402
405
# Yams
403
- build_yams_using_cmake (args , target , swiftc_exec , dependencies_dir , base_cmake_flags )
406
+ build_yams_using_cmake (args , target , swiftc_exec , dependencies_dir ,
407
+ base_cmake_flags , swift_flags )
404
408
# SwiftDriver
405
- build_swift_driver_using_cmake (args , target , swiftc_exec , driver_dir , base_cmake_flags )
409
+ build_swift_driver_using_cmake (args , target , swiftc_exec , driver_dir ,
410
+ base_cmake_flags , swift_flags )
406
411
407
- def build_llbuild_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags ):
412
+ def build_llbuild_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags , swift_flags ):
408
413
print ('Building llbuild for target: %s' % target )
409
414
llbuild_source_dir = os .path .join (os .path .dirname (args .package_path ), 'llbuild' )
410
415
llbuild_build_dir = os .path .join (build_dir , 'llbuild' )
@@ -426,73 +431,81 @@ def build_llbuild_using_cmake(args, target, swiftc_exec, build_dir, base_cmake_f
426
431
# on some machines. This is also Darwin-specific...
427
432
if platform .system () == 'Darwin' :
428
433
llbuild_cmake_flags .append ('-DSQLite3_LIBRARY=%s/usr/lib/libsqlite3.tbd' % args .sysroot )
434
+ llbuild_swift_flags = swift_flags [:]
429
435
430
436
# Build only a subset of llbuild (in particular skipping tests)
431
- cmake_build (args , swiftc_exec , llbuild_cmake_flags , llbuild_source_dir , llbuild_build_dir , 'products/all' )
437
+ cmake_build (args , swiftc_exec , llbuild_cmake_flags , llbuild_swift_flags ,
438
+ llbuild_source_dir , llbuild_build_dir , 'products/all' )
432
439
433
- def build_tsc_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags ):
440
+ def build_tsc_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags , swift_flags ):
434
441
print ('Building TSC for target: %s' % target )
435
442
tsc_source_dir = os .path .join (os .path .dirname (args .package_path ), 'swift-tools-support-core' )
436
443
tsc_build_dir = os .path .join (build_dir , 'swift-tools-support-core' )
437
- cmake_build (args , swiftc_exec , base_cmake_flags , tsc_source_dir , tsc_build_dir )
444
+ tsc_swift_flags = swift_flags [:]
445
+ cmake_build (args , swiftc_exec , base_cmake_flags , tsc_swift_flags ,
446
+ tsc_source_dir , tsc_build_dir )
438
447
439
- def build_yams_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags ):
448
+ def build_yams_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags , swift_flags ):
440
449
print ('Building Yams for target: %s' % target )
441
450
yams_source_dir = os .path .join (os .path .dirname (args .package_path ), 'yams' )
442
451
yams_build_dir = os .path .join (build_dir , 'yams' )
443
- yams_flags = base_cmake_flags + [
452
+ yams_cmake_flags = base_cmake_flags + [
444
453
'-DCMAKE_C_COMPILER:=clang' ,
445
454
'-DBUILD_SHARED_LIBS=OFF' ]
446
455
447
456
if platform .system () == 'Darwin' :
448
- yams_flags .append ('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target )
449
- yams_flags .append ('-DCMAKE_C_FLAGS=-target %s' % target )
457
+ yams_cmake_flags .append ('-DCMAKE_OSX_DEPLOYMENT_TARGET=%s' % macos_deployment_target )
458
+ yams_cmake_flags .append ('-DCMAKE_C_FLAGS=-target %s' % target )
450
459
else :
451
- yams_flags .append ('-DCMAKE_C_FLAGS=-fPIC -target %s' % target )
460
+ yams_cmake_flags .append ('-DCMAKE_C_FLAGS=-fPIC -target %s' % target )
452
461
if args .dispatch_build_dir :
453
- yams_flags .append (get_dispatch_cmake_arg (args ))
462
+ yams_cmake_flags .append (get_dispatch_cmake_arg (args ))
454
463
455
464
if args .foundation_build_dir :
456
- yams_flags .append (get_foundation_cmake_arg (args ))
465
+ yams_cmake_flags .append (get_foundation_cmake_arg (args ))
466
+ yams_swift_flags = swift_flags [:]
467
+ cmake_build (args , swiftc_exec , yams_cmake_flags , yams_swift_flags ,
468
+ yams_source_dir , yams_build_dir )
457
469
458
- cmake_build (args , swiftc_exec , yams_flags , yams_source_dir , yams_build_dir )
459
-
460
- def build_argument_parser_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags ):
470
+ def build_argument_parser_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags , swift_flags ):
461
471
print ('Building Argument Parser for target: %s' % target )
462
472
parser_source_dir = os .path .join (os .path .dirname (args .package_path ), 'swift-argument-parser' )
463
473
parser_build_dir = os .path .join (build_dir , 'swift-argument-parser' )
464
474
custom_flags = ['-DBUILD_TESTING=NO' , '-DBUILD_EXAMPLES=NO' ]
465
- parser_flags = base_cmake_flags + custom_flags
466
- cmake_build (args , swiftc_exec , parser_flags , parser_source_dir , parser_build_dir )
475
+ parser_cmake_flags = base_cmake_flags + custom_flags
476
+ parser_swift_flags = swift_flags [:]
477
+ cmake_build (args , swiftc_exec , parser_cmake_flags , parser_swift_flags ,
478
+ parser_source_dir , parser_build_dir )
467
479
return
468
480
469
- def build_swift_driver_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags ):
481
+ def build_swift_driver_using_cmake (args , target , swiftc_exec , build_dir , base_cmake_flags , swift_flags ):
470
482
print ('Building Swift Driver for target: %s' % target )
471
483
driver_source_dir = args .package_path
472
484
driver_build_dir = build_dir
473
485
dependencies_dir = os .path .join (build_dir , 'dependencies' )
474
486
# TODO: Enable Library Evolution
475
- swift_flags = ''
487
+ driver_swift_flags = swift_flags [:]
476
488
flags = [
477
489
'-DLLBuild_DIR=' + os .path .join (os .path .join (dependencies_dir , 'llbuild' ), 'cmake/modules' ),
478
490
'-DTSC_DIR=' + os .path .join (os .path .join (dependencies_dir , 'swift-tools-support-core' ), 'cmake/modules' ),
479
491
'-DYams_DIR=' + os .path .join (os .path .join (dependencies_dir , 'yams' ), 'cmake/modules' ),
480
- '-DArgumentParser_DIR=' + os .path .join (os .path .join (dependencies_dir , 'swift-argument-parser' ), 'cmake/modules' ),
481
- swift_flags
482
- ]
492
+ '-DArgumentParser_DIR=' + os .path .join (os .path .join (dependencies_dir , 'swift-argument-parser' ), 'cmake/modules' )]
493
+ #FIXME: Building with testing enable to allow @testable import of SwiftDriver
494
+ driver_swift_flags . append ( '-enable-testing' )
483
495
driver_cmake_flags = base_cmake_flags + flags
484
- cmake_build (args , swiftc_exec , driver_cmake_flags , driver_source_dir , driver_build_dir )
496
+ cmake_build (args , swiftc_exec , driver_cmake_flags , driver_swift_flags ,
497
+ driver_source_dir , driver_build_dir )
485
498
486
- def cmake_build (args , swiftc_exec , cmake_args , source_path , build_dir , ninja_target = None ):
499
+ def cmake_build (args , swiftc_exec , cmake_args , swift_flags , source_path ,
500
+ build_dir , ninja_target = None ):
487
501
"""Configure with CMake and build with Ninja"""
488
- swift_flags = ''
489
502
if args .sysroot :
490
- swift_flags = '-sdk %s' % args .sysroot
503
+ swift_flags . append ( '-sdk %s' % args .sysroot )
491
504
cmd = [
492
505
args .cmake_bin , '-G' , 'Ninja' ,
493
506
'-DCMAKE_MAKE_PROGRAM=%s' % args .ninja_bin ,
494
507
'-DCMAKE_BUILD_TYPE:=Release' ,
495
- '-DCMAKE_Swift_FLAGS=' + swift_flags ,
508
+ '-DCMAKE_Swift_FLAGS=' + ' ' . join ( swift_flags ) ,
496
509
'-DCMAKE_Swift_COMPILER:=%s' % (swiftc_exec ),
497
510
] + cmake_args + [source_path ]
498
511
if args .verbose :
0 commit comments