name: Cache toolchain

on: workflow_call

jobs:
    build:

        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v3
        
        - name: Cache DragonOS GCC
          id: cache-dragonos-gcc
          uses: actions/cache@v3
          env:
              cache-name: cache-dragonos-gcc
          with:
            path: |
              ~/opt
              ~/.bashrc
            key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('tools/build_gcc_toolchain.sh') }}
        
        - if: ${{ steps.cache-dragonos-gcc.outputs.cache-hit != 'true' }}
          name: build dragonos-gcc
          continue-on-error: true
          run: |
              bash tools/build_gcc_toolchain.sh -f
        
        - uses: ./.github/actions/install-apt-packages

        - name: Cache build tools
          id: cache-build-tools
          uses: actions/cache@v3
          env:
              cache-name: cache-build-tools
              dadk_version: 0.1.11
          with:
            path: |
              ~/.cargo
              ~/.rustup
              ~/.bashrc
              ~/opt
            key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/cache-toolchain.yml') }}-${{ hashFiles('tools/install_musl_gcc.sh') }}
        
        - if: ${{ steps.cache-build-tools.outputs.cache-hit != 'true' }}
          name: Install toolchain
          continue-on-error: false
          run:  | 
            USE_GITHUB=1 bash tools/install_musl_gcc.sh

            cargo install cargo-binutils
            rustup toolchain install nightly-x86_64-unknown-linux-gnu
            rustup toolchain install nightly-2024-07-23-x86_64-unknown-linux-gnu
            rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu
            rustup component add rust-src --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu
            rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
            rustup target add x86_64-unknown-none --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu
            rustup target add x86_64-unknown-none --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu

            rustup toolchain install nightly-2024-07-23-riscv64gc-unknown-linux-gnu --force-non-host
            rustup toolchain install nightly-2023-08-15-riscv64gc-unknown-linux-gnu --force-non-host
            rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu
            rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu
            rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
            rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
                
            rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
            rustup component add rust-src
            rustup component add llvm-tools-preview

            rustup component add rustfmt
            rustup component add rustfmt --toolchain nightly-x86_64-unknown-linux-gnu
            rustup component add rustfmt --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu
            rustup component add rustfmt --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
            rustup component add rustfmt --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu
            rustup component add rustfmt --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu

            rustup default nightly-2024-07-23

            cargo install dadk --version 0.1.11
          

            userapp_musl_toolchain="nightly-2023-08-15-x86_64-unknown-linux-gnu"
            
            rustup toolchain install ${userapp_musl_toolchain}
            rustup component add --toolchain ${userapp_musl_toolchain} rust-src
            rustup target add --toolchain ${userapp_musl_toolchain} x86_64-unknown-linux-musl

            rustup target add x86_64-unknown-linux-musl --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu
            rustup component add rust-src --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu
           


