@@ -180,6 +180,7 @@ def install(args, build_dir):
180
180
# and libSwiftDriver, libSwiftOptions libraries
181
181
toolchain_bin = os .path .join (args .toolchain , 'bin' )
182
182
toolchain_lib = os .path .join (args .toolchain , 'lib' , 'swift' , 'macosx' )
183
+ toolchain_include = os .path .join (args .toolchain , 'include' , 'swift' )
183
184
universal_dir = os .path .join (build_dir , 'universal-apple-macos%s' % macos_deployment_target )
184
185
bin_dir = os .path .join (universal_dir , 'bin' )
185
186
lib_dir = os .path .join (universal_dir , 'lib' )
@@ -193,8 +194,15 @@ def install(args, build_dir):
193
194
# libSwiftDriver and libSwiftOptions
194
195
install_libraries (args , build_dir , lib_dir , toolchain_lib )
195
196
196
- # SwiftDriver.swiftmodule and SwiftOptions.swiftmodule
197
- install_modules (args , build_dir , toolchain_lib )
197
+ # Binary Swift Modules:
198
+ # swift-driver: SwiftDriver.swiftmodule, SwiftOptions.swiftmodule
199
+ # swift-argument-parser: ArgumentParser.swiftmodule
200
+ # swift-tools-support-core: TSCUtility.swiftmodule, TSCLibc.swiftmodule, TSCBasic.swiftmodule
201
+ install_binary_swift_modules (args , build_dir , toolchain_lib )
202
+
203
+ # Modulemaps for C Modules:
204
+ # llbuild, TSCclibc
205
+ install_c_module_includes (args , build_dir , toolchain_include )
198
206
199
207
def install_executables (args , build_dir , universal_bin_dir , toolchain_bin_dir ):
200
208
for exe in ['swift-driver' , 'swift-help' ]:
@@ -250,17 +258,52 @@ def install_libraries(args, build_dir, universal_lib_dir, toolchain_lib_dir):
250
258
subprocess .check_call (lipo_cmd )
251
259
install_binary (dylib_file , universal_lib_dir , toolchain_lib_dir , args .verbose )
252
260
253
- def install_modules (args , build_dir , toolchain_lib_dir ):
261
+ def install_binary_swift_modules (args , build_dir , toolchain_lib_dir ):
262
+ # The common subpath from a project's build directory to where its build products are found
263
+ product_subpath = 'swift'
264
+
265
+ # swift-driver
254
266
for module in ['SwiftDriver' , 'SwiftOptions' ]:
255
- toolchain_module_dir = os .path .join (toolchain_lib_dir , module + '.swiftmodule' )
256
- mkdir_p (toolchain_module_dir )
257
- for arch in macos_target_architectures :
258
- swift_dir = os .path .join (build_dir , arch + '-apple-macos' + macos_deployment_target ,
259
- 'swift-driver' , 'swift' )
260
- for fileext in ['.swiftmodule' , '.swiftdoc' ]:
261
- install_binary (module + fileext , swift_dir , toolchain_module_dir , args .verbose )
262
- os .rename (os .path .join (toolchain_module_dir , module + fileext ),
263
- os .path .join (toolchain_module_dir , arch + '-apple-macos' + fileext ))
267
+ install_module (args , build_dir , product_subpath , toolchain_lib_dir , module , 'swift-driver' )
268
+
269
+ # swift-argument-parser
270
+ install_module (args , build_dir , product_subpath , toolchain_lib_dir , 'ArgumentParser' , 'swift-argument-parser' )
271
+
272
+ # swift-tools-support-core
273
+ for module in ['TSCUtility' , 'TSCLibc' , 'TSCBasic' ]:
274
+ install_module (args , build_dir , product_subpath , toolchain_lib_dir , module , 'swift-tools-support-core' )
275
+
276
+ # llbuildSwift
277
+ llbuild_product_subpath = os .path .join ('products' , 'llbuildSwift' )
278
+ install_module (args , build_dir , llbuild_product_subpath , toolchain_lib_dir , 'llbuildSwift' , 'llbuild' )
279
+
280
+ def install_c_module_includes (args , build_dir , toolchain_include_dir ):
281
+ # TSCclibc C module's modulemap and header files
282
+ tscc_include_dir = os .path .join (os .path .dirname (args .package_path ), 'swift-tools-support-core' , 'Sources' ,
283
+ 'TSCclibc' , 'include' )
284
+ install_module_includes (args , toolchain_include_dir , tscc_include_dir , 'TSCclibc' )
285
+
286
+ # llbuild C module's modulemap and header files
287
+ llbuild_include_dir = os .path .join (os .path .dirname (args .package_path ), 'llbuild' , 'products' ,
288
+ 'libllbuild' , 'include' )
289
+ install_module_includes (args , toolchain_include_dir , llbuild_include_dir , 'llbuild' )
290
+
291
+ def install_module (args , build_dir , product_subpath , toolchain_lib , module_name , source_package ):
292
+ toolchain_module_dir = os .path .join (toolchain_lib , module_name + '.swiftmodule' )
293
+ mkdir_p (toolchain_module_dir )
294
+ for arch in macos_target_architectures :
295
+ swift_dir = os .path .join (build_dir , arch + '-apple-macos' + macos_deployment_target ,
296
+ source_package , product_subpath )
297
+ for fileext in ['.swiftmodule' , '.swiftdoc' ]:
298
+ install_binary (module_name + fileext , swift_dir , toolchain_module_dir , args .verbose )
299
+ os .rename (os .path .join (toolchain_module_dir , module_name + fileext ),
300
+ os .path .join (toolchain_module_dir , arch + '-apple-macos' + fileext ))
301
+
302
+ def install_module_includes (args , toolchain_include_dir , src_include_dir , dst_module_name ):
303
+ toolchain_module_include_dir = os .path .join (toolchain_include_dir , dst_module_name )
304
+ if os .path .exists (toolchain_module_include_dir ):
305
+ shutil .rmtree (toolchain_module_include_dir , ignore_errors = True )
306
+ shutil .copytree (src_include_dir , toolchain_module_include_dir )
264
307
265
308
def build_for_distribution (args , toolchain_bin , build_dir ):
266
309
print ('Preparing SwiftDriver for distribution using CMake.' )
@@ -294,7 +337,7 @@ def build_for_distribution(args, toolchain_bin, build_dir):
294
337
295
338
def build_llbuild_using_cmake (args , target , swiftc_exec , cmake_target_dir , base_cmake_flags ):
296
339
print ('Building llbuild for target: %s' % target )
297
- llbuild_source_dir = os .path .join (args . package_path , '..' , 'llbuild' )
340
+ llbuild_source_dir = os .path .join (os . path . dirname ( args . package_path ) , 'llbuild' )
298
341
llbuild_build_dir = os .path .join (cmake_target_dir , 'llbuild' )
299
342
llbuild_api_dir = os .path .join (llbuild_build_dir , '.cmake/api/v1/query' )
300
343
mkdir_p (llbuild_api_dir )
@@ -318,21 +361,21 @@ def build_llbuild_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_
318
361
319
362
def build_tsc_using_cmake (args , target , swiftc_exec , cmake_target_dir , base_cmake_flags ):
320
363
print ('Building TSC for target: %s' % target )
321
- tsc_source_dir = os .path .join (args . package_path , '..' , 'swift-tools-support-core' )
364
+ tsc_source_dir = os .path .join (os . path . dirname ( args . package_path ) , 'swift-tools-support-core' )
322
365
tsc_build_dir = os .path .join (cmake_target_dir , 'swift-tools-support-core' )
323
366
tsc_flags = base_cmake_flags + ['-DBUILD_SHARED_LIBS=OFF' ]
324
367
cmake_build (args , swiftc_exec , tsc_flags , tsc_source_dir , tsc_build_dir )
325
368
326
369
def build_yams_using_cmake (args , target , swiftc_exec , cmake_target_dir , base_cmake_flags ):
327
370
print ('Building Yams for target: %s' % target )
328
- yams_source_dir = os .path .join (args . package_path , '..' , 'yams' )
371
+ yams_source_dir = os .path .join (os . path . dirname ( args . package_path ) , 'yams' )
329
372
yams_build_dir = os .path .join (cmake_target_dir , 'yams' )
330
373
yams_flags = base_cmake_flags + ['-DBUILD_SHARED_LIBS=OFF' , '-DCMAKE_C_FLAGS=-target %s' % target ]
331
374
cmake_build (args , swiftc_exec , yams_flags , yams_source_dir , yams_build_dir )
332
375
333
376
def build_argument_parser_using_cmake (args , target , swiftc_exec , cmake_target_dir , base_cmake_flags ):
334
377
print ('Building Argument Parser for target: %s' % target )
335
- parser_source_dir = os .path .join (args . package_path , '..' , 'swift-argument-parser' )
378
+ parser_source_dir = os .path .join (os . path . dirname ( args . package_path ) , 'swift-argument-parser' )
336
379
parser_build_dir = os .path .join (cmake_target_dir , 'swift-argument-parser' )
337
380
custom_flags = ['-DBUILD_SHARED_LIBS=OFF' , '-DBUILD_TESTING=NO' , '-DBUILD_EXAMPLES=NO' ]
338
381
parser_flags = base_cmake_flags + custom_flags
@@ -343,8 +386,7 @@ def build_swift_driver_using_cmake(args, target, swiftc_exec, cmake_target_dir,
343
386
print ('Building Swift Driver for target: %s' % target )
344
387
driver_source_dir = args .package_path
345
388
driver_build_dir = os .path .join (cmake_target_dir , 'swift-driver' )
346
- # TODO: Enable Library Evolution for swift-driver
347
- #swift_flags = '-DCMAKE_Swift_FLAGS=' + '-enable-library-evolution' + ' -emit-module-interface-path ' + os.path.join(cmake_target_dir, 'swift-driver', 'SwiftDriver.swiftinterface') + ' -Xfrontend -module-interface-preserve-types-as-written'
389
+ # TODO: Enable Library Evolution
348
390
swift_flags = ''
349
391
flags = [
350
392
'-DLLBuild_DIR=' + os .path .join (os .path .join (cmake_target_dir , 'llbuild' ), 'cmake/modules' ),
0 commit comments