Auto merge of #117313 - GuillaumeGomez:cg_gcc-tests, r=onur-ozkan
Run part of `rustc_codegen_gcc`'s tests in CI Thanks to #112701 and `@bjorn3,` it made this much easier. Also cc `@antoyo.` r? `@bjorn3`
This commit is contained in:
commit
6b9d6dedd0
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@ -57,8 +57,9 @@ jobs:
|
|||||||
os: ubuntu-20.04-4core-16gb
|
os: ubuntu-20.04-4core-16gb
|
||||||
env: {}
|
env: {}
|
||||||
- name: x86_64-gnu-llvm-15
|
- name: x86_64-gnu-llvm-15
|
||||||
|
env:
|
||||||
|
ENABLE_GCC_CODEGEN: "1"
|
||||||
os: ubuntu-20.04-16core-64gb
|
os: ubuntu-20.04-16core-64gb
|
||||||
env: {}
|
|
||||||
- name: x86_64-gnu-tools
|
- name: x86_64-gnu-tools
|
||||||
os: ubuntu-20.04-16core-64gb
|
os: ubuntu-20.04-16core-64gb
|
||||||
env: {}
|
env: {}
|
||||||
|
@ -18,7 +18,6 @@ path = "tests/lang_tests_release.rs"
|
|||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["master"]
|
|
||||||
master = ["gccjit/master"]
|
master = ["gccjit/master"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -25,7 +25,7 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
HOST_TRIPLE=$(rustc -vV | grep host | cut -d: -f2 | tr -d " ")
|
HOST_TRIPLE=$($RUSTC -vV | grep host | cut -d: -f2 | tr -d " ")
|
||||||
# TODO: remove $OVERWRITE_TARGET_TRIPLE when config.sh is removed.
|
# TODO: remove $OVERWRITE_TARGET_TRIPLE when config.sh is removed.
|
||||||
TARGET_TRIPLE="${OVERWRITE_TARGET_TRIPLE:-$HOST_TRIPLE}"
|
TARGET_TRIPLE="${OVERWRITE_TARGET_TRIPLE:-$HOST_TRIPLE}"
|
||||||
|
|
||||||
@ -54,6 +54,10 @@ if [[ -z "$BUILTIN_BACKEND" ]]; then
|
|||||||
export RUSTFLAGS="$CG_RUSTFLAGS $linker -Csymbol-mangling-version=v0 -Cdebuginfo=2 $disable_lto_flags -Zcodegen-backend=$(pwd)/target/${CHANNEL:-debug}/librustc_codegen_gcc.$dylib_ext --sysroot $(pwd)/build_sysroot/sysroot $TEST_FLAGS"
|
export RUSTFLAGS="$CG_RUSTFLAGS $linker -Csymbol-mangling-version=v0 -Cdebuginfo=2 $disable_lto_flags -Zcodegen-backend=$(pwd)/target/${CHANNEL:-debug}/librustc_codegen_gcc.$dylib_ext --sysroot $(pwd)/build_sysroot/sysroot $TEST_FLAGS"
|
||||||
else
|
else
|
||||||
export RUSTFLAGS="$CG_RUSTFLAGS $linker -Csymbol-mangling-version=v0 -Cdebuginfo=2 $disable_lto_flags -Zcodegen-backend=gcc $TEST_FLAGS -Cpanic=abort"
|
export RUSTFLAGS="$CG_RUSTFLAGS $linker -Csymbol-mangling-version=v0 -Cdebuginfo=2 $disable_lto_flags -Zcodegen-backend=gcc $TEST_FLAGS -Cpanic=abort"
|
||||||
|
|
||||||
|
if [[ ! -z "$RUSTC_SYSROOT" ]]; then
|
||||||
|
export RUSTFLAGS="$RUSTFLAGS --sysroot $RUSTC_SYSROOT"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# FIXME(antoyo): remove once the atomic shim is gone
|
# FIXME(antoyo): remove once the atomic shim is gone
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[panic_handler]
|
#[panic_handler]
|
||||||
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
|
fn panic_handler(_: &core::panic::PanicInfo<'_>) -> ! {
|
||||||
core::intrinsics::abort();
|
core::intrinsics::abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![feature(allocator_api, rustc_private)]
|
#![feature(allocator_api, rustc_private)]
|
||||||
#![cfg_attr(any(unix, target_os = "redox"), feature(libc))]
|
|
||||||
|
|
||||||
// The minimum alignment guaranteed by the architecture. This value is used to
|
// The minimum alignment guaranteed by the architecture. This value is used to
|
||||||
// add fast paths for low alignment values.
|
// add fast paths for low alignment values.
|
||||||
@ -48,7 +47,18 @@ pub(crate) unsafe fn realloc_fallback(&self, ptr: *mut u8, old_layout: Layout,
|
|||||||
}
|
}
|
||||||
#[cfg(any(unix, target_os = "redox"))]
|
#[cfg(any(unix, target_os = "redox"))]
|
||||||
mod platform {
|
mod platform {
|
||||||
extern crate libc;
|
mod libc {
|
||||||
|
use core::ffi::{c_void, c_int};
|
||||||
|
|
||||||
|
#[link(name = "c")]
|
||||||
|
extern "C" {
|
||||||
|
pub fn malloc(size: usize) -> *mut c_void;
|
||||||
|
pub fn realloc(ptr: *mut c_void, size: usize) -> *mut c_void;
|
||||||
|
pub fn calloc(nmemb: usize, size: usize) -> *mut c_void;
|
||||||
|
pub fn free(ptr: *mut u8);
|
||||||
|
pub fn posix_memalign(memptr: *mut *mut c_void, alignment: usize, size: usize) -> c_int;
|
||||||
|
}
|
||||||
|
}
|
||||||
use core::ptr;
|
use core::ptr;
|
||||||
use MIN_ALIGN;
|
use MIN_ALIGN;
|
||||||
use System;
|
use System;
|
||||||
@ -82,12 +92,12 @@ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
|||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
|
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
|
||||||
libc::free(ptr as *mut libc::c_void)
|
libc::free(ptr as *mut _)
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
|
if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
|
||||||
libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8
|
libc::realloc(ptr as *mut _, new_size) as *mut u8
|
||||||
} else {
|
} else {
|
||||||
self.realloc_fallback(ptr, layout, new_size)
|
self.realloc_fallback(ptr, layout, new_size)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
extern {}
|
extern {}
|
||||||
|
|
||||||
#[panic_handler]
|
#[panic_handler]
|
||||||
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
|
fn panic_handler(_: &core::panic::PanicInfo<'_>) -> ! {
|
||||||
core::intrinsics::abort();
|
core::intrinsics::abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@ o("missing-tools", "dist.missing-tools", "allow failures when building tools")
|
|||||||
o("use-libcxx", "llvm.use-libcxx", "build LLVM with libc++")
|
o("use-libcxx", "llvm.use-libcxx", "build LLVM with libc++")
|
||||||
o("control-flow-guard", "rust.control-flow-guard", "Enable Control Flow Guard")
|
o("control-flow-guard", "rust.control-flow-guard", "Enable Control Flow Guard")
|
||||||
o("patch-binaries-for-nix", "build.patch-binaries-for-nix", "whether patch binaries for usage with Nix toolchains")
|
o("patch-binaries-for-nix", "build.patch-binaries-for-nix", "whether patch binaries for usage with Nix toolchains")
|
||||||
|
o("new-symbol-mangling", "rust.new-symbol-mangling", "use symbol-mangling-version v0")
|
||||||
|
|
||||||
v("llvm-cflags", "llvm.cflags", "build LLVM with these extra compiler flags")
|
v("llvm-cflags", "llvm.cflags", "build LLVM with these extra compiler flags")
|
||||||
v("llvm-cxxflags", "llvm.cxxflags", "build LLVM with these extra compiler flags")
|
v("llvm-cxxflags", "llvm.cxxflags", "build LLVM with these extra compiler flags")
|
||||||
|
@ -45,15 +45,42 @@ pub struct Std {
|
|||||||
/// When using download-rustc, we need to use a new build of `std` for running unit tests of Std itself,
|
/// When using download-rustc, we need to use a new build of `std` for running unit tests of Std itself,
|
||||||
/// but we need to use the downloaded copy of std for linking to rustdoc. Allow this to be overriden by `builder.ensure` from other steps.
|
/// but we need to use the downloaded copy of std for linking to rustdoc. Allow this to be overriden by `builder.ensure` from other steps.
|
||||||
force_recompile: bool,
|
force_recompile: bool,
|
||||||
|
extra_rust_args: &'static [&'static str],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Std {
|
impl Std {
|
||||||
pub fn new(compiler: Compiler, target: TargetSelection) -> Self {
|
pub fn new(compiler: Compiler, target: TargetSelection) -> Self {
|
||||||
Self { target, compiler, crates: Default::default(), force_recompile: false }
|
Self {
|
||||||
|
target,
|
||||||
|
compiler,
|
||||||
|
crates: Default::default(),
|
||||||
|
force_recompile: false,
|
||||||
|
extra_rust_args: &[],
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn force_recompile(compiler: Compiler, target: TargetSelection) -> Self {
|
pub fn force_recompile(compiler: Compiler, target: TargetSelection) -> Self {
|
||||||
Self { target, compiler, crates: Default::default(), force_recompile: true }
|
Self {
|
||||||
|
target,
|
||||||
|
compiler,
|
||||||
|
crates: Default::default(),
|
||||||
|
force_recompile: true,
|
||||||
|
extra_rust_args: &[],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_with_extra_rust_args(
|
||||||
|
compiler: Compiler,
|
||||||
|
target: TargetSelection,
|
||||||
|
extra_rust_args: &'static [&'static str],
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
target,
|
||||||
|
compiler,
|
||||||
|
crates: Default::default(),
|
||||||
|
force_recompile: false,
|
||||||
|
extra_rust_args,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,6 +108,7 @@ fn make_run(run: RunConfig<'_>) {
|
|||||||
target: run.target,
|
target: run.target,
|
||||||
crates,
|
crates,
|
||||||
force_recompile: false,
|
force_recompile: false,
|
||||||
|
extra_rust_args: &[],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,6 +216,9 @@ fn run(self, builder: &Builder<'_>) {
|
|||||||
if target.is_synthetic() {
|
if target.is_synthetic() {
|
||||||
cargo.env("RUSTC_BOOTSTRAP_SYNTHETIC_TARGET", "1");
|
cargo.env("RUSTC_BOOTSTRAP_SYNTHETIC_TARGET", "1");
|
||||||
}
|
}
|
||||||
|
for rustflag in self.extra_rust_args.into_iter() {
|
||||||
|
cargo.rustflag(rustflag);
|
||||||
|
}
|
||||||
|
|
||||||
let _guard = builder.msg(
|
let _guard = builder.msg(
|
||||||
Kind::Build,
|
Kind::Build,
|
||||||
|
@ -3063,6 +3063,7 @@ fn run(self, builder: &Builder<'_>) {
|
|||||||
// FIXME handle vendoring for source tarballs before removing the --skip-test below
|
// FIXME handle vendoring for source tarballs before removing the --skip-test below
|
||||||
let download_dir = builder.out.join("cg_clif_download");
|
let download_dir = builder.out.join("cg_clif_download");
|
||||||
|
|
||||||
|
// FIXME: Uncomment the `prepare` command below once vendoring is implemented.
|
||||||
/*
|
/*
|
||||||
let mut prepare_cargo = build_cargo();
|
let mut prepare_cargo = build_cargo();
|
||||||
prepare_cargo.arg("--").arg("prepare").arg("--download-dir").arg(&download_dir);
|
prepare_cargo.arg("--").arg("prepare").arg("--download-dir").arg(&download_dir);
|
||||||
@ -3094,3 +3095,123 @@ fn run(self, builder: &Builder<'_>) {
|
|||||||
builder.run_cmd(BootstrapCommand::from(&mut cmd).fail_fast());
|
builder.run_cmd(BootstrapCommand::from(&mut cmd).fail_fast());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct CodegenGCC {
|
||||||
|
compiler: Compiler,
|
||||||
|
target: TargetSelection,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Step for CodegenGCC {
|
||||||
|
type Output = ();
|
||||||
|
const DEFAULT: bool = true;
|
||||||
|
const ONLY_HOSTS: bool = true;
|
||||||
|
|
||||||
|
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||||
|
run.paths(&["compiler/rustc_codegen_gcc"])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_run(run: RunConfig<'_>) {
|
||||||
|
let builder = run.builder;
|
||||||
|
let host = run.build_triple();
|
||||||
|
let compiler = run.builder.compiler_for(run.builder.top_stage, host, host);
|
||||||
|
|
||||||
|
if builder.doc_tests == DocTests::Only {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let triple = run.target.triple;
|
||||||
|
let target_supported =
|
||||||
|
if triple.contains("linux") { triple.contains("x86_64") } else { false };
|
||||||
|
if !target_supported {
|
||||||
|
builder.info("target not supported by rustc_codegen_gcc. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if builder.remote_tested(run.target) {
|
||||||
|
builder.info("remote testing is not supported by rustc_codegen_gcc. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if !builder.config.rust_codegen_backends.contains(&INTERNER.intern_str("gcc")) {
|
||||||
|
builder.info("gcc not in rust.codegen-backends. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.ensure(CodegenGCC { compiler, target: run.target });
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(self, builder: &Builder<'_>) {
|
||||||
|
let compiler = self.compiler;
|
||||||
|
let target = self.target;
|
||||||
|
|
||||||
|
builder.ensure(compile::Std::new_with_extra_rust_args(
|
||||||
|
compiler,
|
||||||
|
target,
|
||||||
|
&["-Csymbol-mangling-version=v0", "-Cpanic=abort"],
|
||||||
|
));
|
||||||
|
|
||||||
|
// If we're not doing a full bootstrap but we're testing a stage2
|
||||||
|
// version of libstd, then what we're actually testing is the libstd
|
||||||
|
// produced in stage1. Reflect that here by updating the compiler that
|
||||||
|
// we're working with automatically.
|
||||||
|
let compiler = builder.compiler_for(compiler.stage, compiler.host, target);
|
||||||
|
|
||||||
|
let build_cargo = || {
|
||||||
|
let mut cargo = builder.cargo(
|
||||||
|
compiler,
|
||||||
|
Mode::Codegen, // Must be codegen to ensure dlopen on compiled dylibs works
|
||||||
|
SourceType::InTree,
|
||||||
|
target,
|
||||||
|
"run",
|
||||||
|
);
|
||||||
|
cargo.current_dir(&builder.src.join("compiler/rustc_codegen_gcc"));
|
||||||
|
cargo
|
||||||
|
.arg("--manifest-path")
|
||||||
|
.arg(builder.src.join("compiler/rustc_codegen_gcc/build_system/Cargo.toml"));
|
||||||
|
compile::rustc_cargo_env(builder, &mut cargo, target, compiler.stage);
|
||||||
|
|
||||||
|
// Avoid incremental cache issues when changing rustc
|
||||||
|
cargo.env("CARGO_BUILD_INCREMENTAL", "false");
|
||||||
|
cargo.rustflag("-Cpanic=abort");
|
||||||
|
|
||||||
|
cargo
|
||||||
|
};
|
||||||
|
|
||||||
|
builder.info(&format!(
|
||||||
|
"{} GCC stage{} ({} -> {})",
|
||||||
|
Kind::Test.description(),
|
||||||
|
compiler.stage,
|
||||||
|
&compiler.host,
|
||||||
|
target
|
||||||
|
));
|
||||||
|
let _time = helpers::timeit(&builder);
|
||||||
|
|
||||||
|
// FIXME: Uncomment the `prepare` command below once vendoring is implemented.
|
||||||
|
/*
|
||||||
|
let mut prepare_cargo = build_cargo();
|
||||||
|
prepare_cargo.arg("--").arg("prepare");
|
||||||
|
#[allow(deprecated)]
|
||||||
|
builder.config.try_run(&mut prepare_cargo.into()).unwrap();
|
||||||
|
*/
|
||||||
|
|
||||||
|
let mut cargo = build_cargo();
|
||||||
|
|
||||||
|
cargo
|
||||||
|
.arg("--")
|
||||||
|
.arg("test")
|
||||||
|
.arg("--use-system-gcc")
|
||||||
|
.arg("--use-backend")
|
||||||
|
.arg("gcc")
|
||||||
|
.arg("--out-dir")
|
||||||
|
.arg(builder.stage_out(compiler, Mode::ToolRustc).join("cg_gcc"))
|
||||||
|
.arg("--release")
|
||||||
|
.arg("--no-default-features")
|
||||||
|
.arg("--mini-tests")
|
||||||
|
.arg("--std-tests");
|
||||||
|
cargo.args(builder.config.test_args());
|
||||||
|
|
||||||
|
let mut cmd: Command = cargo.into();
|
||||||
|
builder.run_cmd(BootstrapCommand::from(&mut cmd).fail_fast());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -738,6 +738,7 @@ macro_rules! describe {
|
|||||||
test::Debuginfo,
|
test::Debuginfo,
|
||||||
test::UiFullDeps,
|
test::UiFullDeps,
|
||||||
test::CodegenCranelift,
|
test::CodegenCranelift,
|
||||||
|
test::CodegenGCC,
|
||||||
test::Rustdoc,
|
test::Rustdoc,
|
||||||
test::RunCoverageRustdoc,
|
test::RunCoverageRustdoc,
|
||||||
test::Pretty,
|
test::Pretty,
|
||||||
|
@ -24,6 +24,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
xz-utils \
|
xz-utils \
|
||||||
nodejs \
|
nodejs \
|
||||||
mingw-w64 \
|
mingw-w64 \
|
||||||
|
libgccjit-12-dev \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install powershell (universal package) so we can test x.ps1 on Linux
|
# Install powershell (universal package) so we can test x.ps1 on Linux
|
||||||
@ -34,6 +35,9 @@ RUN curl -sL "https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/
|
|||||||
COPY scripts/sccache.sh /scripts/
|
COPY scripts/sccache.sh /scripts/
|
||||||
RUN sh /scripts/sccache.sh
|
RUN sh /scripts/sccache.sh
|
||||||
|
|
||||||
|
# Make `libgccjit.so` accessible to the linker.
|
||||||
|
RUN ln -s /usr/lib/gcc/x86_64-linux-gnu/12/libgccjit.so /usr/lib/x86_64-linux-gnu/libgccjit.so
|
||||||
|
|
||||||
# We are disabling CI LLVM since this builder is intentionally using a host
|
# We are disabling CI LLVM since this builder is intentionally using a host
|
||||||
# LLVM, rather than the typical src/llvm-project LLVM.
|
# LLVM, rather than the typical src/llvm-project LLVM.
|
||||||
ENV NO_DOWNLOAD_CI_LLVM 1
|
ENV NO_DOWNLOAD_CI_LLVM 1
|
||||||
@ -47,6 +51,7 @@ ENV RUST_CONFIGURE_ARGS \
|
|||||||
--build=x86_64-unknown-linux-gnu \
|
--build=x86_64-unknown-linux-gnu \
|
||||||
--llvm-root=/usr/lib/llvm-15 \
|
--llvm-root=/usr/lib/llvm-15 \
|
||||||
--enable-llvm-link-shared \
|
--enable-llvm-link-shared \
|
||||||
|
$USE_NEW_MANGLING \
|
||||||
--set rust.thin-lto-import-instr-limit=10
|
--set rust.thin-lto-import-instr-limit=10
|
||||||
|
|
||||||
COPY host-x86_64/x86_64-gnu-llvm-15/script.sh /tmp/
|
COPY host-x86_64/x86_64-gnu-llvm-15/script.sh /tmp/
|
||||||
|
@ -4,7 +4,13 @@ set -ex
|
|||||||
|
|
||||||
# Only run the stage 1 tests on merges, not on PR CI jobs.
|
# Only run the stage 1 tests on merges, not on PR CI jobs.
|
||||||
if [[ -z "${PR_CI_JOB}" ]]; then
|
if [[ -z "${PR_CI_JOB}" ]]; then
|
||||||
|
# When running gcc backend tests, we need to install `libgccjit` and to not run llvm codegen
|
||||||
|
# tests as it will fail them.
|
||||||
|
if [[ "${ENABLE_GCC_CODEGEN}" == "1" ]]; then
|
||||||
|
../x.py --stage 1 test --skip src/tools/tidy --skip tests/codegen
|
||||||
|
else
|
||||||
../x.py --stage 1 test --skip src/tools/tidy
|
../x.py --stage 1 test --skip src/tools/tidy
|
||||||
|
fi
|
||||||
|
|
||||||
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
||||||
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
||||||
@ -19,8 +25,14 @@ if [[ -z "${PR_CI_JOB}" ]]; then
|
|||||||
../x.py --stage 1 test tests/ui-fulldeps
|
../x.py --stage 1 test tests/ui-fulldeps
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# When running gcc backend tests, we need to install `libgccjit` and to not run llvm codegen
|
||||||
|
# tests as it will fail them.
|
||||||
# NOTE: intentionally uses all of `x.py`, `x`, and `x.ps1` to make sure they all work on Linux.
|
# NOTE: intentionally uses all of `x.py`, `x`, and `x.ps1` to make sure they all work on Linux.
|
||||||
../x.py --stage 2 test --skip src/tools/tidy
|
if [[ "${ENABLE_GCC_CODEGEN}" == "1" ]]; then
|
||||||
|
../x.py --stage 2 test --skip src/tools/tidy --skip tests/codegen
|
||||||
|
else
|
||||||
|
../x.py --stage 2 test --skip src/tools/tidy
|
||||||
|
fi
|
||||||
|
|
||||||
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
||||||
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
||||||
|
@ -15,6 +15,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
sudo \
|
sudo \
|
||||||
xz-utils \
|
xz-utils \
|
||||||
tidy \
|
tidy \
|
||||||
|
libgccjit-12-dev \
|
||||||
\
|
\
|
||||||
# Install dependencies for chromium browser
|
# Install dependencies for chromium browser
|
||||||
gconf-service \
|
gconf-service \
|
||||||
@ -61,6 +62,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
COPY scripts/sccache.sh /scripts/
|
COPY scripts/sccache.sh /scripts/
|
||||||
RUN sh /scripts/sccache.sh
|
RUN sh /scripts/sccache.sh
|
||||||
|
|
||||||
|
# Make `libgccjit.so` accessible.
|
||||||
|
RUN ln -s /usr/lib/gcc/x86_64-linux-gnu/12/libgccjit.so /usr/lib/x86_64-linux-gnu/libgccjit.so
|
||||||
|
# Fix rustc_codegen_gcc lto issues.
|
||||||
|
ENV GCC_EXEC_PREFIX="/usr/lib/gcc/"
|
||||||
|
|
||||||
COPY host-x86_64/x86_64-gnu-tools/checktools.sh /tmp/
|
COPY host-x86_64/x86_64-gnu-tools/checktools.sh /tmp/
|
||||||
|
|
||||||
RUN curl -sL https://nodejs.org/dist/v14.20.0/node-v14.20.0-linux-x64.tar.xz | tar -xJ
|
RUN curl -sL https://nodejs.org/dist/v14.20.0/node-v14.20.0-linux-x64.tar.xz | tar -xJ
|
||||||
@ -81,7 +87,8 @@ RUN npm install -g browser-ui-test@$(head -n 1 /tmp/browser-ui-test.version) --u
|
|||||||
|
|
||||||
ENV RUST_CONFIGURE_ARGS \
|
ENV RUST_CONFIGURE_ARGS \
|
||||||
--build=x86_64-unknown-linux-gnu \
|
--build=x86_64-unknown-linux-gnu \
|
||||||
--save-toolstates=/tmp/toolstate/toolstates.json
|
--save-toolstates=/tmp/toolstate/toolstates.json \
|
||||||
|
--enable-new-symbol-mangling
|
||||||
|
|
||||||
ENV HOST_TARGET x86_64-unknown-linux-gnu
|
ENV HOST_TARGET x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
|
@ -267,10 +267,24 @@ fi
|
|||||||
SUMMARY_FILE=github-summary.md
|
SUMMARY_FILE=github-summary.md
|
||||||
touch $objdir/${SUMMARY_FILE}
|
touch $objdir/${SUMMARY_FILE}
|
||||||
|
|
||||||
|
extra_env=""
|
||||||
|
if [ "$ENABLE_GCC_CODEGEN" = "1" ]; then
|
||||||
|
extra_env="$EXTRA_ENV --env ENABLE_GCC_CODEGEN=1"
|
||||||
|
# If `ENABLE_GCC_CODEGEN` is set and not empty, we add the `--enable-new-symbol-mangling`
|
||||||
|
# argument to `RUST_CONFIGURE_ARGS` and set the `GCC_EXEC_PREFIX` environment variable.
|
||||||
|
# `cg_gcc` doesn't support the legacy mangling so we need to enforce the new one
|
||||||
|
# if we run `cg_gcc` tests.
|
||||||
|
extra_env="$EXTRA_ENV --env USE_NEW_MANGLING=--enable-new-symbol-mangling"
|
||||||
|
# Fix rustc_codegen_gcc lto issues.
|
||||||
|
extra_env="$EXTRA_ENV --env GCC_EXEC_PREFIX=/usr/lib/gcc/"
|
||||||
|
echo "Setting extra environment values for docker: $extra_env"
|
||||||
|
fi
|
||||||
|
|
||||||
docker \
|
docker \
|
||||||
run \
|
run \
|
||||||
--workdir /checkout/obj \
|
--workdir /checkout/obj \
|
||||||
--env SRC=/checkout \
|
--env SRC=/checkout \
|
||||||
|
$extra_env \
|
||||||
$args \
|
$args \
|
||||||
--env CARGO_HOME=/cargo \
|
--env CARGO_HOME=/cargo \
|
||||||
--env DEPLOY \
|
--env DEPLOY \
|
||||||
|
@ -331,6 +331,8 @@ jobs:
|
|||||||
<<: *job-linux-4c
|
<<: *job-linux-4c
|
||||||
|
|
||||||
- name: x86_64-gnu-llvm-15
|
- name: x86_64-gnu-llvm-15
|
||||||
|
env:
|
||||||
|
ENABLE_GCC_CODEGEN: "1"
|
||||||
<<: *job-linux-16c
|
<<: *job-linux-16c
|
||||||
|
|
||||||
- name: x86_64-gnu-tools
|
- name: x86_64-gnu-tools
|
||||||
|
@ -126,8 +126,15 @@ else
|
|||||||
|
|
||||||
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir"
|
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir"
|
||||||
|
|
||||||
|
# When running gcc backend tests, we need to install `libgccjit` and to not run llvm codegen
|
||||||
|
# tests as it will fail them.
|
||||||
|
if [[ "${ENABLE_GCC_CODEGEN}" == "1" ]]; then
|
||||||
|
# Test the Cranelift and GCC backends in CI. Bootstrap knows which targets to run tests on.
|
||||||
|
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-backends=llvm,cranelift,gcc"
|
||||||
|
else
|
||||||
# Test the Cranelift backend in CI. Bootstrap knows which targets to run tests on.
|
# Test the Cranelift backend in CI. Bootstrap knows which targets to run tests on.
|
||||||
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-backends=llvm,cranelift"
|
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-backends=llvm,cranelift"
|
||||||
|
fi
|
||||||
|
|
||||||
# We enable this for non-dist builders, since those aren't trying to produce
|
# We enable this for non-dist builders, since those aren't trying to produce
|
||||||
# fresh binaries. We currently don't entirely support distributing a fresh
|
# fresh binaries. We currently don't entirely support distributing a fresh
|
||||||
|
Loading…
Reference in New Issue
Block a user