name: LLVM Project Tests permissions: contents: read on: workflow_dispatch: inputs: build_target: required: false projects: required: false extra_cmake_args: required: false os_list: required: false default: '["ubuntu-latest", "windows-2019", "macOS-13"]' python_version: required: false type: string default: '3.11' workflow_call: inputs: build_target: required: false type: string default: "all" projects: required: true type: string extra_cmake_args: required: false type: string os_list: required: false type: string # Use windows-2019 due to: # https://developercommunity.visualstudio.com/t/Prev-Issue---with-__assume-isnan-/1597317 default: '["ubuntu-latest", "windows-2019", "macOS-13"]' python_version: required: false type: string default: '3.11' concurrency: # Skip intermediate builds: always. # Cancel intermediate builds: only if it is a pull request build. # If the group name here is the same as the group name in the workflow that includes # this one, then the action will try to wait on itself and get stuck. group: llvm-project-${{ github.workflow }}-${{ inputs.projects }}${{ github.ref }} cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} jobs: lit-tests: name: Lit Tests runs-on: ${{ matrix.os }} container: image: ${{(startsWith(matrix.os, 'ubuntu') && 'ghcr.io/llvm/ci-ubuntu-22.04:latest') || null}} volumes: - /mnt/:/mnt/ strategy: fail-fast: false matrix: os: ${{ fromJSON(inputs.os_list) }} steps: - name: Setup Windows if: startsWith(matrix.os, 'windows') uses: llvm/actions/setup-windows@main with: arch: amd64 # On Windows, starting with win19/20220814.1, cmake choose the 32-bit # python3.10.6 libraries instead of the 64-bit libraries when building # lldb. Using this setup-python action to make 3.10 the default # python fixes this. - name: Setup Python uses: actions/setup-python@v4 with: python-version: ${{ inputs.python_version }} - name: Install Ninja if: runner.os != 'Linux' uses: llvm/actions/install-ninja@main # actions/checkout deletes any existing files in the new git directory, # so this needs to either run before ccache-action or it has to use # clean: false. - uses: actions/checkout@v4 with: fetch-depth: 250 - name: Setup ccache uses: hendrikmuhs/ccache-action@v1 with: # A full build of llvm, clang, lld, and lldb takes about 250MB # of ccache space. There's not much reason to have more than this, # because we usually won't need to save cache entries from older # builds. Also, there is an overall 10GB cache limit, and each # run creates a new cache entry so we want to ensure that we have # enough cache space for all the tests to run at once and still # fit under the 10 GB limit. # Default to 2G to workaround: https://github.com/hendrikmuhs/ccache-action/issues/174 max-size: 2G key: ${{ matrix.os }} variant: sccache - name: Build and Test env: # Workaround for https://github.com/actions/virtual-environments/issues/5900. # This should be a no-op for non-mac OSes PKG_CONFIG_PATH: /usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig//12 shell: bash id: build-llvm run: | if [ "${{ runner.os }}" == "Linux" ]; then builddir="/mnt/build/" mkdir -p $builddir extra_cmake_args="-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang" else builddir="$(pwd)"/build fi if [ "${{ runner.os }}" == "macOS" ]; then # Workaround test failure on some lld tests on MacOS # https://github.com/llvm/llvm-project/issues/81967 extra_cmake_args="-DLLVM_DISABLE_ASSEMBLY_FILES=ON" fi echo "llvm-builddir=$builddir" >> "$GITHUB_OUTPUT" cmake -G Ninja \ -B "$builddir" \ -S llvm \ -DLLVM_ENABLE_PROJECTS="${{ inputs.projects }}" \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DLLDB_INCLUDE_TESTS=OFF \ -DCMAKE_C_COMPILER_LAUNCHER=sccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=sccache \ $extra_cmake_args \ ${{ inputs.extra_cmake_args }} ninja -C "$builddir" '${{ inputs.build_target }}' - name: Build and Test libclc if: "!startsWith(matrix.os, 'windows') && contains(inputs.projects, 'libclc')" env: LLVM_BUILDDIR: ${{ steps.build-llvm.outputs.llvm-builddir }} run: | # Make sure all of LLVM libraries that llvm-config needs are built. ninja -C "$LLVM_BUILDDIR" cmake -G Ninja -S libclc -B libclc-build -DLLVM_DIR="$LLVM_BUILDDIR"/lib/cmake/llvm -DLIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn--amdhsa;r600--;nvptx--;nvptx64--;nvptx--nvidiacl;nvptx64--nvidiacl" ninja -C libclc-build ninja -C libclc-build test