49
49
},
50
50
"lld" : {"bolt" , "cross-project-tests" },
51
51
# TODO(issues/132795): LLDB should be enabled on clang changes.
52
- "clang" : {"clang-tools-extra" , "compiler-rt" , "cross-project-tests" },
53
- "clang-tools-extra" : {"libc" },
52
+ "clang" : {"clang-tools-extra" , "cross-project-tests" },
54
53
"mlir" : {"flang" },
55
54
# Test everything if ci scripts are changed.
56
55
# FIXME: Figure out what is missing and add here.
64
63
65
64
# This mapping describes runtimes that should be tested when the key project is
66
65
# touched.
67
- DEPENDENT_RUNTIMES_TO_TEST = {"clang" : {"libcxx" , "libcxxabi" , "libunwind" }}
66
+ DEPENDENT_RUNTIMES_TO_TEST = {
67
+ "clang" : {"compiler-rt" },
68
+ "clang-tools-extra" : {"libc" },
69
+ }
70
+ DEPENDENT_RUNTIMES_TO_TEST_NEEDS_RECONFIG = {
71
+ "llvm" : {"libcxx" , "libcxxabi" , "libunwind" },
72
+ "clang" : {"libcxx" , "libcxxabi" , "libunwind" },
73
+ ".ci" : {"libcxx" , "libcxxabi" , "libunwind" },
74
+ }
68
75
69
76
EXCLUDE_LINUX = {
70
77
"cross-project-tests" , # TODO(issues/132796): Tests are failing.
93
100
"cross-project-tests" ,
94
101
"flang" ,
95
102
"libc" ,
96
- "libcxx" ,
97
- "libcxxabi" ,
98
- "libunwind" ,
99
103
"lldb" ,
100
104
"openmp" ,
101
105
"polly" ,
122
126
"polly" : "check-polly" ,
123
127
}
124
128
125
- RUNTIMES = {"libcxx" , "libcxxabi" , "libunwind" }
129
+ RUNTIMES = {"libcxx" , "libcxxabi" , "libunwind" , "compiler-rt" , "libc" }
126
130
127
131
128
- def _add_dependencies (projects : Set [str ]) -> Set [str ]:
132
+ def _add_dependencies (projects : Set [str ], runtimes : Set [ str ] ) -> Set [str ]:
129
133
projects_with_dependents = set (projects )
130
134
current_projects_count = 0
131
135
while current_projects_count != len (projects_with_dependents ):
@@ -134,9 +138,25 @@ def _add_dependencies(projects: Set[str]) -> Set[str]:
134
138
if project not in PROJECT_DEPENDENCIES :
135
139
continue
136
140
projects_with_dependents .update (PROJECT_DEPENDENCIES [project ])
141
+ for runtime in runtimes :
142
+ if runtime not in PROJECT_DEPENDENCIES :
143
+ continue
144
+ projects_with_dependents .update (PROJECT_DEPENDENCIES [runtime ])
137
145
return projects_with_dependents
138
146
139
147
148
+ def _exclude_projects (current_projects : Set [str ], platform : str ) -> Set [str ]:
149
+ if platform == "Linux" :
150
+ to_exclude = EXCLUDE_LINUX
151
+ elif platform == "Windows" :
152
+ to_exclude = EXCLUDE_WINDOWS
153
+ elif platform == "Darwin" :
154
+ to_exclude = EXCLUDE_MAC
155
+ else :
156
+ raise ValueError (f"Unexpected platform: { platform } " )
157
+ return current_projects .difference (to_exclude )
158
+
159
+
140
160
def _compute_projects_to_test (modified_projects : Set [str ], platform : str ) -> Set [str ]:
141
161
projects_to_test = set ()
142
162
for modified_project in modified_projects :
@@ -154,25 +174,14 @@ def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set
154
174
):
155
175
continue
156
176
projects_to_test .add (dependent_project )
157
- if platform == "Linux" :
158
- for to_exclude in EXCLUDE_LINUX :
159
- if to_exclude in projects_to_test :
160
- projects_to_test .remove (to_exclude )
161
- elif platform == "Windows" :
162
- for to_exclude in EXCLUDE_WINDOWS :
163
- if to_exclude in projects_to_test :
164
- projects_to_test .remove (to_exclude )
165
- elif platform == "Darwin" :
166
- for to_exclude in EXCLUDE_MAC :
167
- if to_exclude in projects_to_test :
168
- projects_to_test .remove (to_exclude )
169
- else :
170
- raise ValueError ("Unexpected platform." )
177
+ projects_to_test = _exclude_projects (projects_to_test , platform )
171
178
return projects_to_test
172
179
173
180
174
- def _compute_projects_to_build (projects_to_test : Set [str ]) -> Set [str ]:
175
- return _add_dependencies (projects_to_test )
181
+ def _compute_projects_to_build (
182
+ projects_to_test : Set [str ], runtimes : Set [str ]
183
+ ) -> Set [str ]:
184
+ return _add_dependencies (projects_to_test , runtimes )
176
185
177
186
178
187
def _compute_project_check_targets (projects_to_test : Set [str ]) -> Set [str ]:
@@ -184,24 +193,36 @@ def _compute_project_check_targets(projects_to_test: Set[str]) -> Set[str]:
184
193
return check_targets
185
194
186
195
187
- def _compute_runtimes_to_test (projects_to_test : Set [str ]) -> Set [str ]:
196
+ def _compute_runtimes_to_test (modified_projects : Set [str ], platform : str ) -> Set [str ]:
188
197
runtimes_to_test = set ()
189
- for project_to_test in projects_to_test :
190
- if project_to_test in DEPENDENT_RUNTIMES_TO_TEST :
191
- runtimes_to_test .update (DEPENDENT_RUNTIMES_TO_TEST [project_to_test ])
192
- if project_to_test in DEPENDENT_RUNTIMES_TO_BUILD :
193
- runtimes_to_test .update (DEPENDENT_RUNTIMES_TO_BUILD [project_to_test ])
194
- return runtimes_to_test
198
+ for modified_project in modified_projects :
199
+ if modified_project not in DEPENDENT_RUNTIMES_TO_TEST :
200
+ continue
201
+ runtimes_to_test .update (DEPENDENT_RUNTIMES_TO_TEST [modified_project ])
202
+ return _exclude_projects (runtimes_to_test , platform )
195
203
196
204
197
- def _compute_runtime_check_targets (projects_to_test : Set [str ]) -> Set [str ]:
198
- check_targets = set ()
199
- for project_to_test in projects_to_test :
200
- if project_to_test not in DEPENDENT_RUNTIMES_TO_TEST :
205
+ def _compute_runtimes_to_test_needs_reconfig (
206
+ modified_projects : Set [str ], platform : str
207
+ ) -> Set [str ]:
208
+ runtimes_to_test = set ()
209
+ for modified_project in modified_projects :
210
+ if modified_project not in DEPENDENT_RUNTIMES_TO_TEST_NEEDS_RECONFIG :
201
211
continue
202
- for runtime_to_test in DEPENDENT_RUNTIMES_TO_TEST [project_to_test ]:
203
- check_targets .add (PROJECT_CHECK_TARGETS [runtime_to_test ])
204
- return check_targets
212
+ runtimes_to_test .update (
213
+ DEPENDENT_RUNTIMES_TO_TEST_NEEDS_RECONFIG [modified_project ]
214
+ )
215
+ return _exclude_projects (runtimes_to_test , platform )
216
+
217
+
218
+ def _compute_runtimes_to_build (
219
+ runtimes_to_test : Set [str ], modified_projects : Set [str ], platform : str
220
+ ) -> Set [str ]:
221
+ runtimes_to_build = set (runtimes_to_test )
222
+ for modified_project in modified_projects :
223
+ if modified_project in DEPENDENT_RUNTIMES_TO_BUILD :
224
+ runtimes_to_build .update (DEPENDENT_RUNTIMES_TO_BUILD [modified_project ])
225
+ return _exclude_projects (runtimes_to_build , platform )
205
226
206
227
207
228
def _get_modified_projects (modified_files : list [str ]) -> Set [str ]:
@@ -225,10 +246,19 @@ def _get_modified_projects(modified_files: list[str]) -> Set[str]:
225
246
def get_env_variables (modified_files : list [str ], platform : str ) -> Set [str ]:
226
247
modified_projects = _get_modified_projects (modified_files )
227
248
projects_to_test = _compute_projects_to_test (modified_projects , platform )
228
- projects_to_build = _compute_projects_to_build (projects_to_test )
249
+ runtimes_to_test = _compute_runtimes_to_test (modified_projects , platform )
250
+ runtimes_to_test_needs_reconfig = _compute_runtimes_to_test_needs_reconfig (
251
+ modified_projects , platform
252
+ )
253
+ runtimes_to_build = _compute_runtimes_to_build (
254
+ runtimes_to_test | runtimes_to_test_needs_reconfig , modified_projects , platform
255
+ )
256
+ projects_to_build = _compute_projects_to_build (projects_to_test , runtimes_to_build )
229
257
projects_check_targets = _compute_project_check_targets (projects_to_test )
230
- runtimes_to_build = _compute_runtimes_to_test (projects_to_test )
231
- runtimes_check_targets = _compute_runtime_check_targets (projects_to_test )
258
+ runtimes_check_targets = _compute_project_check_targets (runtimes_to_test )
259
+ runtimes_check_targets_needs_reconfig = _compute_project_check_targets (
260
+ runtimes_to_test_needs_reconfig
261
+ )
232
262
# We use a semicolon to separate the projects/runtimes as they get passed
233
263
# to the CMake invocation and thus we need to use the CMake list separator
234
264
# (;). We use spaces to separate the check targets as they end up getting
@@ -238,6 +268,9 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
238
268
"project_check_targets" : " " .join (sorted (projects_check_targets )),
239
269
"runtimes_to_build" : ";" .join (sorted (runtimes_to_build )),
240
270
"runtimes_check_targets" : " " .join (sorted (runtimes_check_targets )),
271
+ "runtimes_check_targets_needs_reconfig" : " " .join (
272
+ sorted (runtimes_check_targets_needs_reconfig )
273
+ ),
241
274
}
242
275
243
276
0 commit comments