diff --git a/.github/workflows/nightly_rustc.yml b/.github/workflows/nightly_rustc.yml new file mode 100644 index 00000000000..8a7ab9bd8b4 --- /dev/null +++ b/.github/workflows/nightly_rustc.yml @@ -0,0 +1,121 @@ +name: Nightly compilation of rustc with rustc_codegen_gcc + +on: + pull_request: + # TODO: remove pull_request and add schedule to run during the night. + +env: + # Enable backtraces for easier debugging + RUST_BACKTRACE: 1 + +jobs: + build: + runs-on: ubuntu-24.04 + + strategy: + fail-fast: false + matrix: + arch: + - host_target: "x86_64-unknown-linux-gnu" + cross_target: "" + gcc_urls: > + https://github.com/rust-lang/gcc/releases/latest/download/gcc-15.deb + - host_target: "m68k-unknown-linux-gnu" + cross_target: "m68k" + gcc_urls: > + https://github.com/rust-lang/gcc/releases/latest/download/gcc-15.deb + + steps: + - uses: actions/checkout@v4 + with: + path: "rustc_codegen_gcc" + + - uses: actions/checkout@v4 + with: + repository: "rust-lang/rust" + path: "rust" + fetch-depth: 10 + + - run: | + echo $HOME + echo "*****" + ls + echo "*****" + ls .. + echo "*****" + ls rust + echo "*****" + + # `rustup show` installs from rust-toolchain.toml + - name: Setup rust toolchain + run: rustup show + + - name: Setup rust cache + uses: Swatinem/rust-cache@v2 + + - name: Download and install artifacts + run: | + urls=(${{ matrix.arch.gcc_urls }}) + for url in "${urls[@]}"; do + curl -L -o package.deb $url + sudo dpkg --force-overwrite -i package.deb + done + + # TODO: patch linux-raw-sys and rustix. + - name: Move libgccjit.so in libgccjit-libs-dir + if: ${{ matrix.arch.cross_target != '' }} + run: | + curl -LO https://github.com/cross-cg-gcc-tools/cross-gcc/releases/latest/download/gcc-${{ matrix.arch.cross_target }}-15.deb + + sudo dpkg-deb -x gcc-${{ matrix.arch.cross_target }}-15.deb cross-gcc + echo **** + ls cross-gcc + echo **** + ls cross-gcc/usr/lib + echo **** + ls -R + dir=$HOME/libgccjit-libs-dir/x86_64-unknown-linux-gnu/${{ matrix.arch.host_target }} + mkdir -p $dir + # TODO: create a symlink instead of a copy. + cp cross-gcc/usr/lib/libgccjit.so.0.0.1 $dir/libgccjit.so + + echo "$(pwd)/cross-gcc/usr/bin" >> $GITHUB_PATH + + ls /home/runner/libgccjit-libs-dir/x86_64-unknown-linux-gnu/m68k-unknown-linux-gnu/libgccjit.so + echo **** + ls -R /home/runner/libgccjit-libs-dir + + - name: Compile rustc + run: | + echo $PATH + cd rust + ./x build --host=${{ matrix.arch.host_target }} --stage 2 --config ../rustc_codegen_gcc/tests/bootstraps/bootstrap.${{ matrix.arch.host_target }}.toml + + - name: Link toolchain + run: | + cd rust + ls + echo **** + ls build + echo **** + ls build/${{ matrix.arch.host_target }} + rustup toolchain link my-toolchain build/${{ matrix.arch.host_target }}/stage2 + + - name: Smoke test + run: | + rustc +my-toolchain -V > output + grep rustc output + + - name: Compile test program + run: | + cd rustc_codegen_gcc/tests/hello-world + cargo +my-toolchain build + + objcopy --dump-section .comment=comment target/debug/hello_world + grep "rustc version .* with libgccjit" comment + grep 'GCC: ' comment + + cargo +my-toolchain run > hello_world_stdout + + expected_output="40" + test $(cat hello_world_stdout) == $expected_output || (echo "Output differs. Actual output: $(cat hello_world_stdout)"; exit 1) diff --git a/tests/bootstraps/bootstrap.m68k-unknown-linux-gnu.toml b/tests/bootstraps/bootstrap.m68k-unknown-linux-gnu.toml new file mode 100644 index 00000000000..e7a7626ad01 --- /dev/null +++ b/tests/bootstraps/bootstrap.m68k-unknown-linux-gnu.toml @@ -0,0 +1,18 @@ +profile = "compiler" +change-id = 140732 + +[build] +target = ["m68k-unknown-linux-gnu"] + +[rust] +codegen-backends = ["gcc"] +deny-warnings = false +debug-assertions = false +debug-assertions-std = false + +[gcc] +download-ci-gcc = true +libgccjit-libs-dir = "/home/runner/libgccjit-libs-dir" + +[target.m68k-unknown-linux-gnu] +cc = "/home/runner/work/rustc_codegen_gcc/rustc_codegen_gcc/cross-gcc/usr/bin/m68k-unknown-linux-gnu-gcc" diff --git a/tests/bootstraps/bootstrap.x86_64-unknown-linux-gnu.toml b/tests/bootstraps/bootstrap.x86_64-unknown-linux-gnu.toml new file mode 100644 index 00000000000..32daaa57237 --- /dev/null +++ b/tests/bootstraps/bootstrap.x86_64-unknown-linux-gnu.toml @@ -0,0 +1,11 @@ +profile = "compiler" +change-id = 140732 + +[rust] +codegen-backends = ["gcc"] +deny-warnings = false +debug-assertions = false +debug-assertions-std = false + +[gcc] +download-ci-gcc = true