Skip to content

Commit b47ac18

Browse files
committed
[Build Script Helper] Install all of SwiftDriver dependencies into the toolchain
1 parent 9141daa commit b47ac18

File tree

1 file changed

+60
-18
lines changed

1 file changed

+60
-18
lines changed

Utilities/build-script-helper.py

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ def install(args, build_dir):
180180
# and libSwiftDriver, libSwiftOptions libraries
181181
toolchain_bin = os.path.join(args.toolchain, 'bin')
182182
toolchain_lib = os.path.join(args.toolchain, 'lib', 'swift', 'macosx')
183+
toolchain_include = os.path.join(args.toolchain, 'include', 'swift')
183184
universal_dir = os.path.join(build_dir, 'universal-apple-macos%s' % macos_deployment_target)
184185
bin_dir = os.path.join(universal_dir, 'bin')
185186
lib_dir = os.path.join(universal_dir, 'lib')
@@ -193,8 +194,15 @@ def install(args, build_dir):
193194
# libSwiftDriver and libSwiftOptions
194195
install_libraries(args, build_dir, lib_dir, toolchain_lib)
195196

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)
198206

199207
def install_executables(args, build_dir, universal_bin_dir, toolchain_bin_dir):
200208
for exe in ['swift-driver', 'swift-help']:
@@ -250,17 +258,52 @@ def install_libraries(args, build_dir, universal_lib_dir, toolchain_lib_dir):
250258
subprocess.check_call(lipo_cmd)
251259
install_binary(dylib_file, universal_lib_dir, toolchain_lib_dir, args.verbose)
252260

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
254266
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)
264307

265308
def build_for_distribution(args, toolchain_bin, build_dir):
266309
print('Preparing SwiftDriver for distribution using CMake.')
@@ -294,7 +337,7 @@ def build_for_distribution(args, toolchain_bin, build_dir):
294337

295338
def build_llbuild_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_cmake_flags):
296339
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')
298341
llbuild_build_dir = os.path.join(cmake_target_dir, 'llbuild')
299342
llbuild_api_dir = os.path.join(llbuild_build_dir, '.cmake/api/v1/query')
300343
mkdir_p(llbuild_api_dir)
@@ -318,21 +361,21 @@ def build_llbuild_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_
318361

319362
def build_tsc_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_cmake_flags):
320363
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')
322365
tsc_build_dir = os.path.join(cmake_target_dir, 'swift-tools-support-core')
323366
tsc_flags = base_cmake_flags + ['-DBUILD_SHARED_LIBS=OFF']
324367
cmake_build(args, swiftc_exec, tsc_flags, tsc_source_dir, tsc_build_dir)
325368

326369
def build_yams_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_cmake_flags):
327370
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')
329372
yams_build_dir = os.path.join(cmake_target_dir, 'yams')
330373
yams_flags = base_cmake_flags + ['-DBUILD_SHARED_LIBS=OFF', '-DCMAKE_C_FLAGS=-target %s' % target]
331374
cmake_build(args, swiftc_exec, yams_flags, yams_source_dir, yams_build_dir)
332375

333376
def build_argument_parser_using_cmake(args, target, swiftc_exec, cmake_target_dir, base_cmake_flags):
334377
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')
336379
parser_build_dir = os.path.join(cmake_target_dir, 'swift-argument-parser')
337380
custom_flags = ['-DBUILD_SHARED_LIBS=OFF', '-DBUILD_TESTING=NO', '-DBUILD_EXAMPLES=NO']
338381
parser_flags = base_cmake_flags + custom_flags
@@ -343,8 +386,7 @@ def build_swift_driver_using_cmake(args, target, swiftc_exec, cmake_target_dir,
343386
print('Building Swift Driver for target: %s' % target)
344387
driver_source_dir = args.package_path
345388
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
348390
swift_flags = ''
349391
flags = [
350392
'-DLLBuild_DIR=' + os.path.join(os.path.join(cmake_target_dir, 'llbuild'), 'cmake/modules'),

0 commit comments

Comments
 (0)