-
Notifications
You must be signed in to change notification settings - Fork 263
/
Copy pathlit.cfg
157 lines (145 loc) · 6.78 KB
/
lit.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# Tests/Functional/lit.cfg - Functional test suite lit config -*- python -*-
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
from pkg_resources import parse_version
import os
import platform
import tempfile
import shlex
import sys
import lit
import pipes
import re
# Set up lit config.
config.name = 'SwiftXCTestFunctionalTests'
config.os_info = (platform.system(), platform.mac_ver()[0])
config.test_format = lit.formats.ShTest(execute_external=False)
config.suffixes = ['.swift']
# Set up the substitutions used by the functional test suite.
# First, our tests need a way to compile source files into
# executables that are linked against swift-corelibs-xctest.
# We'll provide one via the %swiftc substitution.
#
# Linux tests are run after swift-corelibs-xctest is installed
# in the Swift library path, so we only need the path to `swiftc`
# in order to compile.
def _getenv(name):
value = os.getenv(name, None)
if value is None:
lit_config.fatal(
'Environment variable ${} is required to run tests on this '
'platform, but it is not set.'.format(name))
return value
built_products_dir = _getenv('BUILT_PRODUCTS_DIR')
# Force tests to build with -swift-version 5 for now.
swift_exec = [ _getenv('SWIFT_EXEC'), '-swift-version', '5', ]
swift_exec.extend(shlex.split(os.getenv('SWIFT_FLAGS', '')))
if not platform.system() == 'Windows':
swift_exec.extend(['-Xlinker', '-rpath', '-Xlinker', built_products_dir,])
swift_exec.extend([
'-L', built_products_dir,
'-I', built_products_dir,
'-I', os.path.join(built_products_dir, 'swift'),
# A module cache in the built products directory is less likely to break in CI.
'-module-cache-path', os.path.join(built_products_dir, 'XCTest.dir', 'ModuleCache'),
])
if platform.system() == 'Darwin':
# On Darwin, we need to make sure swiftc references the
# proper SDK, has a deployment target set, and more...
# Here we rely on environment variables, produced by xcodebuild.
sdk_root = _getenv('SDKROOT')
platform_name = _getenv('PLATFORM_NAME')
deployment_target = _getenv('MACOSX_DEPLOYMENT_TARGET')
target = '{}-apple-{}{}'.format(
platform.machine(), platform_name, deployment_target)
swift_exec.extend([
'-sdk', sdk_root,
'-target', target,
'-F', built_products_dir,
# FIXME: We must include the C header dependencies of any module we wish
# to use, due to a limitation in the Swift compiler. See SR-655
# for details. Here, we include the headers from CoreFoundation.
'-I', os.path.join(built_products_dir, 'usr', 'local', 'include'),
])
else:
# We need to jump through extra hoops to link swift-corelibs-foundation.
foundation_dir = _getenv('FOUNDATION_BUILT_PRODUCTS_DIR')
if platform.system() == 'Windows':
sdkroot = os.getenv('SDKROOT', None)
if sdkroot:
swift_exec.extend(['-sdk', sdkroot])
swift_exec.extend(['-Xlinker', '-nodefaultlib:libcmt'])
else:
swift_exec.extend([
'-Xlinker', '-rpath', '-Xlinker', foundation_dir,
'-Xlinker', '-rpath', '-Xlinker', os.path.join(foundation_dir, 'Foundation'),
'-Xlinker', '-rpath', '-Xlinker', os.path.join(foundation_dir, 'Sources', 'Foundation'),
'-Xlinker', '-rpath', '-Xlinker', os.path.join(foundation_dir, 'Sources', 'FoundationNetworking'),
'-Xlinker', '-rpath', '-Xlinker', os.path.join(foundation_dir, 'Sources', 'FoundationXML'),
'-Xlinker', '-rpath', '-Xlinker', os.path.join(foundation_dir, 'lib'),
])
swift_exec.extend([
'-L', foundation_dir,
'-L', os.path.join(foundation_dir, 'Foundation'),
'-L', os.path.join(foundation_dir, 'Sources', 'Foundation'),
'-L', os.path.join(foundation_dir, 'Sources', 'FoundationNetworking'),
'-L', os.path.join(foundation_dir, 'Sources', 'FoundationXML'),
'-L', os.path.join(foundation_dir, 'lib'),
'-I', foundation_dir,
'-I', os.path.join(foundation_dir, 'swift'),
'-I', os.path.join(foundation_dir, '_CModulesForClients'),
'-Xcc', '-F', '-Xcc', foundation_dir,
])
# We also need to link swift-corelibs-libdispatch, if
# swift-corelibs-foundation is using it.
libdispatch_src_dir = os.getenv('LIBDISPATCH_SRC_DIR')
libdispatch_build_dir = os.getenv('LIBDISPATCH_BUILD_DIR')
libdispatch_overlay_dir = os.getenv('LIBDISPATCH_OVERLAY_DIR')
if ((libdispatch_src_dir is not None)
and (libdispatch_build_dir is not None)
and (libdispatch_overlay_dir is not None)):
swift_exec.extend([
'-Xcc', '-fblocks',
'-I', libdispatch_src_dir,
'-I', libdispatch_overlay_dir,
'-I', os.path.join(libdispatch_overlay_dir, 'swift'),
'-L', libdispatch_build_dir,
'-L', os.path.join(libdispatch_build_dir, 'src'),
'-L', os.path.join(libdispatch_build_dir, 'src', 'BlocksRuntime'),
'-L', os.path.join(libdispatch_build_dir, 'src', 'swift'),
'-vfsoverlay', os.path.join(libdispatch_build_dir, 'dispatch-vfs-overlay.yaml'),
])
if platform.system() != 'Windows':
swift_exec.extend([
'-Xlinker', '-rpath', '-Xlinker', libdispatch_build_dir,
])
# Having prepared the swiftc command, we set the substitution.
config.substitutions.append(('%{swiftc}', ' '.join(swift_exec)))
# Add the %{xctest_checker} substitution, which is a Python script that
# can be used to compare the actual XCTest output to the expected
# output.
xctest_checker = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
'xctest_checker',
'xctest_checker.py')
config.substitutions.append(('%{xctest_checker}', '%%{python} %s' % xctest_checker))
# Add Python to run xctest_checker.py tests as part of XCTest tests
config.substitutions.append( ('%{python}', pipes.quote(sys.executable)) )
# Conditionally report the Swift 5.5 Concurrency runtime as available depending on the OS and version.
# Darwin is the only platform where this is a limitation.
(run_os, run_vers) = config.os_info
if run_os == 'Darwin':
assert run_vers != "", "No runtime version set."
if parse_version(run_vers) >= parse_version('12.0'):
config.available_features.add('concurrency_runtime')
else:
# Non-Darwin platforms have a concurrency runtime
config.available_features.add('concurrency_runtime')
if run_os == 'Windows':
config.available_features.add('OS=windows')