#184545 default-enables the IO sandbox in assert-builds. This causes Clang using Polly to crash (#188568). The issue is that `PassBuilder` uses `vfs::getRealFileSystem()` by default which is considered a IO sandbox violation in the Clang process. With this PR store the VFS from the `PassBuilder` from the original `registerPollyPasses` call for creating other `PassBuilder` instances. This PR also adds infrastructure for running Polly in `clang` (in addition in `opt`). `opt` does not enable the sandbox such that we need separate tests using Clang. Closes: #188568
50 lines
1.5 KiB
Python
Executable File
50 lines
1.5 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
# 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
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Adapt to location in source tree
|
|
llvmsrcroot = os.path.normpath(f"{__file__}/../../..")
|
|
|
|
sys.path.insert(0, os.path.join(llvmsrcroot, ".ci/buildbot"))
|
|
import worker
|
|
|
|
llvmbuilddir = "llvm.build"
|
|
|
|
with worker.run(
|
|
__file__,
|
|
llvmsrcroot,
|
|
clobberpaths=[llvmbuilddir],
|
|
incremental=True,
|
|
) as w:
|
|
with w.step("configure-llvm", halt_on_fail=True):
|
|
cmakecmd = [
|
|
"cmake",
|
|
f"-S{w.in_llvmsrc('llvm')}",
|
|
f"-B{llvmbuilddir}",
|
|
"-GNinja",
|
|
"-DCMAKE_BUILD_TYPE=Release",
|
|
"-DCMAKE_C_COMPILER_LAUNCHER=ccache",
|
|
"-DCMAKE_CXX_COMPILER_LAUNCHER=ccache",
|
|
"-DLLVM_ENABLE_PROJECTS=polly;clang",
|
|
"-DLLVM_TARGETS_TO_BUILD=X86",
|
|
"-DLLVM_ENABLE_LLD=ON",
|
|
"-DLLVM_ENABLE_ASSERTIONS=ON",
|
|
"-DLLVM_POLLY_LINK_INTO_TOOLS=OFF",
|
|
"-DBUILD_SHARED_LIBS=OFF",
|
|
"-DLLVM_BUILD_LLVM_DYLIB=OFF",
|
|
"-DLLVM_LINK_LLVM_DYLIB=OFF",
|
|
]
|
|
if w.jobs:
|
|
cmakecmd.append(f"-DLLVM_LIT_ARGS=-sv;-j{w.jobs}")
|
|
w.run_command(cmakecmd)
|
|
|
|
with w.step("build-llvm", halt_on_fail=True):
|
|
w.run_ninja(builddir=llvmbuilddir, ccache_stats=True)
|
|
|
|
with w.step("check-polly"):
|
|
w.run_ninja(["check-polly"], builddir=llvmbuilddir)
|