diff --git a/.github/workflows/buildAndTestAieToolsHsa.yaml b/.github/workflows/buildAndTestAieToolsHsa.yaml new file mode 100644 index 0000000000..d360bb7d05 --- /dev/null +++ b/.github/workflows/buildAndTestAieToolsHsa.yaml @@ -0,0 +1,154 @@ +name: Build and Test with AIE tools with HSA backend + +on: + push: + branches: + - main +# pull_request: + workflow_dispatch: + inputs: + AIE_COMMIT: + description: 'which aie commit to build' + type: string + required: false + default: '' + LIT_FILTER: + description: 'LIT_FILTER for tests (regex of paths in test/)' + type: string + required: false + default: '' + +defaults: + run: + shell: bash + +concurrency: + # A PR number if a pull request and otherwise the commit hash. This cancels + # queued and in-progress runs for the same PR (presubmit) or commit + # (postsubmit). + group: ci-build-test-aie-tools-linux-${{ github.event.number || github.sha }} + cancel-in-progress: true + +env: + DEBIAN_FRONTEND: noninteractive + +jobs: + build-repo: + name: Build and Test HSA + + runs-on: ubuntu-latest + + steps: + + - name: Free disk space + uses: descriptinc/free-disk-space@main + with: + tool-cache: true + android: true + dotnet: true + haskell: true + large-packages: true + swap-storage: false + + - name: Docker prune + shell: bash + run: | + docker system prune -a -f + + - name: Install necessary build tools for the ROCm runtime + run: | + sudo apt install libelf-dev elfutils libdwarf-dev + sudo mkdir --parents --mode=0755 /etc/apt/keyrings + wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | \ + gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null + for ver in 5.3.3 5.4.3 5.5.1 5.6; do + echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/$ver focal main" \ + | sudo tee --append /etc/apt/sources.list.d/rocm.list + done + echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' \ + | sudo tee /etc/apt/preferences.d/rocm-pin-600 + sudo apt update + sudo apt install rocm-hip-runtime-dev5.6.0 && sudo apt-get clean + + - name: Get ROCm-air-platforms + id: clone-rocm-air-platforms + run: utils/clone-rocm-air-platforms.sh + shell: bash + + - name: Build and Install libxaie + run: utils/github-clone-build-libxaie.sh + + - uses: uraimo/run-on-arch-action@v2.5.0 + name: Run commands + id: runcmd + with: + distro: none + base_image: ghcr.io/xilinx/mlir-aie/xilinx:latest + githubToken: ${{ github.token }} + dockerRunArgs: | + --mac-address ${{ secrets.XILINX_MAC }} + run: | + ls -l /opt/Xilinx/Vitis/2023.2/ + + # this is the inverse of `base64 -w 1000000 Xilinx.lic` + # the -w ("wrap after 1000000 cols") is so that there are no spaces in the XILINX_LIC env var + echo -n "${{ secrets.XILINX_LIC }}" | base64 --decode > ~/.Xilinx/Xilinx.lic + + cd / + git clone https://github.com/Xilinx/mlir-aie.git + cd /mlir-aie + + git checkout ${{ github.head_ref }} + if [ x"${{ inputs.AIE_COMMIT }}" != x"" ]; then + git reset --hard ${{ inputs.AIE_COMMIT }} + fi + + git submodule update --init --recursive + + apt install python3.10-venv + python -m venv aie-venv + source aie-venv/bin/activate + pip install -r python/requirements.txt + + VERSION=$(utils/clone-llvm.sh --get-wheel-version) + pip -q download mlir==$VERSION \ + -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/mlir-distro + unzip -q mlir-*.whl + find mlir -exec touch -a -m -t 201108231405.14 {} \; + + # don't delete the space in the sed + pushd cmake/modulesXilinx && sed -i.bak 's/ VITIS_VPP//g' FindVitis.cmake && popd + + mkdir build && cd build + export PATH=/opt/Xilinx/Vitis/2023.2/bin:/opt/Xilinx/Vitis/2023.2/aietools/bin:$PATH + cmake .. -G Ninja \ + -DLibXAIE_ROOT=`pwd`/../aienginev2/install \ + -Dhsakmt_DIR=`pwd`/../rocm/lib/cmake/hsakmt/ \ + -DAIE_RUNTIME_TARGETS=x86_64-hsa \ + -DAIE_RUNTIME_TEST_TARGET=x86_64-hsa \ + -Dhsa-runtime64_DIR=`pwd`/../rocm/lib/cmake/hsa-runtime64/ \ + -DMLIR_DIR=$PWD/../mlir/lib/cmake/mlir \ + -DVITIS_ROOT=/opt/Xilinx/Vitis/2023.2/ \ + -DVitis_VERSION_MAJOR=2023 \ + -DVitis_VERSION_MINOR=2 \ + -DCMAKE_MODULE_PATH=$PWD/../cmake/modulesXilinx \ + -DLLVM_EXTERNAL_LIT=$(which lit) \ + -DAIE_INCLUDE_INTEGRATION_TESTS=OFF \ + -DAIE_ENABLE_PYTHON_PASSES=OFF \ + -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_INSTALL_PREFIX=install + + ninja + + if [ x"${{ inputs.LIT_FILTER }}" == x"" ]; then + export LIT_FILTER="${{ inputs.LIT_FILTER }}" + fi + + # filter out CODirect until I put bootgen into the image + export LIT_OPTS="-sv --timeout 600 -j1 --filter-out Targets/AIEGenerateCDODirect" + ninja check-aie + ninja check-reference-designs diff --git a/utils/github-clone-build-libxaie.sh b/utils/github-clone-build-libxaie.sh new file mode 100755 index 0000000000..2cbe7b7013 --- /dev/null +++ b/utils/github-clone-build-libxaie.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +##===- utils/github-clone-build-libxaie.sh ------------------*- Script -*-===## +# +# Copyright (C) 2022, Advanced Micro Devices, Inc. +# SPDX-License-Identifier: MIT + +##===----------------------------------------------------------------------===## +# +# This script checks out and builds libxaiev2. +# +# This script is intended to be called from the github workflows. +# +##===----------------------------------------------------------------------===## + +LIBXAIE_DIR="aienginev2" +INSTALL_DIR="install" + +HASH="xlnx_rel_v2021.2" + +git clone --branch $HASH --depth 1 https://github.com/Xilinx/embeddedsw.git $LIBXAIE_DIR + +mkdir -p $LIBXAIE_DIR/$INSTALL_DIR/lib + +pushd $LIBXAIE_DIR/XilinxProcessorIPLib/drivers/aienginev2/src/ +make -f Makefile.Linux CFLAGS="-D__AIELINUX__" +popd + +cp -v $LIBXAIE_DIR/XilinxProcessorIPLib/drivers/aienginev2/src/*.so* $LIBXAIE_DIR/$INSTALL_DIR/lib +cp -vr $LIBXAIE_DIR/XilinxProcessorIPLib/drivers/aienginev2/include $LIBXAIE_DIR/$INSTALL_DIR