|
| 1 | +workflow: |
| 2 | + rules: |
| 3 | + - if: $CI_PIPELINE_SOURCE == "push" && ( $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "feature/hardware_ci" || $CI_COMMIT_BRANCH =~ /^pr\// ) |
| 4 | + |
| 5 | +variables: |
| 6 | + SLURM_ACCOUNT: hpc-prf-cifi |
| 7 | + GIT_SUBMODULE_STRATEGY: recursive |
| 8 | + |
| 9 | +default: |
| 10 | + id_tokens: |
| 11 | + CI_JOB_JWT: |
| 12 | + aud: https://git.uni-paderborn.de |
| 13 | + before_script: |
| 14 | + - module reset |
| 15 | + - ml fpga lang tools devel Python xilinx/vivado/25.1 UnZip gitlab-cli CMake |
| 16 | + - export LD_LIBRARY_PATH=$XILINX_VIVADO/lib/lnx64.o/:$LD_LIBRARY_PATH # Set the LD_LIBRARY_PATH for simulation |
| 17 | + - python3 -m venv .venv |
| 18 | + - source .venv/bin/activate |
| 19 | + - pip install --upgrade pip |
| 20 | + - pip install -r requirements.txt |
| 21 | + - glab auth login --job-token $CI_JOB_TOKEN --hostname $CI_SERVER_FQDN --api-protocol $CI_SERVER_PROTOCOL |
| 22 | + artifacts: |
| 23 | + access: 'developer' |
| 24 | + |
| 25 | +package_linker: |
| 26 | + tags: |
| 27 | + - otus |
| 28 | + when: manual |
| 29 | + allow_failure: false |
| 30 | + inputs: |
| 31 | + build_base_design: |
| 32 | + default: false |
| 33 | + description: Build the base design from scratch? |
| 34 | + type: boolean |
| 35 | + variables: |
| 36 | + SCHEDULER_PARAMETERS: "-A $SLURM_ACCOUNT -q fpgasynthesis -p normal -c 16 --mem 120G -t 12:00:00" |
| 37 | + BASE_DESIGN_REF: feature/hardware_ci |
| 38 | + needs: |
| 39 | + - project: $CI_PROJECT_PATH |
| 40 | + job: package_linker |
| 41 | + ref: $BASE_DESIGN_REF |
| 42 | + artifacts: true |
| 43 | + script: |
| 44 | + - cd linker |
| 45 | + # Unzipping the SMBus IP |
| 46 | + - glab -R $CI_PROJECT_PATH securefile download --name "smbus_v1_1-20240328.zip" |
| 47 | + - unzip smbus_v1_1-20240328.zip |
| 48 | + - mv smbus_v1_1-20240328 slashkit/resources/base/iprepo/ |
| 49 | + # Building the other IP cores |
| 50 | + - make -C slashkit/resources/base/iprepo -j16 |
| 51 | + # Building the base design |
| 52 | + - if [ ${{ job.inputs.build_base_design }} = "true" -a -e slashkit/resources/static_shell ]; then rm -r slashkit/resources/static_shell; fi |
| 53 | + - if [ ${{ job.inputs.build_base_design }} = "true" ]; then python3 -m slashkit install --jobs 16 --out-dir slashkit/resources/ > install.out.log 2> install.err.log; fi |
| 54 | + # Packaging the linker |
| 55 | + - pip wheel --no-deps . |
| 56 | + artifacts: |
| 57 | + public: false |
| 58 | + when: always |
| 59 | + paths: |
| 60 | + - linker/install.out.log |
| 61 | + - linker/install.err.log |
| 62 | + - linker/slashkit/resources/static_shell |
| 63 | + - linker/slashkit*.whl |
| 64 | + |
| 65 | +test emulation/simulation: |
| 66 | + tags: |
| 67 | + - otus |
| 68 | + needs: |
| 69 | + - job: package_linker |
| 70 | + artifacts: true |
| 71 | + variables: |
| 72 | + SCHEDULER_PARAMETERS: "-A $SLURM_ACCOUNT -p normal -c 8 --mem 80G -t 02:00:00" |
| 73 | + script: |
| 74 | + # Install the linker into the virtualenv |
| 75 | + - pip install linker/slashkit*.whl |
| 76 | + - mkdir -p build/vrt build/cmake |
| 77 | + # Build and install VRT, VRTD, and libslash |
| 78 | + - cd build/vrt |
| 79 | + - cmake -DVRT_INCLUDE_VRTD=1 -DVRTD_INCLUDE_LIBSLASH=1 -DCMAKE_INSTALL_PREFIX=$(realpath ../../.venv/) -DCMAKE_INSTALL_LIBDIR=lib ../../vrt/ |
| 80 | + - make install -j8 |
| 81 | + # Install the cmake tools |
| 82 | + - cd ../cmake |
| 83 | + - cmake -DCMAKE_INSTALL_PREFIX=$(realpath ../../.venv/) -DCMAKE_INSTALL_LIBDIR=lib ../../cmake/ |
| 84 | + - make install -j8 |
| 85 | + - cd ../.. |
| 86 | + # Set all environment variables to point to the venv |
| 87 | + - export C_INCLUDE_PATH=$(realpath ./.venv/include):$C_INCLUDE_PATH |
| 88 | + - export CPLUS_INCLUDE_PATH=$(realpath ./.venv/include):$CPLUS_INCLUDE_PATH |
| 89 | + - export LD_LIBRARY_PATH=$(realpath ./.venv/lib):$LD_LIBRARY_PATH |
| 90 | + - export LIBRARY_PATH=$(realpath ./.venv/lib):$LIBRARY_PATH |
| 91 | + - export CMAKE_MODULE_PATH=$(realpath ./.venv/lib/cmake):$CMAKE_MODULE_PATH |
| 92 | + # Building and testing all working examples in emulatin and simulation |
| 93 | + - ./scripts/test-examples.sh emu |
| 94 | + - ./scripts/test-examples.sh sim |
| 95 | + # Build the 00_axilite example in hardware |
| 96 | + - cd examples/00_axilite/build && make axilite_hw > axilite_hw.out.log 2> axilite_hw.err.log |
| 97 | + artifacts: |
| 98 | + public: false |
| 99 | + when: always |
| 100 | + paths: |
| 101 | + - examples/00_axilite/build/00_axilite |
| 102 | + - examples/00_axilite/build/*.vbin/ |
| 103 | + - examples/00_axilite/build/*.log |
0 commit comments