summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_codegen_gcc/.github/workflows/ci.yml
blob: d2b7724a2215fc82381804e3031e7df191707ebb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: CI

on:
  - push
  - pull_request

permissions:
  contents: read

env:
  # Enable backtraces for easier debugging
  RUST_BACKTRACE: 1

jobs:
  build:
    runs-on: ubuntu-22.04

    strategy:
      fail-fast: false
      matrix:
        libgccjit_version:
          - { gcc: "libgccjit.so", extra: "", env_extra: "", artifacts_branch: "master" }
          - { gcc: "libgccjit_without_int128.so", extra: "", env_extra: "", artifacts_branch: "master-without-128bit-integers" }
          - { gcc: "libgccjit12.so", extra: "--no-default-features", env_extra: "TEST_FLAGS='-Cpanic=abort -Zpanic-abort-tests'", artifacts_branch: "gcc12" }
        commands: [
          "--mini-tests",
          "--std-tests",
          # FIXME: re-enable asm tests when GCC can emit in the right syntax.
          # "--asm-tests",
          "--test-libcore",
          "--extended-rand-tests",
          "--extended-regex-example-tests",
          "--extended-regex-tests",
          "--test-successful-rustc --nb-parts 2 --current-part 0",
          "--test-successful-rustc --nb-parts 2 --current-part 1",
          "--test-failing-rustc",
        ]

    steps:
    - uses: actions/checkout@v3

    - uses: actions/checkout@v3
      with:
        repository: llvm/llvm-project
        path: llvm

    - name: Install packages
      # `llvm-14-tools` is needed to install the `FileCheck` binary which is used for asm tests.
      run: sudo apt-get install ninja-build ripgrep llvm-14-tools

    - name: Install libgccjit12
      if: matrix.libgccjit_version.gcc == 'libgccjit12.so'
      run: sudo apt-get install libgccjit-12-dev

    - name: Download artifact
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      uses: dawidd6/action-download-artifact@v2
      with:
          workflow: main.yml
          name: ${{ matrix.libgccjit_version.gcc }}
          path: gcc-build
          repo: antoyo/gcc
          branch: ${{ matrix.libgccjit_version.artifacts_branch }}
          event: push
          search_artifacts: true # Because, instead, the action only check the last job ran and that won't work since we want multiple artifacts.

    - name: Setup path to libgccjit
      if: matrix.libgccjit_version.gcc == 'libgccjit12.so'
      run: echo /usr/lib/gcc/x86_64-linux-gnu/12 > gcc_path

    - name: Setup path to libgccjit
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      run: |
          echo $(readlink -f gcc-build) > gcc_path
          # NOTE: the filename is still libgccjit.so even when the artifact name is different.
          ln gcc-build/libgccjit.so gcc-build/libgccjit.so.0

    - name: Set env
      run: |
        echo "LIBRARY_PATH=$(cat gcc_path)" >> $GITHUB_ENV
        echo "LD_LIBRARY_PATH=$(cat gcc_path)" >> $GITHUB_ENV
        echo "workspace="$GITHUB_WORKSPACE >> $GITHUB_ENV

    - name: Set RUST_COMPILER_RT_ROOT
      run: echo "RUST_COMPILER_RT_ROOT="${{ env.workspace }}/llvm/compiler-rt >> $GITHUB_ENV

    - name: Cache cargo installed crates
      uses: actions/cache@v3
      with:
        path: ~/.cargo/bin
        key: cargo-installed-crates2-ubuntu-latest

    - name: Cache cargo registry
      uses: actions/cache@v3
      with:
        path: ~/.cargo/registry
        key: ${{ runner.os }}-cargo-registry2-${{ hashFiles('**/Cargo.lock') }}

    - name: Cache cargo index
      uses: actions/cache@v3
      with:
        path: ~/.cargo/git
        key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

    - name: Cache cargo target dir
      uses: actions/cache@v3
      with:
        path: target
        key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('rust-toolchain') }}

    #- name: Cache rust repository
      ## We only clone the rust repository for rustc tests
      #if: ${{ contains(matrix.commands, 'rustc') }}
      #uses: actions/cache@v3
      #id: cache-rust-repository
      #with:
        #path: rust
        #key: ${{ runner.os }}-packages-${{ hashFiles('rust/.git/HEAD') }}

    - name: Build
      run: |
        ./prepare_build.sh
        ${{ matrix.libgccjit_version.env_extra }} ./build.sh ${{ matrix.libgccjit_version.extra }}
        ${{ matrix.libgccjit_version.env_extra }} cargo test ${{ matrix.libgccjit_version.extra }}
        ./clean_all.sh

    - name: Prepare dependencies
      run: |
        git config --global user.email "user@example.com"
        git config --global user.name "User"
        ./prepare.sh

    # Compile is a separate step, as the actions-rs/cargo action supports error annotations
    - name: Compile
      uses: actions-rs/cargo@v1.0.3
      with:
        command: build
        args: --release

    - name: Add more failing tests for GCC 12
      if: ${{ matrix.libgccjit_version.gcc == 'libgccjit12.so' }}
      run: cat failing-ui-tests12.txt >> failing-ui-tests.txt

    - name: Run tests
      run: |
        ${{ matrix.libgccjit_version.env_extra }} ./test.sh --release --clean --build-sysroot ${{ matrix.commands }} ${{ matrix.libgccjit_version.extra }}

  duplicates:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: python tools/check_intrinsics_duplicates.py