Skip to content

Commit 645f15d

Browse files
committed
[Build-Script-Helper] Avoid installing argument-parser into the toolchain, until needed
Code commented-out with TODOs
1 parent daef6f4 commit 645f15d

File tree

1 file changed

+30
-35
lines changed

1 file changed

+30
-35
lines changed

Utilities/build-script-helper.py

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def handle_invocation(toolchain_bin, args):
172172
elif args.action == 'install':
173173
if platform.system() == 'Darwin':
174174
distribution_build_dir = os.path.join(args.build_path, 'dist')
175-
build_for_distribution(args, toolchain_bin, distribution_build_dir)
175+
build_for_toolchain_install(args, toolchain_bin, distribution_build_dir)
176176
install(args, distribution_build_dir)
177177
else:
178178
bin_path = swiftpm_bin_path(swift_exec, swiftpm_args, env)
@@ -191,7 +191,7 @@ def non_darwin_install(swiftpm_bin_path, toolchain, verbose):
191191

192192
def install(args, build_dir):
193193
# Construct and install universal swift-driver, swift-help executables
194-
# and libSwiftDriver, libSwiftOptions libraries
194+
# and libSwiftDriver, libSwiftOptions libraries, along with their dependencies.
195195
toolchain_bin = os.path.join(args.toolchain, 'bin')
196196
toolchain_lib = os.path.join(args.toolchain, 'lib', 'swift', 'macosx')
197197
toolchain_include = os.path.join(args.toolchain, 'include', 'swift')
@@ -210,14 +210,16 @@ def install(args, build_dir):
210210

211211
# Binary Swift Modules:
212212
# swift-driver: SwiftDriver.swiftmodule, SwiftOptions.swiftmodule
213-
# swift-argument-parser: ArgumentParser.swiftmodule
213+
# TODO: swift-argument-parser: ArgumentParser.swiftmodule
214214
# swift-tools-support-core: TSCUtility.swiftmodule, TSCLibc.swiftmodule, TSCBasic.swiftmodule
215215
install_binary_swift_modules(args, build_dir, toolchain_lib)
216216

217217
# Modulemaps for C Modules:
218218
# llbuild, TSCclibc
219219
install_c_module_includes(args, build_dir, toolchain_include)
220220

221+
# Install universal binaries for swift-driver and swift-help into the toolchain bin
222+
# directory
221223
def install_executables(args, build_dir, universal_bin_dir, toolchain_bin_dir):
222224
for exe in ['swift-driver', 'swift-help']:
223225
# Fixup rpaths
@@ -252,8 +254,9 @@ def install_executables(args, build_dir, universal_bin_dir, toolchain_bin_dir):
252254
subprocess.check_call(lipo_cmd)
253255
install_binary(exe, universal_bin_dir, toolchain_bin_dir, args.verbose)
254256

257+
# Install shared libraries for the driver and its dependencies into the toolchain
255258
def install_libraries(args, build_dir, universal_lib_dir, toolchain_lib_dir):
256-
# Fixup the llbuild and swift-driver rpath for libSwiftDriver
259+
# Fixup the llbuild and SwiftDriver rpath for libSwiftDriver
257260
for arch in macos_target_architectures:
258261
lib_path = os.path.join(build_dir, arch + '-apple-macos' + macos_deployment_target,
259262
'swift-driver', 'lib', 'libSwiftDriver' + shared_lib_ext)
@@ -275,41 +278,29 @@ def install_libraries(args, build_dir, universal_lib_dir, toolchain_lib_dir):
275278

276279
# Install the libSwiftDriver and libSwiftOptions shared libraries into the toolchain lib
277280
for lib in ['libSwiftDriver', 'libSwiftOptions']:
278-
shared_lib_file = lib + shared_lib_ext
279-
output_dylib_path = os.path.join(universal_lib_dir, shared_lib_file)
280-
lipo_cmd = ['lipo']
281-
for arch in macos_target_architectures:
282-
input_lib_path = os.path.join(build_dir, arch + '-apple-macos' + macos_deployment_target,
283-
'swift-driver', 'lib', shared_lib_file)
284-
lipo_cmd.append(input_lib_path)
285-
lipo_cmd.extend(['-create', '-output', output_dylib_path])
286-
subprocess.check_call(lipo_cmd)
287-
install_binary(shared_lib_file, universal_lib_dir, toolchain_lib_dir, args.verbose)
281+
install_library(args, build_dir, lib, universal_lib_dir, toolchain_lib_dir, 'swift-driver')
288282

283+
# Instal the swift-tools-support core shared libraries into the toolchain lib
289284
for lib in ['libTSCBasic', 'libTSCLibc', 'libTSCUtility']:
290-
shared_lib_file = lib + shared_lib_ext
291-
output_dylib_path = os.path.join(universal_lib_dir, shared_lib_file)
292-
lipo_cmd = ['lipo']
293-
for arch in macos_target_architectures:
294-
input_lib_path = os.path.join(build_dir, arch + '-apple-macos' + macos_deployment_target,
295-
'swift-tools-support-core', 'lib', shared_lib_file)
296-
lipo_cmd.append(input_lib_path)
297-
lipo_cmd.extend(['-create', '-output', output_dylib_path])
298-
subprocess.check_call(lipo_cmd)
299-
install_binary(shared_lib_file, universal_lib_dir, toolchain_lib_dir, args.verbose)
285+
install_library(args, build_dir, lib, universal_lib_dir, toolchain_lib_dir, 'swift-tools-support-core')
300286

301-
def install_library(args, lib_name, ):
302-
shared_lib_file = lib + shared_lib_ext
287+
# TODO: Until the argument parser is used, avoid installing it into the toolchain here
288+
#install_library(args, build_dir, 'libArgumentParser', universal_lib_dir, toolchain_lib_dir, 'swift-argument-parser')
289+
290+
# Create a universal shared-library file and install it into the toolchain lib
291+
def install_library(args, build_dir, lib_name, universal_lib_dir, toolchain_lib_dir, package_name):
292+
shared_lib_file = lib_name + shared_lib_ext
303293
output_dylib_path = os.path.join(universal_lib_dir, shared_lib_file)
304294
lipo_cmd = ['lipo']
305295
for arch in macos_target_architectures:
306296
input_lib_path = os.path.join(build_dir, arch + '-apple-macos' + macos_deployment_target,
307-
'swift-driver', 'lib', shared_lib_file)
297+
package_name, 'lib', shared_lib_file)
308298
lipo_cmd.append(input_lib_path)
309299
lipo_cmd.extend(['-create', '-output', output_dylib_path])
310300
subprocess.check_call(lipo_cmd)
311301
install_binary(shared_lib_file, universal_lib_dir, toolchain_lib_dir, args.verbose)
312302

303+
# Install binary .swiftmodule files for the driver and its dependencies into the toolchain lib
313304
def install_binary_swift_modules(args, build_dir, toolchain_lib_dir):
314305
# The common subpath from a project's build directory to where its build products are found
315306
product_subpath = 'swift'
@@ -318,27 +309,30 @@ def install_binary_swift_modules(args, build_dir, toolchain_lib_dir):
318309
for module in ['SwiftDriver', 'SwiftOptions']:
319310
install_module(args, build_dir, product_subpath, toolchain_lib_dir, module, 'swift-driver')
320311

321-
# swift-argument-parser
322-
install_module(args, build_dir, product_subpath, toolchain_lib_dir, 'ArgumentParser', 'swift-argument-parser')
323-
324312
# swift-tools-support-core
325313
for module in ['TSCUtility', 'TSCLibc', 'TSCBasic']:
326314
install_module(args, build_dir, product_subpath, toolchain_lib_dir, module, 'swift-tools-support-core')
327315

316+
# swift-argument-parser
317+
# TODO: Until the argument parser is used, avoid installing it into the toolchain
318+
#install_module(args, build_dir, product_subpath, toolchain_lib_dir, 'ArgumentParser', 'swift-argument-parser')
319+
328320
# llbuildSwift
329321
llbuild_product_subpath = os.path.join('products', 'llbuildSwift')
330322
install_module(args, build_dir, llbuild_product_subpath, toolchain_lib_dir, 'llbuildSwift', 'llbuild')
331323

324+
# Install the modulemaps and headers of the driver's C module dependencies into the toolchain
325+
# include directory
332326
def install_c_module_includes(args, build_dir, toolchain_include_dir):
333327
# TSCclibc C module's modulemap and header files
334328
tscc_include_dir = os.path.join(os.path.dirname(args.package_path), 'swift-tools-support-core', 'Sources',
335329
'TSCclibc', 'include')
336-
install_module_includes(args, toolchain_include_dir, tscc_include_dir, 'TSCclibc')
330+
install_include_artifacts(args, toolchain_include_dir, tscc_include_dir, 'TSCclibc')
337331

338332
# llbuild C module's modulemap and header files
339333
llbuild_include_dir = os.path.join(os.path.dirname(args.package_path), 'llbuild', 'products',
340334
'libllbuild', 'include')
341-
install_module_includes(args, toolchain_include_dir, llbuild_include_dir, 'llbuild')
335+
install_include_artifacts(args, toolchain_include_dir, llbuild_include_dir, 'llbuild')
342336

343337
def install_module(args, build_dir, product_subpath, toolchain_lib, module_name, source_package):
344338
toolchain_module_dir = os.path.join(toolchain_lib, module_name + '.swiftmodule')
@@ -351,13 +345,14 @@ def install_module(args, build_dir, product_subpath, toolchain_lib, module_name,
351345
os.rename(os.path.join(toolchain_module_dir, module_name + fileext),
352346
os.path.join(toolchain_module_dir, arch + '-apple-macos' + fileext))
353347

354-
def install_module_includes(args, toolchain_include_dir, src_include_dir, dst_module_name):
348+
# Copy over the contents of a module's include directory contents (modulemap, headers, etc.)
349+
def install_include_artifacts(args, toolchain_include_dir, src_include_dir, dst_module_name):
355350
toolchain_module_include_dir = os.path.join(toolchain_include_dir, dst_module_name)
356351
if os.path.exists(toolchain_module_include_dir):
357352
shutil.rmtree(toolchain_module_include_dir, ignore_errors=True)
358353
shutil.copytree(src_include_dir, toolchain_module_include_dir)
359354

360-
def build_for_distribution(args, toolchain_bin, build_dir):
355+
def build_for_toolchain_install(args, toolchain_bin, build_dir):
361356
print('Preparing SwiftDriver for distribution using CMake.')
362357
swiftc_exec = os.path.join(toolchain_bin, 'swiftc')
363358

@@ -427,7 +422,7 @@ def build_argument_parser_using_cmake(args, target, swiftc_exec, cmake_target_di
427422
print('Building Argument Parser for target: %s' % target)
428423
parser_source_dir = os.path.join(os.path.dirname(args.package_path), 'swift-argument-parser')
429424
parser_build_dir = os.path.join(cmake_target_dir, 'swift-argument-parser')
430-
custom_flags = ['-DBUILD_SHARED_LIBS=OFF', '-DBUILD_TESTING=NO', '-DBUILD_EXAMPLES=NO']
425+
custom_flags = ['-DBUILD_TESTING=NO', '-DBUILD_EXAMPLES=NO']
431426
parser_flags = base_cmake_flags + custom_flags
432427
cmake_build(args, swiftc_exec, parser_flags, parser_source_dir, parser_build_dir)
433428
return

0 commit comments

Comments
 (0)