4949 },
5050 "lld" : {"bolt" , "cross-project-tests" },
5151 # 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" },
5453 "mlir" : {"flang" },
5554 # Test everything if ci scripts are changed.
5655 # FIXME: Figure out what is missing and add here.
6463
6564# This mapping describes runtimes that should be tested when the key project is
6665# 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+ }
6875
6976EXCLUDE_LINUX = {
7077 "cross-project-tests" , # TODO(issues/132796): Tests are failing.
93100 "cross-project-tests" ,
94101 "flang" ,
95102 "libc" ,
96- "libcxx" ,
97- "libcxxabi" ,
98- "libunwind" ,
99103 "lldb" ,
100104 "openmp" ,
101105 "polly" ,
122126 "polly" : "check-polly" ,
123127}
124128
125- RUNTIMES = {"libcxx" , "libcxxabi" , "libunwind" }
129+ RUNTIMES = {"libcxx" , "libcxxabi" , "libunwind" , "compiler-rt" , "libc" }
126130
127131
128- def _add_dependencies (projects : Set [str ]) -> Set [str ]:
132+ def _add_dependencies (projects : Set [str ], runtimes : Set [ str ] ) -> Set [str ]:
129133 projects_with_dependents = set (projects )
130134 current_projects_count = 0
131135 while current_projects_count != len (projects_with_dependents ):
@@ -134,9 +138,25 @@ def _add_dependencies(projects: Set[str]) -> Set[str]:
134138 if project not in PROJECT_DEPENDENCIES :
135139 continue
136140 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 ])
137145 return projects_with_dependents
138146
139147
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+
140160def _compute_projects_to_test (modified_projects : Set [str ], platform : str ) -> Set [str ]:
141161 projects_to_test = set ()
142162 for modified_project in modified_projects :
@@ -154,25 +174,14 @@ def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set
154174 ):
155175 continue
156176 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 )
171178 return projects_to_test
172179
173180
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 )
176185
177186
178187def _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]:
184193 return check_targets
185194
186195
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 ]:
188197 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 )
195203
196204
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 :
201211 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 )
205226
206227
207228def _get_modified_projects (modified_files : list [str ]) -> Set [str ]:
@@ -225,10 +246,19 @@ def _get_modified_projects(modified_files: list[str]) -> Set[str]:
225246def get_env_variables (modified_files : list [str ], platform : str ) -> Set [str ]:
226247 modified_projects = _get_modified_projects (modified_files )
227248 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 )
229257 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+ )
232262 # We use a semicolon to separate the projects/runtimes as they get passed
233263 # to the CMake invocation and thus we need to use the CMake list separator
234264 # (;). 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]:
238268 "project_check_targets" : " " .join (sorted (projects_check_targets )),
239269 "runtimes_to_build" : ";" .join (sorted (runtimes_to_build )),
240270 "runtimes_check_targets" : " " .join (sorted (runtimes_check_targets )),
271+ "runtimes_check_targets_needs_reconfig" : " " .join (
272+ sorted (runtimes_check_targets_needs_reconfig )
273+ ),
241274 }
242275
243276
0 commit comments