Skip to content

Commit ef2ea8e

Browse files
authored
Merge pull request swiftlang#58 from akyrtzi/parser-lib-dir-options
[build-script] Add optional options for header/lib paths to the syntax parser library
2 parents d6da7b4 + 42220f6 commit ef2ea8e

File tree

1 file changed

+52
-9
lines changed

1 file changed

+52
-9
lines changed

build-script.py

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ def get_installed_name():
141141
def get_installed_dylib_name():
142142
return 'lib' + get_installed_name() + '.dylib'
143143

144-
def get_swiftpm_invocation(spm_exec, build_dir, release):
144+
def get_swiftpm_invocation(spm_exec, build_dir, parser_header_dir,
145+
parser_lib_dir, release):
145146
if spm_exec == 'swift build':
146147
swiftpm_call = ['swift', 'build']
147148
elif spm_exec == 'swift test':
@@ -158,17 +159,29 @@ def get_swiftpm_invocation(spm_exec, build_dir, release):
158159
# Swift compiler needs to know the module link name.
159160
swiftpm_call.extend(['-Xswiftc', '-module-link-name', '-Xswiftc', get_installed_name()])
160161

162+
# To find the syntax parser library.
163+
if parser_header_dir:
164+
swiftpm_call.extend(['-Xswiftc', '-I', '-Xswiftc', parser_header_dir])
165+
if parser_lib_dir:
166+
swiftpm_call.extend(['-Xswiftc', '-L', '-Xswiftc', parser_lib_dir])
167+
if platform.system() == 'Darwin':
168+
swiftpm_call.extend(['-Xlinker', '-rpath', '-Xlinker', parser_lib_dir])
169+
161170
# To speed up compilation.
162171
swiftpm_call.extend(['-Xswiftc', '-enforce-exclusivity=unchecked'])
163172
return swiftpm_call
164173

165174

166-
def build_swiftsyntax(swift_build_exec, swiftc_exec, build_dir, build_test_util, release,
175+
def build_swiftsyntax(swift_build_exec, swiftc_exec, build_dir,
176+
parser_header_dir, parser_lib_dir,
177+
build_test_util, release,
167178
verbose, disable_sandbox=False):
168179
print('** Building SwiftSyntax **')
169180

170181
swiftpm_call = get_swiftpm_invocation(spm_exec=swift_build_exec,
171182
build_dir=build_dir,
183+
parser_header_dir=parser_header_dir,
184+
parser_lib_dir=parser_lib_dir,
172185
release=release)
173186
swiftpm_call.extend(['--product', 'SwiftSyntax'])
174187

@@ -189,8 +202,9 @@ def build_swiftsyntax(swift_build_exec, swiftc_exec, build_dir, build_test_util,
189202

190203
## Testing
191204

192-
def run_tests(swift_test_exec, build_dir, release, swift_build_exec,
193-
filecheck_exec, swiftc_exec, swift_syntax_test_exec, verbose):
205+
def run_tests(swift_test_exec, build_dir, parser_header_dir, parser_lib_dir,
206+
release, swift_build_exec, filecheck_exec, swiftc_exec,
207+
swift_syntax_test_exec, verbose):
194208
print('** Running SwiftSyntax Tests **')
195209

196210
optional_swiftc_exec = swiftc_exec
@@ -199,6 +213,8 @@ def run_tests(swift_test_exec, build_dir, release, swift_build_exec,
199213

200214
lit_success = run_lit_tests(swift_build_exec=swift_build_exec,
201215
build_dir=build_dir,
216+
parser_header_dir=parser_header_dir,
217+
parser_lib_dir=parser_lib_dir,
202218
release=release,
203219
swiftc_exec=optional_swiftc_exec,
204220
filecheck_exec=filecheck_exec,
@@ -209,6 +225,8 @@ def run_tests(swift_test_exec, build_dir, release, swift_build_exec,
209225

210226
xctest_success = run_xctests(swift_test_exec=swift_test_exec,
211227
build_dir=build_dir,
228+
parser_header_dir=parser_header_dir,
229+
parser_lib_dir=parser_lib_dir,
212230
release=release,
213231
swiftc_exec=swiftc_exec,
214232
verbose=verbose)
@@ -240,9 +258,12 @@ def check_incr_transfer_roundtrip_exec():
240258
''')
241259

242260

243-
def find_lit_test_helper_exec(swift_build_exec, build_dir, release):
261+
def find_lit_test_helper_exec(swift_build_exec, parser_header_dir, parser_lib_dir,
262+
build_dir, release):
244263
swiftpm_call = get_swiftpm_invocation(spm_exec=swift_build_exec,
245264
build_dir=build_dir,
265+
parser_header_dir=parser_header_dir,
266+
parser_lib_dir=parser_lib_dir,
246267
release=release)
247268
swiftpm_call.extend(['--product', 'lit-test-helper'])
248269
swiftpm_call.extend(['--show-bin-path'])
@@ -251,8 +272,9 @@ def find_lit_test_helper_exec(swift_build_exec, build_dir, release):
251272
return bin_dir.strip() + '/lit-test-helper'
252273

253274

254-
def run_lit_tests(swift_build_exec, build_dir, release, swiftc_exec,
255-
filecheck_exec, swift_syntax_test_exec, verbose):
275+
def run_lit_tests(swift_build_exec, build_dir, parser_header_dir, parser_lib_dir,
276+
release, swiftc_exec, filecheck_exec, swift_syntax_test_exec,
277+
verbose):
256278
print('** Running lit-based tests **')
257279

258280
check_lit_exec()
@@ -261,6 +283,8 @@ def run_lit_tests(swift_build_exec, build_dir, release, swiftc_exec,
261283
lit_test_helper_exec = \
262284
find_lit_test_helper_exec(swift_build_exec=swift_build_exec,
263285
build_dir=build_dir,
286+
parser_header_dir=parser_header_dir,
287+
parser_lib_dir=parser_lib_dir,
264288
release=release)
265289

266290
lit_call = [LIT_EXEC]
@@ -288,10 +312,13 @@ def run_lit_tests(swift_build_exec, build_dir, release, swiftc_exec,
288312

289313
## XCTest based tests
290314

291-
def run_xctests(swift_test_exec, build_dir, release, swiftc_exec, verbose):
315+
def run_xctests(swift_test_exec, build_dir, parser_header_dir, parser_lib_dir,
316+
release, swiftc_exec, verbose):
292317
print('** Running XCTests **')
293318
swiftpm_call = get_swiftpm_invocation(spm_exec=swift_test_exec,
294319
build_dir=build_dir,
320+
parser_header_dir=parser_header_dir,
321+
parser_lib_dir=parser_lib_dir,
295322
release=release)
296323

297324
if verbose:
@@ -353,7 +380,7 @@ def main():
353380
parser = argparse.ArgumentParser(
354381
formatter_class=argparse.RawDescriptionHelpFormatter,
355382
description='''
356-
Build and test script for SwiftSytnax.
383+
Build and test script for SwiftSyntax.
357384
358385
Build SwiftSyntax by generating all necessary files form the corresponding
359386
.swift.gyb files first. For this, SwiftSyntax needs to be check out alongside
@@ -422,6 +449,18 @@ def main():
422449
Path to the swift executable. If not specified the swiftc exeuctable
423450
will be inferred from PATH.
424451
''')
452+
testing_group.add_argument('--syntax-parser-header-dir', default=None,
453+
help='''
454+
Path to the header and modulemap for the syntax parser library.
455+
If not specified no extra search path will be provided, it will be assumed
456+
that the library is in swift's default search paths.
457+
''')
458+
testing_group.add_argument('--syntax-parser-lib-dir', default=None,
459+
help='''
460+
Path to the syntax parser shared library. If not specified no extra search
461+
path will be provided, it will be assumed that the library is in swift's
462+
default search paths.
463+
''')
425464
testing_group.add_argument('--swift-syntax-test-exec', default=None,
426465
help='''
427466
Path to the swift-syntax-test executable that was built from the main
@@ -463,6 +502,8 @@ def main():
463502
build_swiftsyntax(swift_build_exec=args.swift_build_exec,
464503
swiftc_exec=args.swiftc_exec,
465504
build_dir=args.build_dir,
505+
parser_header_dir=args.syntax_parser_header_dir,
506+
parser_lib_dir=args.syntax_parser_lib_dir,
466507
build_test_util=args.test,
467508
release=args.release,
468509
verbose=args.verbose,
@@ -477,6 +518,8 @@ def main():
477518
try:
478519
success = run_tests(swift_test_exec=args.swift_test_exec,
479520
build_dir=realpath(args.build_dir),
521+
parser_header_dir=args.syntax_parser_header_dir,
522+
parser_lib_dir=args.syntax_parser_lib_dir,
480523
release=args.release,
481524
swift_build_exec=args.swift_build_exec,
482525
filecheck_exec=realpath(args.filecheck_exec),

0 commit comments

Comments
 (0)