xref: /DragonOS/.github/workflows/cache-toolchain.yml (revision fccbe87dcae0f8e8fde611ef60b1f7923126d526)
1name: Cache toolchain
2
3on: workflow_call
4
5jobs:
6    build:
7
8        runs-on: ubuntu-latest
9
10        steps:
11        - uses: actions/checkout@v3
12
13        - name: Cache DragonOS GCC
14          id: cache-dragonos-gcc
15          uses: actions/cache@v3
16          env:
17              cache-name: cache-dragonos-gcc
18          with:
19            path: |
20              ~/opt
21              ~/.bashrc
22            key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('tools/build_gcc_toolchain.sh') }}
23
24        - if: ${{ steps.cache-dragonos-gcc.outputs.cache-hit != 'true' }}
25          name: build dragonos-gcc
26          continue-on-error: true
27          run: |
28              bash tools/build_gcc_toolchain.sh -f
29
30        - uses: ./.github/actions/install-apt-packages
31
32        - name: Cache build tools
33          id: cache-build-tools
34          uses: actions/cache@v3
35          env:
36              cache-name: cache-build-tools
37              dadk_version: 0.1.6
38          with:
39            path: |
40              ~/.cargo
41              ~/.rustup
42              ~/.bashrc
43              ~/opt
44            key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/cache-toolchain.yml') }}-${{ hashFiles('tools/install_musl_gcc.sh') }}
45
46        - if: ${{ steps.cache-build-tools.outputs.cache-hit != 'true' }}
47          name: Install toolchain
48          continue-on-error: false
49          run:  |
50            USE_GITHUB=1 bash tools/install_musl_gcc.sh
51
52            cargo install cargo-binutils
53            rustup toolchain install nightly-x86_64-unknown-linux-gnu
54            rustup toolchain install nightly-2023-01-21-x86_64-unknown-linux-gnu
55            rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu
56            rustup component add rust-src --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu
57            rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
58            rustup target add x86_64-unknown-none --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu
59            rustup target add x86_64-unknown-none --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
60
61            rustup toolchain install nightly-2023-01-21-riscv64gc-unknown-linux-gnu --force-non-host
62            rustup toolchain install nightly-2023-08-15-riscv64gc-unknown-linux-gnu --force-non-host
63            rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu
64            rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu
65            rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
66            rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
67
68            rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
69            rustup component add rust-src
70            rustup component add llvm-tools-preview
71
72            rustup component add rustfmt
73            rustup component add rustfmt --toolchain nightly-x86_64-unknown-linux-gnu
74            rustup component add rustfmt --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu
75            rustup component add rustfmt --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
76            rustup component add rustfmt --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu
77            rustup component add rustfmt --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
78
79            rustup default nightly
80
81            cargo install dadk --version 0.1.6
82
83
84            fork_toolchain_from="nightly-2023-08-15-x86_64-unknown-linux-gnu"
85            custom_toolchain="nightly-2023-08-15-x86_64-unknown-linux_dragonos-gnu"
86            custom_toolchain_dir="$(dirname $(rustc --print sysroot))/${custom_toolchain}"
87            echo "Custom toolchain does not exist, creating..."
88            rustup toolchain install ${fork_toolchain_from}
89            rustup component add --toolchain ${fork_toolchain_from} rust-src
90            rustup target add --toolchain ${fork_toolchain_from} x86_64-unknown-linux-musl
91            cp -r $(dirname $(rustc --print sysroot))/${fork_toolchain_from} ${custom_toolchain_dir}
92            self_contained_dir=${custom_toolchain_dir}/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained
93            cp -f ${self_contained_dir}/crt1.o ${self_contained_dir}/rcrt1.o
94
95
96