@@ -37,19 +37,19 @@ def main():
37
37
if not args .skip_build :
38
38
build_swift_toolchain (workspace , args )
39
39
40
- clang_flags = []
41
- if args .clang_source_path or args .clangc :
42
- clangc = args .clangc
40
+ additional_runner_args = []
41
+ if args .clang_source_path or args .clang :
42
+ clang = args .clang
43
43
if args .clang_source_path :
44
- clangc = build_clang (workspace , args . clang_source_path )
45
- if clangc :
46
- clang_flags = ['--clangc ' , clangc ]
44
+ clang = build_clang (workspace , args )
45
+ if clang :
46
+ additional_runner_args = ['--clang ' , clang ]
47
47
48
48
if not args .skip_runner :
49
49
if args .test_incremental :
50
- execute_build_incremental (workspace , args , clang_flags )
50
+ execute_build_incremental (workspace , args , additional_runner_args )
51
51
else :
52
- execute_runner (workspace , args , clang_flags )
52
+ execute_runner (workspace , args , additional_runner_args )
53
53
54
54
return 0
55
55
@@ -65,10 +65,10 @@ def parse_args():
65
65
parser .add_argument ("--verbose" ,
66
66
action = 'store_true' )
67
67
parser .add_argument ("--assertions" ,
68
- help = 'Build Swift with asserts' ,
68
+ help = 'Build Swift and/or Clang with asserts' ,
69
69
action = 'store_true' )
70
70
parser .add_argument ("--debug" ,
71
- help = 'Build Swift in debug mode' ,
71
+ help = 'Build Swift and/or Clang in debug mode' ,
72
72
action = 'store_true' )
73
73
parser .add_argument ("--filter-by-tag" ,
74
74
metavar = 'TAG' ,
@@ -89,9 +89,9 @@ def parse_args():
89
89
'executable from the given path and uses it to '
90
90
'build Xcode projects' ,
91
91
type = os .path .abspath )
92
- clang_arguments .add_argument ('--clangc ' ,
92
+ clang_arguments .add_argument ('--clang ' ,
93
93
metavar = "PATH" ,
94
- help = 'clang executable' ,
94
+ help = 'clang executable to build Xcode projects ' ,
95
95
type = os .path .abspath )
96
96
parser .add_argument ('--skip-build' ,
97
97
action = 'store_true' )
@@ -180,7 +180,7 @@ def get_sandbox_profile_flags_test():
180
180
return sandbox_flags
181
181
182
182
183
- def execute_runner (workspace , args , clang_flags ):
183
+ def execute_runner (workspace , args , additional_runner_args ):
184
184
swiftc_path = get_swiftc_path (workspace , args .swiftc )
185
185
if args .test :
186
186
action_filter = 'action.startswith("TestSwiftPackage")'
@@ -212,12 +212,12 @@ def execute_runner(workspace, args, clang_flags):
212
212
if args .build_config :
213
213
runner_command += ['--build-config=%s' % args .build_config ]
214
214
215
- runner_command += clang_flags
215
+ runner_command += additional_runner_args
216
216
217
217
common .check_execute (runner_command , timeout = 9999999 )
218
218
219
219
220
- def execute_build_incremental (workspace , args , clang_flags ):
220
+ def execute_build_incremental (workspace , args , additional_runner_args ):
221
221
swiftc_path = get_swiftc_path (workspace , args .swiftc )
222
222
runner_command = [
223
223
'./build_incremental.py' ,
@@ -232,7 +232,7 @@ def execute_build_incremental(workspace, args, clang_flags):
232
232
]
233
233
if args .sandbox :
234
234
runner_command += get_sandbox_profile_flags ()
235
- runner_command += clang_flags
235
+ runner_command += additional_runner_args
236
236
common .check_execute (runner_command , timeout = 9999999 )
237
237
238
238
def get_preset_name (args ):
@@ -292,26 +292,31 @@ def build_swift_toolchain(workspace, args):
292
292
raise common .UnsupportedPlatform
293
293
common .check_execute (build_command , timeout = 9999999 )
294
294
295
- def build_clang (workspace , source_path ):
295
+ def build_clang (workspace , args ):
296
296
build_path = os .path .join (workspace , 'build_clang_source_compat' )
297
- source_path = os .path .join (source_path , 'llvm' )
297
+ source_path = os .path .join (args . clang_source_path , 'llvm' )
298
298
common .check_execute (['mkdir' , '-p' , build_path ])
299
299
300
300
with common .DirectoryContext (build_path ):
301
- try :
302
- ninja_path = common .check_execute_output (['xcrun' , '--find' , 'ninja' ]).strip ().decode ("utf-8" )
303
- cmake_command = [
304
- 'xcrun' , 'cmake' , '-G' , 'Ninja' ,
305
- '-DCMAKE_MAKE_PROGRAM={}' .format (ninja_path ),
306
- '-DLLVM_ENABLE_PROJECTS=clang;llvm' ,
307
- '-DCMAKE_BUILD_TYPE=Release' ,
308
- '-DCLANG_APPLE_BUILD_VERSION_STRING=13000000' ,
309
- '-DLLVM_TARGETS_TO_BUILD=X86;AArch64;ARM' ,
310
- source_path ]
311
- common .check_execute (cmake_command )
312
- common .check_execute (['xcrun' , 'ninja' ])
313
- except :
314
- raise
301
+ # Get path to the ninja binary
302
+ ninja_path = common .check_execute_output (['xcrun' , '--find' , 'ninja' ]).strip ().decode ("utf-8" )
303
+
304
+ build_type = "Debug" if args .debug else "Release"
305
+ assert_on = "True" if args .assertions or args .debug else "False"
306
+
307
+ # Generate a Ninja project with CMake
308
+ cmake_command = [
309
+ 'xcrun' , 'cmake' , '-G' , 'Ninja' ,
310
+ '-DCMAKE_MAKE_PROGRAM={}' .format (ninja_path ),
311
+ '-DLLVM_ENABLE_PROJECTS=clang;llvm' ,
312
+ '-DCMAKE_BUILD_TYPE={}' .format (build_type ),
313
+ '-DLLVM_ENABLE_ASSERTIONS={}' .format (assert_on ),
314
+ '-DLLVM_TARGETS_TO_BUILD=X86;AArch64;ARM' ,
315
+ source_path ]
316
+ common .check_execute (cmake_command )
317
+
318
+ # Build the Ninja project to produce the clang executable
319
+ common .check_execute (['xcrun' , 'ninja' ])
315
320
316
321
return os .path .join (build_path , 'bin' , 'clang' )
317
322
0 commit comments