Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion .ci/compute_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
PROJECT_DEPENDENCIES = {
"llvm": set(),
"clang": {"llvm"},
"CIR": {"clang", "mlir"},
"bolt": {"clang", "lld", "llvm"},
"clang-tools-extra": {"clang", "llvm"},
"compiler-rt": {"clang", "lld"},
Expand Down Expand Up @@ -55,6 +56,7 @@
".ci": {
"llvm",
"clang",
"CIR",
"lld",
"lldb",
"bolt",
Expand Down Expand Up @@ -128,6 +130,7 @@
"lldb": "check-lldb",
"llvm": "check-llvm",
"clang": "check-clang",
"CIR": "check-clang-cir",
"bolt": "check-bolt",
"lld": "check-lld",
"flang": "check-flang",
Expand Down Expand Up @@ -192,7 +195,12 @@ def _compute_projects_to_test(modified_projects: Set[str], platform: str) -> Set
def _compute_projects_to_build(
projects_to_test: Set[str], runtimes: Set[str]
) -> Set[str]:
return _add_dependencies(projects_to_test, runtimes)
projects_with_deps = _add_dependencies(projects_to_test, runtimes)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this to avoid the temp variable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. I guess this is an artifact of my now-deleted change to remove CIR here.

# CIR is used as a pseudo-project in this script. We detect modifications
# to clang's CIR-specific subdirectories and add CIR as a modified project
# if a file in these directories is modified, but we need to remove it
# explicitly here.
return projects_with_deps - {"CIR"}


def _compute_project_check_targets(projects_to_test: Set[str]) -> Set[str]:
Expand Down Expand Up @@ -247,6 +255,15 @@ def _get_modified_projects(modified_files: list[str]) -> Set[str]:
# capacity.
if len(path_parts) > 3 and path_parts[:3] == ("llvm", "utils", "gn"):
continue
# If the file is in the clang/lib/CIR directory, add the CIR project.
if len(path_parts) > 3 and (
path_parts[:3] == ("clang", "lib", "CIR")
or path_parts[:3] == ("clang", "test", "CIR")
or path_parts[:4] == ("clang", "include", "clang", "CIR")
):
modified_projects.add("clang")
modified_projects.add("CIR")
continue
modified_projects.add(pathlib.Path(modified_file).parts[0])
return modified_projects

Expand All @@ -267,6 +284,12 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
runtimes_check_targets_needs_reconfig = _compute_project_check_targets(
runtimes_to_test_needs_reconfig
)

# Check if both clang and mlir are in projects_to_build to enable CIR
enable_cir = (
"ON" if "clang" in projects_to_build and "mlir" in projects_to_build else "OFF"
)

# 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
Expand All @@ -279,6 +302,7 @@ def get_env_variables(modified_files: list[str], platform: str) -> Set[str]:
"runtimes_check_targets_needs_reconfig": " ".join(
sorted(runtimes_check_targets_needs_reconfig)
),
"enable_cir": enable_cir,
}


Expand Down
37 changes: 35 additions & 2 deletions .ci/compute_projects_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ def test_clang(self):
env_variables["runtimes_check_targets_needs_reconfig"],
"check-cxx check-cxxabi check-unwind",
)
self.assertEqual(
env_variables["enable_cir"],
"OFF",
)

def test_clang_windows(self):
env_variables = compute_projects.get_env_variables(
Expand All @@ -126,6 +130,32 @@ def test_clang_windows(self):
env_variables["runtimes_check_targets_needs_reconfig"],
"check-cxx check-cxxabi check-unwind",
)
self.assertEqual(env_variables["enable_cir"], "OFF")

def test_cir(self):
env_variables = compute_projects.get_env_variables(
["clang/lib/CIR/CMakeLists.txt"], "Linux"
)
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-cir check-clang-tools",
)
self.assertEqual(
env_variables["runtimes_to_build"], "compiler-rt;libcxx;libcxxabi;libunwind"
)
self.assertEqual(
env_variables["runtimes_check_targets"],
"check-compiler-rt",
)
self.assertEqual(
env_variables["runtimes_check_targets_needs_reconfig"],
"check-cxx check-cxxabi check-unwind",
)
self.assertEqual(env_variables["enable_cir"], "ON")

def test_bolt(self):
env_variables = compute_projects.get_env_variables(
Expand Down Expand Up @@ -153,11 +183,13 @@ def test_mlir(self):
)
self.assertEqual(env_variables["projects_to_build"], "clang;flang;llvm;mlir")
self.assertEqual(
env_variables["project_check_targets"], "check-flang check-mlir"
env_variables["project_check_targets"],
"check-flang check-mlir",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Formatting only change that should probably be reverted?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bump.

)
self.assertEqual(env_variables["runtimes_to_build"], "")
self.assertEqual(env_variables["runtimes_check_targets"], "")
self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
self.assertEqual(env_variables["enable_cir"], "ON")

def test_flang(self):
env_variables = compute_projects.get_env_variables(
Expand All @@ -168,6 +200,7 @@ def test_flang(self):
self.assertEqual(env_variables["runtimes_to_build"], "")
self.assertEqual(env_variables["runtimes_check_targets"], "")
self.assertEqual(env_variables["runtimes_check_targets_needs_reconfig"], "")
self.assertEqual(env_variables["enable_cir"], "OFF")

def test_invalid_subproject(self):
env_variables = compute_projects.get_env_variables(
Expand Down Expand Up @@ -237,7 +270,7 @@ def test_ci(self):
)
self.assertEqual(
env_variables["project_check_targets"],
"check-bolt check-clang check-clang-tools check-flang check-lld check-lldb check-llvm check-mlir check-polly",
"check-bolt check-clang check-clang-cir check-clang-tools check-flang check-lld check-lldb check-llvm check-mlir check-polly",
)
self.assertEqual(
env_variables["runtimes_to_build"],
Expand Down
2 changes: 2 additions & 0 deletions .ci/monolithic-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ targets="${2}"
runtimes="${3}"
runtime_targets="${4}"
runtime_targets_needs_reconfig="${5}"
enable_cir="${6}"

lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests"

Expand All @@ -72,6 +73,7 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
-G Ninja \
-D CMAKE_PREFIX_PATH="${HOME}/.local" \
-D CMAKE_BUILD_TYPE=Release \
-D CLANG_ENABLE_CIR=${enable_cir} \
-D LLVM_ENABLE_ASSERTIONS=ON \
-D LLVM_BUILD_EXAMPLES=ON \
-D COMPILER_RT_BUILD_LIBFUZZER=OFF \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/premerge.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
export CC=/opt/llvm/bin/clang
export CXX=/opt/llvm/bin/clang++

./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}"
./.ci/monolithic-linux.sh "${projects_to_build}" "${project_check_targets}" "${runtimes_to_build}" "${runtimes_check_targets}" "${runtimes_check_targets_needs_reconfig}" "${enable_cir}"
- name: Upload Artifacts
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
Expand Down