[llvm] [CI] Add Python Script for Computing Projects/Runtimes to Test (PR #132634)
Aiden Grossman via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 24 11:44:52 PDT 2025
https://github.com/boomanaiden154 updated https://github.com/llvm/llvm-project/pull/132634
>From bd6b2f917f9f43328874789ac03259d2dad71552 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Sun, 23 Mar 2025 20:41:17 +0000
Subject: [PATCH 1/5] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
=?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
---
.ci/compute_projects.py | 166 +++++++++++++++++++++++++++++++++++
.ci/compute_projects_test.py | 130 +++++++++++++++++++++++++++
2 files changed, 296 insertions(+)
create mode 100644 .ci/compute_projects.py
create mode 100644 .ci/compute_projects_test.py
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
new file mode 100644
index 0000000000000..c669e89faf946
--- /dev/null
+++ b/.ci/compute_projects.py
@@ -0,0 +1,166 @@
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+"""Computes the list of projects that need to be tested from a diff.
+
+Does some things, spits out a list of projects.
+"""
+
+from collections.abc import Set
+import pathlib
+import platform
+import sys
+
+PROJECT_DEPENDENCIES = {
+ "llvm": set(),
+ "clang": {"llvm"},
+ "bolt": {"clang", "lld", "llvm"},
+ "clang-tools-extra": {"clang", "llvm"},
+ "compiler-rt": {"clang", "lld"},
+ "libc": {"clang", "lld"},
+ "openmp": {"clang", "lld"},
+ "flang": {"llvm", "clang"},
+ "lldb": {"llvm", "clang"},
+ "libclc": {"llvm", "clang"},
+ "lld": {"llvm"},
+ "mlir": {"llvm"},
+ "polly": {"llvm"},
+}
+
+DEPENDENTS_TO_TEST = {
+ "llvm": {"bolt", "clang", "clang-tools-extra", "lld", "lldb", "mlir", "polly"},
+ "lld": {"bolt", "cross-project-tests"},
+ "clang": {"clang-tools-extra", "compiler-rt", "cross-project-tests"},
+ "clang-tools-extra": {"libc"},
+ "mlir": {"flang"},
+}
+
+DEPENDENT_RUNTIMES_TO_TEST = {"clang": {"libcxx", "libcxxabi", "libunwind"}}
+
+EXCLUDE_LINUX = {
+ "cross-project-tests", # Tests are failing.
+ "openmp", # https://github.com/google/llvm-premerge-checks/issues/410
+}
+
+EXCLUDE_WINDOWS = {
+ "cross-project-tests", # Tests are failing.
+ "compiler-rt", # Tests are taking too long.
+ "openmp", # Does not detect perl installation.
+ "libc", # No Windows Support.
+ "lldb", # Custom environment requirements.
+ "bolt", # No Windows Support.
+}
+
+PROJECT_CHECK_TARGETS = {
+ "clang-tools-extra": "check-clang-tools",
+ "compiler-rt": "check-compiler-rt",
+ "cross-project-tests": "check-cross-project",
+ "libcxx": "check-cxx",
+ "libcxxabi": "check-cxxabi",
+ "libunwind": "check-unwind",
+ "lldb": "check-lldb",
+ "llvm": "check-llvm",
+ "clang": "check-clang",
+ "bolt": "check-bolt",
+ "lld": "check-lld",
+ "flang": "check-flang",
+ "libc": "check-libc",
+ "lld": "check-lld",
+ "lldb": "check-lldb",
+ "mlir": "check-mlir",
+ "openmp": "check-openmp",
+ "polly": "check-polly",
+}
+
+
+def _add_dependencies(projects: Set[str]) -> Set[str]:
+ projects_with_dependents = set(projects)
+ current_projects_count = 0
+ while current_projects_count != len(projects_with_dependents):
+ current_projects_count = len(projects_with_dependents)
+ for project in list(projects_with_dependents):
+ if project not in PROJECT_DEPENDENCIES:
+ continue
+ projects_with_dependents.update(PROJECT_DEPENDENCIES[project])
+ return projects_with_dependents
+
+
+def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set[str]:
+ """Computes the list of projects that should be passed to LLVM_ENABLE_PROJECTS"""
+ projects_to_test = set(modified_projects)
+ for modified_project in modified_projects:
+ if modified_project not in DEPENDENTS_TO_TEST:
+ continue
+ projects_to_test.update(DEPENDENTS_TO_TEST[modified_project])
+ if platform == "Linux":
+ for to_exclude in EXCLUDE_LINUX:
+ if to_exclude in projects_to_test:
+ projects_to_test.remove(to_exclude)
+ elif platform == "Windows":
+ for to_exclude in EXCLUDE_WINDOWS:
+ if to_exclude in projects_to_test:
+ projects_to_test.remove(to_exclude)
+ else:
+ raise ValueError("Unexpected platform.")
+ return projects_to_test
+
+
+def _compute_projects_to_build(projects_to_test: Set[str]) -> Set[str]:
+ return _add_dependencies(projects_to_test)
+
+
+def _compute_project_check_targets(projects_to_test: Set[str]) -> Set[str]:
+ """blah blah blah"""
+ check_targets = set()
+ for project_to_test in projects_to_test:
+ if project_to_test not in PROJECT_CHECK_TARGETS:
+ continue
+ check_targets.add(PROJECT_CHECK_TARGETS[project_to_test])
+ return check_targets
+
+
+def _compute_runtimes_to_test(projects_to_test: Set[str]) -> Set[str]:
+ """blah blah blah"""
+ runtimes_to_test = set()
+ for project_to_test in projects_to_test:
+ if project_to_test not in DEPENDENT_RUNTIMES_TO_TEST:
+ continue
+ runtimes_to_test.update(DEPENDENT_RUNTIMES_TO_TEST[project_to_test])
+ return runtimes_to_test
+
+
+def _compute_runtime_check_targets(runtimes_to_test: Set[str]) -> Set[str]:
+ """blah blah blah"""
+ check_targets = set()
+ for runtime_to_test in runtimes_to_test:
+ check_targets.add(PROJECT_CHECK_TARGETS[runtime_to_test])
+ return check_targets
+
+
+def _get_modified_projects(modified_files: list[str]) -> Set[str]:
+ """blah blah blah"""
+ modified_projects = set()
+ for modified_file in modified_files:
+ modified_projects.add(pathlib.Path(modified_file).parts[0])
+ return modified_projects
+
+
+def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
+ modified_projects = _get_modified_projects(modified_files)
+ projects_to_test = _compute_projects_to_test(modified_projects, platform)
+ projects_to_build = _compute_projects_to_build(projects_to_test)
+ projects_check_targets = _compute_project_check_targets(projects_to_test)
+ runtimes_to_test = _compute_runtimes_to_test(projects_to_test)
+ runtimes_check_targets = _compute_runtime_check_targets(runtimes_to_test)
+ return {
+ "projects_to_build": ";".join(sorted(projects_to_build)),
+ "project_check_targets": " ".join(sorted(projects_check_targets)),
+ "runtimes_to_build": ";".join(sorted(runtimes_to_test)),
+ "runtimes_check_targets": " ".join(sorted(runtimes_check_targets)),
+ }
+
+
+if __name__ == "__main__":
+ env_variables = get_env_variables(sys.stdin.readlines(), platform.system())
+ for env_variable in env_variables:
+ print(f"{env_variable}={env_variables[env_variable]}")
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
new file mode 100644
index 0000000000000..b12ad69adf15a
--- /dev/null
+++ b/.ci/compute_projects_test.py
@@ -0,0 +1,130 @@
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+"""Does some stuff."""
+
+import unittest
+
+import compute_projects
+
+
+class TestComputeProjects(unittest.TestCase):
+ def test_llvm(self):
+ env_variables = compute_projects.get_env_variables(
+ ["llvm/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"],
+ "bolt;clang;clang-tools-extra;lld;lldb;llvm;mlir;polly",
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"],
+ "check-bolt check-clang check-clang-tools check-lld check-lldb check-llvm check-mlir check-polly",
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-cxx check-cxxabi check-unwind",
+ )
+
+ def test_llvm_windows(self):
+ env_variables = compute_projects.get_env_variables(
+ ["llvm/CMakeLists.txt"], "Windows"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"],
+ "clang;clang-tools-extra;lld;llvm;mlir;polly",
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"],
+ "check-clang check-clang-tools check-lld check-llvm check-mlir check-polly",
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-cxx check-cxxabi check-unwind",
+ )
+
+ def test_clang(self):
+ env_variables = compute_projects.get_env_variables(
+ ["clang/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"],
+ "clang;clang-tools-extra;compiler-rt;lld;llvm",
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"],
+ "check-clang check-clang-tools check-compiler-rt",
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-cxx check-cxxabi check-unwind",
+ )
+
+ def test_clang_windows(self):
+ env_variables = compute_projects.get_env_variables(
+ ["clang/CMakeLists.txt"], "Windows"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"], "clang;clang-tools-extra;llvm"
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"], "check-clang check-clang-tools"
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-cxx check-cxxabi check-unwind",
+ )
+
+ def test_bolt(self):
+ env_variables = compute_projects.get_env_variables(
+ ["bolt/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(env_variables["projects_to_build"], "bolt;clang;lld;llvm")
+ self.assertEqual(env_variables["project_check_targets"], "check-bolt")
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
+ def test_lldb(self):
+ env_variables = compute_projects.get_env_variables(
+ ["lldb/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(env_variables["projects_to_build"], "clang;lldb;llvm")
+ self.assertEqual(env_variables["project_check_targets"], "check-lldb")
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
+ def test_mlir(self):
+ env_variables = compute_projects.get_env_variables(
+ ["mlir/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(env_variables["projects_to_build"], "clang;flang;llvm;mlir")
+ self.assertEqual(
+ env_variables["project_check_targets"], "check-flang check-mlir"
+ )
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
+ def test_flang(self):
+ env_variables = compute_projects.get_env_variables(
+ ["flang/CMakeLists.txt"], "Linux"
+ )
+ self.assertEqual(env_variables["projects_to_build"], "clang;flang;llvm")
+ self.assertEqual(env_variables["project_check_targets"], "check-flang")
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
+
+if __name__ == "__main__":
+ unittest.main()
>From e0d0e8df8d3ab777fcb8a1cccf5be88635854011 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Sun, 23 Mar 2025 21:44:57 +0000
Subject: [PATCH 2/5] logic fixes
Created using spr 1.3.4
---
.ci/compute_projects.py | 6 +++++-
.ci/compute_projects_test.py | 16 ++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index c669e89faf946..df0ceb5dde866 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -87,8 +87,12 @@ def _add_dependencies(projects: Set[str]) -> Set[str]:
def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set[str]:
"""Computes the list of projects that should be passed to LLVM_ENABLE_PROJECTS"""
- projects_to_test = set(modified_projects)
+ projects_to_test = set()
for modified_project in modified_projects:
+ # Skip all projects where we cannot run tests.
+ if modified_project not in PROJECT_CHECK_TARGETS:
+ continue
+ projects_to_test.add(modified_project)
if modified_project not in DEPENDENTS_TO_TEST:
continue
projects_to_test.update(DEPENDENTS_TO_TEST[modified_project])
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index b12ad69adf15a..f8bd674be35cb 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -125,6 +125,22 @@ def test_flang(self):
self.assertEqual(env_variables["runtimes_to_build"], "")
self.assertEqual(env_variables["runtimes_check_targets"], "")
+ def test_invalid_subproject(self):
+ env_variables = compute_projects.get_env_variables(
+ [".ci/compute_projects.py"], "Linux"
+ )
+ self.assertEqual(env_variables["projects_to_build"], "")
+ self.assertEqual(env_variables["project_check_targets"], "")
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
+ def test_top_level_file(self):
+ env_variables = compute_projects.get_env_variables(["README.md"], "Linux")
+ self.assertEqual(env_variables["projects_to_build"], "")
+ self.assertEqual(env_variables["project_check_targets"], "")
+ self.assertEqual(env_variables["runtimes_to_build"], "")
+ self.assertEqual(env_variables["runtimes_check_targets"], "")
+
if __name__ == "__main__":
unittest.main()
>From a10f6608f82334c6b0d78d68087acbc61cf659d6 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Sun, 23 Mar 2025 22:43:37 +0000
Subject: [PATCH 3/5] docstrings
Created using spr 1.3.4
---
.ci/compute_projects.py | 30 +++++++++++++++++++++++-------
.ci/compute_projects_test.py | 20 ++++++++++++++++++++
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index df0ceb5dde866..3ae386d198730 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -51,6 +51,20 @@
"bolt", # No Windows Support.
}
+EXCLUDE_MAC = {
+ "bolt",
+ "compiler-rt",
+ "cross-project-tests",
+ "flang",
+ "libc",
+ "libcxx",
+ "libcxxabi",
+ "libunwind",
+ "lldb",
+ "openmp",
+ "polly",
+}
+
PROJECT_CHECK_TARGETS = {
"clang-tools-extra": "check-clang-tools",
"compiler-rt": "check-compiler-rt",
@@ -86,7 +100,6 @@ def _add_dependencies(projects: Set[str]) -> Set[str]:
def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set[str]:
- """Computes the list of projects that should be passed to LLVM_ENABLE_PROJECTS"""
projects_to_test = set()
for modified_project in modified_projects:
# Skip all projects where we cannot run tests.
@@ -104,6 +117,10 @@ def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set
for to_exclude in EXCLUDE_WINDOWS:
if to_exclude in projects_to_test:
projects_to_test.remove(to_exclude)
+ elif platform == "Darwin":
+ for to_exclude in EXCLUDE_MAC:
+ if to_exclude in projects_to_test:
+ projects_to_test.remove(to_exclude)
else:
raise ValueError("Unexpected platform.")
return projects_to_test
@@ -114,7 +131,6 @@ def _compute_projects_to_build(projects_to_test: Set[str]) -> Set[str]:
def _compute_project_check_targets(projects_to_test: Set[str]) -> Set[str]:
- """blah blah blah"""
check_targets = set()
for project_to_test in projects_to_test:
if project_to_test not in PROJECT_CHECK_TARGETS:
@@ -124,7 +140,6 @@ def _compute_project_check_targets(projects_to_test: Set[str]) -> Set[str]:
def _compute_runtimes_to_test(projects_to_test: Set[str]) -> Set[str]:
- """blah blah blah"""
runtimes_to_test = set()
for project_to_test in projects_to_test:
if project_to_test not in DEPENDENT_RUNTIMES_TO_TEST:
@@ -134,7 +149,6 @@ def _compute_runtimes_to_test(projects_to_test: Set[str]) -> Set[str]:
def _compute_runtime_check_targets(runtimes_to_test: Set[str]) -> Set[str]:
- """blah blah blah"""
check_targets = set()
for runtime_to_test in runtimes_to_test:
check_targets.add(PROJECT_CHECK_TARGETS[runtime_to_test])
@@ -142,7 +156,6 @@ def _compute_runtime_check_targets(runtimes_to_test: Set[str]) -> Set[str]:
def _get_modified_projects(modified_files: list[str]) -> Set[str]:
- """blah blah blah"""
modified_projects = set()
for modified_file in modified_files:
modified_projects.add(pathlib.Path(modified_file).parts[0])
@@ -165,6 +178,9 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
if __name__ == "__main__":
- env_variables = get_env_variables(sys.stdin.readlines(), platform.system())
+ current_platform = platform.system()
+ if len(sys.argv) == 2:
+ current_platform = sys.argv[1]
+ env_variables = get_env_variables(sys.stdin.readlines(), current_platform)
for env_variable in env_variables:
- print(f"{env_variable}={env_variables[env_variable]}")
+ print(f"{env_variable}=\"{env_variables[env_variable]}\"")
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index f8bd674be35cb..a10b663a5fd29 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -48,6 +48,26 @@ def test_llvm_windows(self):
env_variables["runtimes_check_targets"],
"check-cxx check-cxxabi check-unwind",
)
+
+ def test_llvm_mac(self):
+ env_variables = compute_projects.get_env_variables(
+ ["llvm/CMakeLists.txt"], "Darwin"
+ )
+ self.assertEqual(
+ env_variables["projects_to_build"],
+ "clang;clang-tools-extra;lld;llvm;mlir",
+ )
+ self.assertEqual(
+ env_variables["project_check_targets"],
+ "check-clang check-clang-tools check-lld check-llvm check-mlir",
+ )
+ self.assertEqual(
+ env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
+ )
+ self.assertEqual(
+ env_variables["runtimes_check_targets"],
+ "check-cxx check-cxxabi check-unwind",
+ )
def test_clang(self):
env_variables = compute_projects.get_env_variables(
>From 6b29b17edb0dfb05d1ae749e45ecb002d653d61e Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Mon, 24 Mar 2025 18:25:26 +0000
Subject: [PATCH 4/5] feedback
Created using spr 1.3.4
---
.ci/compute_projects.py | 26 ++++++++++++++++++++------
.ci/compute_projects_test.py | 2 +-
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index 3ae386d198730..9f06cef47e8af 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -11,6 +11,11 @@
import platform
import sys
+# This mapping lists out the dependencies for each project. These should be
+# direct dependencies. The code will handle transitive dependencies. Some
+# projects might have optional dependencies depending upon how they are built.
+# The dependencies listed here should be the dependencies required for the
+# configuration built/tested in the premerge CI.
PROJECT_DEPENDENCIES = {
"llvm": set(),
"clang": {"llvm"},
@@ -27,9 +32,14 @@
"polly": {"llvm"},
}
+# This mapping describes the additional projects that should be tested when a
+# specific project is touched. We enumerate them specifically rather than
+# just invert the dependencies list to give more control over what exactly is
+# tested.
DEPENDENTS_TO_TEST = {
"llvm": {"bolt", "clang", "clang-tools-extra", "lld", "lldb", "mlir", "polly"},
"lld": {"bolt", "cross-project-tests"},
+ # TODO(issues/132795): LLDB should be enabled on clang changes.
"clang": {"clang-tools-extra", "compiler-rt", "cross-project-tests"},
"clang-tools-extra": {"libc"},
"mlir": {"flang"},
@@ -38,16 +48,16 @@
DEPENDENT_RUNTIMES_TO_TEST = {"clang": {"libcxx", "libcxxabi", "libunwind"}}
EXCLUDE_LINUX = {
- "cross-project-tests", # Tests are failing.
+ "cross-project-tests", # TODO(issues/132796): Tests are failing.
"openmp", # https://github.com/google/llvm-premerge-checks/issues/410
}
EXCLUDE_WINDOWS = {
- "cross-project-tests", # Tests are failing.
- "compiler-rt", # Tests are taking too long.
- "openmp", # Does not detect perl installation.
+ "cross-project-tests", # TODO(issues/132797): Tests are failing.
+ "compiler-rt", # TODO(issues/132798): Tests take excessive time.
+ "openmp", # TODO(issues/132799): Does not detect perl installation.
"libc", # No Windows Support.
- "lldb", # Custom environment requirements.
+ "lldb", # TODO(issues/132800): Needs environment setup.
"bolt", # No Windows Support.
}
@@ -169,6 +179,10 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
projects_check_targets = _compute_project_check_targets(projects_to_test)
runtimes_to_test = _compute_runtimes_to_test(projects_to_test)
runtimes_check_targets = _compute_runtime_check_targets(runtimes_to_test)
+ # We use a semicolon to separate the projects/runtimes as they get passed
+ # to the CMake invocation and thus we need to use the CMake list separator
+ # (;). We use spaces to separate the check targets as they end up getting
+ # passed to ninja.
return {
"projects_to_build": ";".join(sorted(projects_to_build)),
"project_check_targets": " ".join(sorted(projects_check_targets)),
@@ -183,4 +197,4 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
current_platform = sys.argv[1]
env_variables = get_env_variables(sys.stdin.readlines(), current_platform)
for env_variable in env_variables:
- print(f"{env_variable}=\"{env_variables[env_variable]}\"")
+ print(f"{env_variable}='{env_variables[env_variable]}'")
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index a10b663a5fd29..253fa5c241bb4 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -48,7 +48,7 @@ def test_llvm_windows(self):
env_variables["runtimes_check_targets"],
"check-cxx check-cxxabi check-unwind",
)
-
+
def test_llvm_mac(self):
env_variables = compute_projects.get_env_variables(
["llvm/CMakeLists.txt"], "Darwin"
>From 3df23dc1d73c94ca92bb813d85cf7c84e5c3b621 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Mon, 24 Mar 2025 18:44:40 +0000
Subject: [PATCH 5/5] feedback
Created using spr 1.3.4
---
.ci/compute_projects.py | 26 ++++++++++++++++++++++++--
.ci/compute_projects_test.py | 4 ++--
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/.ci/compute_projects.py b/.ci/compute_projects.py
index 9f06cef47e8af..8bae8359ff231 100644
--- a/.ci/compute_projects.py
+++ b/.ci/compute_projects.py
@@ -37,7 +37,16 @@
# just invert the dependencies list to give more control over what exactly is
# tested.
DEPENDENTS_TO_TEST = {
- "llvm": {"bolt", "clang", "clang-tools-extra", "lld", "lldb", "mlir", "polly"},
+ "llvm": {
+ "bolt",
+ "clang",
+ "clang-tools-extra",
+ "lld",
+ "lldb",
+ "mlir",
+ "polly",
+ "flang",
+ },
"lld": {"bolt", "cross-project-tests"},
# TODO(issues/132795): LLDB should be enabled on clang changes.
"clang": {"clang-tools-extra", "compiler-rt", "cross-project-tests"},
@@ -61,6 +70,13 @@
"bolt", # No Windows Support.
}
+# These are projects that we should test if the project itself is changed but
+# where testing is not yet stable enough for it to be enabled on changes to
+# dependencies.
+EXCLUDE_DEPENDENTS_WINDOWS = {
+ "flang", # TODO(issues/132803): Flang is not stable.
+}
+
EXCLUDE_MAC = {
"bolt",
"compiler-rt",
@@ -118,7 +134,13 @@ def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set
projects_to_test.add(modified_project)
if modified_project not in DEPENDENTS_TO_TEST:
continue
- projects_to_test.update(DEPENDENTS_TO_TEST[modified_project])
+ for dependent_project in DEPENDENTS_TO_TEST[modified_project]:
+ if (
+ platform == "Windows"
+ and dependent_project in EXCLUDE_DEPENDENTS_WINDOWS
+ ):
+ continue
+ projects_to_test.add(dependent_project)
if platform == "Linux":
for to_exclude in EXCLUDE_LINUX:
if to_exclude in projects_to_test:
diff --git a/.ci/compute_projects_test.py b/.ci/compute_projects_test.py
index 253fa5c241bb4..4e79f9368539d 100644
--- a/.ci/compute_projects_test.py
+++ b/.ci/compute_projects_test.py
@@ -15,11 +15,11 @@ def test_llvm(self):
)
self.assertEqual(
env_variables["projects_to_build"],
- "bolt;clang;clang-tools-extra;lld;lldb;llvm;mlir;polly",
+ "bolt;clang;clang-tools-extra;flang;lld;lldb;llvm;mlir;polly",
)
self.assertEqual(
env_variables["project_check_targets"],
- "check-bolt check-clang check-clang-tools check-lld check-lldb check-llvm check-mlir check-polly",
+ "check-bolt check-clang check-clang-tools check-flang check-lld check-lldb check-llvm check-mlir check-polly",
)
self.assertEqual(
env_variables["runtimes_to_build"], "libcxx;libcxxabi;libunwind"
More information about the llvm-commits
mailing list