summaryrefslogtreecommitdiff
path: root/.github/actions/common-setup/action.yml
blob: a1323ddbd726450ab0f83ea8f2ab1da9210da1d9 (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
name: Common setup

description: Performs setup common to all our actions

inputs:
  os:
    required: true
  runs-on:
    required: true
  compiler:
    required: true
  platform:
    required: true
  config:
    required: true
runs:
  using: composite
  steps:
    - name: Set up MSVC dev tools on Windows
      uses: ilammy/msvc-dev-cmd@v1
    - name: Set up sccache
      uses: hendrikmuhs/ccache-action@v1.2
      with:
        key: ${{inputs.os}}-${{inputs.compiler}}-${{inputs.platform}}-${{inputs.config}}
        variant: sccache
        append-timestamp: false
    - shell: bash
      run: |
        # Set up system dependencies

        # Install Ninja
        case "${{inputs.os}}" in
          linux*) sudo apt-get install -y ninja-build;;
          windows*) choco install ninja;;
          macos*) brew install ninja;;
        esac

        # Set compiler
        CC=${{inputs.compiler}}
        CXX=${{inputs.compiler}}
        # infer C++ compiler
        CXX=${CXX/gcc/g++}
        CXX=${CXX/clang/clang++}
        # Correct version on older ubuntu
        if [[ "${{inputs.runs-on}}" == ubuntu-20.04 ]]; then
          CC=${CC/gcc/gcc-10}
          CXX=${CXX/g++/g++-10}
        fi
        # Export
        echo "CC=$CC" >> "$GITHUB_ENV"
        echo "CXX=$CXX" >> "$GITHUB_ENV"

        # Set CMake to use sccache
        echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV"
        echo "CMAKE_C_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV"

        # Some useful variables
        config=${{inputs.config}}
        Config=$(echo "${{inputs.config}}" | sed 's/debug/Debug/;s/release/Release/')
        bin_dir=$(pwd)/build/$Config/bin
        lib_dir=$(pwd)/build/$Config/lib
        echo "config=$config" >> "$GITHUB_ENV"
        echo "Config=$Config" >> "$GITHUB_ENV"
        echo "bin_dir=$bin_dir" >> "$GITHUB_ENV"
        echo "lib_dir=$lib_dir" >> "$GITHUB_ENV"

    # Try to restore a LLVM install, and build it otherwise
    - uses: actions/cache/restore@v3
      id: cache-llvm
      with:
        path: ${{ github.workspace }}/build/llvm-project-install
        # Use os*compiler*platform in lieu of an ABI key here, which is what we really want
        key: ${{ inputs.os }}-${{ inputs.compiler }}-${{ inputs.platform }}-${{ hashFiles('external/build-llvm.sh') }}
    - name: Build LLVM
      if: steps.cache-llvm.outputs.cache-hit != 'true'
      shell: bash
      run: ./external/build-llvm.sh --install-prefix "${{ github.workspace }}/build/llvm-project-install"
    - uses: actions/cache/save@v3
      if: steps.cache-llvm.outputs.cache-hit != 'true'
      with:
        path: ${{ github.workspace }}/build/llvm-project-install
        key: ${{ steps.cache-llvm.outputs.cache-primary-key }}
    - name: Set environment variable for CMake
      shell: bash
      run: |
        echo "LLVM_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV"
        echo "Clang_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV"

    # Install swiftshader
    - uses: robinraju/release-downloader@v1.8
      continue-on-error: true
      with:
        latest: true
        repository: "shader-slang/swiftshader"
        out-file-path: "swiftshader"
        extract: true
        fileName: "vk_swiftshader_${{inputs.os}}_${{inputs.platform}}.zip"

    - name: Install SwiftShader
      shell: bash
      run: |
        case "${{inputs.os}}" in
          windows*) echo "${{github.workspace}}/swiftshader/" >> "$GITHUB_PATH";;
          *) echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${{github.workspace}}/swiftshader" >> "$GITHUB_ENV";;
        esac

    # Put spirv-tools in path
    - shell: bash
      run: |
        case "${{inputs.os}}" in
          windows*) echo "${{github.workspace}}/external/slang-binaries/spirv-tools/windows-${{inputs.platform}}/bin" >> "$GITHUB_PATH";;
          linux*) echo "${{github.workspace}}/external/slang-binaries/spirv-tools/$(uname -m)-linux/bin" >> "$GITHUB_PATH";;
        esac