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

description: Performs setup common to all our actions

inputs:
  os:
    required: true
  compiler:
    required: true
  platform:
    required: true
  config:
    required: true
  build-llvm:
    required: true
runs:
  using: composite
  steps:
    - name: Add bash to PATH
      shell: pwsh
      if: ${{inputs.os == 'windows'}}
      run: |
        Add-Content -Path $env:GITHUB_PATH -Value "C:\\Program Files\\Git\\bin"
        Add-Content -Path $env:GITHUB_PATH -Value "C:\\Program Files\\Git\\usr\\bin"

    - name: Set up MSVC dev tools on Windows
      uses: ilammy/msvc-dev-cmd@v1
      with:
        sdk: "10.0.19041.0"

    - shell: bash
      run: |
        # Set up system dependencies

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

        # Install cross tools on Ubuntu
        if [[ "${{inputs.os}}" == linux* && "${{inputs.platform}}" == "aarch64" && "$(uname -m)" != "aarch64" ]]; then
          sudo apt-get install -y crossbuild-essential-arm64
        fi

        # Set compiler
        CC=${{inputs.compiler}}
        CXX=${{inputs.compiler}}
        # infer C++ compiler
        CXX=${CXX/gcc/g++}
        CXX=${CXX/clang/clang++}
        # Correct gcc version on older ubuntu
        if [[ "${{inputs.os}}" == linux* ]]; then
          gcc_version=$(gcc -dumpversion | cut -d'.' -f1)
          if [ "$gcc_version" -lt 10 ]; then
            CC=${CC/gcc/gcc-10}
            CXX=${CXX/g++/g++-10}
          fi
        fi
        # Export
        echo "CC=$CC" >> "$GITHUB_ENV"
        echo "CXX=$CXX" >> "$GITHUB_ENV"

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

    # Try to restore an LLVM install, and build it otherwise
    - uses: actions/cache/restore@v4
      id: cache-llvm
      if: inputs.build-llvm == 'true'
      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: llvm-${{ inputs.os }}-${{ inputs.compiler }}-${{ inputs.platform }}-${{ hashFiles('external/build-llvm.sh') }}
    - name: Build LLVM
      if: inputs.build-llvm == 'true' && steps.cache-llvm.outputs.cache-hit != 'true'
      shell: bash
      run: |
        ./external/build-llvm.sh \
          --install-prefix "${{github.workspace}}/build/llvm-project-install" \
          --repo "https://${{github.token}}@github.com/llvm/llvm-project"
    - uses: actions/cache/save@v4
      if: inputs.build-llvm == 'true' && 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: |
        if [ "${{inputs.build-llvm}}" == "true" ]; then
          echo "LLVM_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV"
          echo "Clang_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV"
        fi

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