mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
fpga: ci: Add stages-based pipeline
This commit is contained in:
parent
8bef9bfb83
commit
c755800069
64
fpga/.ci/fpga-pipeline-pr.yml
Normal file
64
fpga/.ci/fpga-pipeline-pr.yml
Normal file
@ -0,0 +1,64 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This pipeline is used to build FPGAs and run testbenches for PRs.
|
||||
#
|
||||
# See https://aka.ms/yaml for pipeline YAML documentation.
|
||||
#
|
||||
|
||||
parameters:
|
||||
- name: run_testbenches
|
||||
type: boolean
|
||||
displayName: Run Testbenches
|
||||
default: true
|
||||
- name: clean_ip_build
|
||||
type: boolean
|
||||
displayName: Clean IP Build
|
||||
default: false
|
||||
- name: build_x410
|
||||
type: boolean
|
||||
displayName: Build X410
|
||||
default: true
|
||||
- name: x410_targets_matrix
|
||||
type: object
|
||||
displayName: X410 Targets
|
||||
default:
|
||||
X410_XG_100:
|
||||
target_name: X410_XG_100
|
||||
timeout: 480
|
||||
X410_X4_200:
|
||||
target_name: X410_X4_200
|
||||
timeout: 480
|
||||
X410_CG_400:
|
||||
target_name: X410_CG_400
|
||||
timeout: 480
|
||||
- name: package_images
|
||||
type: boolean
|
||||
displayName: Package Images
|
||||
default: false
|
||||
|
||||
trigger: none
|
||||
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
paths:
|
||||
include:
|
||||
- fpga/usrp3/lib
|
||||
- fpga/usrp3/top/x400
|
||||
- fpga/.ci
|
||||
|
||||
extends:
|
||||
template: templates/stages-fpga-pipeline.yml
|
||||
parameters:
|
||||
run_testbenches: ${{ parameters.run_testbenches }}
|
||||
package_images: ${{ parameters.package_images }}
|
||||
build_x410: ${{ parameters.build_x410 }}
|
||||
x410_targets_matrix: ${{ parameters.x410_targets_matrix }}
|
||||
publish_int_files: true
|
||||
clean_ip_build: ${{ parameters.clean_ip_build }}
|
||||
60
fpga/.ci/fpga-pipeline.yml
Normal file
60
fpga/.ci/fpga-pipeline.yml
Normal file
@ -0,0 +1,60 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This pipeline is used to build FPGAs and run testbenches as CI
|
||||
# from commits in master.
|
||||
#
|
||||
# See https://aka.ms/yaml for pipeline YAML documentation.
|
||||
#
|
||||
|
||||
parameters:
|
||||
- name: run_testbenches
|
||||
type: boolean
|
||||
displayName: Run Testbenches
|
||||
default: false
|
||||
- name: clean_ip_build
|
||||
type: boolean
|
||||
displayName: Clean IP Build
|
||||
default: true
|
||||
- name: build_x410
|
||||
type: boolean
|
||||
displayName: Build X410
|
||||
default: true
|
||||
- name: package_images
|
||||
type: boolean
|
||||
displayName: Package Images
|
||||
default: true
|
||||
|
||||
trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
paths:
|
||||
include:
|
||||
- fpga/usrp3/lib
|
||||
- fpga/usrp3/top/x400
|
||||
- fpga/.ci
|
||||
|
||||
pr: none
|
||||
|
||||
extends:
|
||||
template: templates/stages-fpga-pipeline.yml
|
||||
parameters:
|
||||
run_testbenches: ${{ parameters.run_testbenches }}
|
||||
package_images: ${{ parameters.package_images }}
|
||||
build_x410: ${{ parameters.build_x410 }}
|
||||
# These targets are shipped and included in the binaries package.
|
||||
x410_targets_matrix:
|
||||
X410_X4_200:
|
||||
target_name: X410_X4_200
|
||||
timeout: 480
|
||||
X410_CG_400:
|
||||
target_name: X410_CG_400
|
||||
timeout: 480
|
||||
publish_int_files: false
|
||||
clean_ip_build: ${{ parameters.clean_ip_build }}
|
||||
@ -1,74 +0,0 @@
|
||||
#
|
||||
# Copyright 2021 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This pipeline is used to run all the testbenches using ModelSim.
|
||||
#
|
||||
|
||||
trigger:
|
||||
- none
|
||||
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
paths:
|
||||
include:
|
||||
- fpga/usrp3/lib
|
||||
- fpga/usrp3/tools
|
||||
- fpga/usrp3/top
|
||||
- fpga/usrp3/sim
|
||||
- fpga/.ci
|
||||
|
||||
resources:
|
||||
repositories:
|
||||
- repository: hwtools
|
||||
type: git
|
||||
ref: main
|
||||
name: DevCentral/hwtools
|
||||
|
||||
name:
|
||||
jobs:
|
||||
- job:
|
||||
displayName: "ModelSim Simulation"
|
||||
timeoutInMinutes: 360
|
||||
pool:
|
||||
name: Hardware
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
persistCredentials: true
|
||||
|
||||
- checkout: hwtools
|
||||
clean: true
|
||||
path: s/hwtools/head
|
||||
persistCredentials: true
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
echo "---- Set environment variables ----"
|
||||
export path_hwtools=$(Pipeline.Workspace)/s/hwtools/head/setup
|
||||
export PATH=$path_hwtools:$PATH
|
||||
|
||||
echo "---- Run hwsetup ----"
|
||||
# This script sets the XILINX_VIVADO, MODELSIM, and LIB_BASE_PATH
|
||||
# variables based on the agent's configuration so we can find the EDA
|
||||
# tools.
|
||||
pushd ../.ci/hwtools
|
||||
source hwsetup.sh
|
||||
popd
|
||||
|
||||
echo "---- Run setupenv ----"
|
||||
export MSIM_VIV_COMPLIBDIR=$LIB_BASE_PATH/vivado/2019.1.1/modelsim_SE-64_2020
|
||||
source ./top/x300/setupenv.sh --vivado-path $(dirname $XILINX_VIVADO) --modelsim-path $(dirname $MODELSIM)
|
||||
|
||||
echo "---- Run testbenches ----"
|
||||
pushd ./tools/utils
|
||||
python3 ./run_testbenches.py --logged --simulator modelsim --excludes=modelsim.excludes -j2 run
|
||||
popd
|
||||
workingDirectory: uhddev/fpga/usrp3
|
||||
displayName: "Run Testbenches"
|
||||
38
fpga/.ci/scripts/refresh_ip.sh
Normal file
38
fpga/.ci/scripts/refresh_ip.sh
Normal file
@ -0,0 +1,38 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This script first refreshes a given build IP directory to the current time
|
||||
# (assume all the IP files within that directory were just built) and then
|
||||
# the script touches all the files that changed between the current repo's
|
||||
# working tree and a given hash (used to build IP).
|
||||
# This allows the user to download pre-built IP (e.g. cached) and re-build
|
||||
# only those IP components that changed in between the cached commit and the
|
||||
# current working tree.
|
||||
#
|
||||
# Arguments:
|
||||
#
|
||||
# $1 = absolute path to build-ip/ directory
|
||||
# $2 = git hash used to build IP in $1
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# bash .refresh_ip.sh `realpath path/to/build-ip` 1234abc
|
||||
#
|
||||
|
||||
# # Step 1: refresh build-ip/ directory to current time
|
||||
echo "[refresh_ip.sh] Resetting timestamp for files in $1"
|
||||
find $1 -type f -exec touch --no-create {} +
|
||||
|
||||
# # Step 2: determine all files that changed and update their time (dirty)
|
||||
echo "[refresh_ip.sh] Differences between $2 and working tree (marked dirty):"
|
||||
git diff --line-prefix=`git rev-parse --show-toplevel`/ --name-only $2 | \
|
||||
while read -r line; do \
|
||||
if [[ $line == *"ip/"* ]]; then \
|
||||
echo " $line"; \
|
||||
touch --no-create $line; \
|
||||
fi \
|
||||
done
|
||||
43
fpga/.ci/scripts/run_setup.sh
Normal file
43
fpga/.ci/scripts/run_setup.sh
Normal file
@ -0,0 +1,43 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# Script to run NI hwsetup and UHD setupenv for the target build. Always
|
||||
# source this file.
|
||||
#
|
||||
# Arguments:
|
||||
#
|
||||
# $1 = Directory where setupenv is located
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# source run_setup.sh ./usrp3/top/x400
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
echo "---- Set environment variables ----"
|
||||
export path_hwtools=$BUILD_SOURCESDIRECTORY/hwtools/head/setup
|
||||
export PATH=$path_hwtools:$PATH
|
||||
|
||||
echo "---- Run hwsetup ----"
|
||||
# This script sets the XILINX_VIVADO, MODELSIM, and LIB_BASE_PATH
|
||||
# variables based on the agent's configuration so we can find the EDA
|
||||
# tools.
|
||||
pushd $BUILD_SOURCESDIRECTORY/uhddev/fpga/.ci/hwtools
|
||||
source hwsetup.sh
|
||||
popd
|
||||
|
||||
echo "---- Install Vivado patches ----"
|
||||
pushd $BUILD_SOURCESDIRECTORY
|
||||
wget -q $PATCHES_PATH/2019.1/AR73068_Vivado_2019_1_preliminary_rev1.zip -O ./AR73068_Vivado_2019_1_preliminary_rev1.zip
|
||||
unzip -q -o AR73068_Vivado_2019_1_preliminary_rev1.zip -d ./patch/
|
||||
export XILINX_PATH=$PWD/patch/vivado
|
||||
popd
|
||||
|
||||
echo "---- Run setupenv ----"
|
||||
export MSIM_VIV_COMPLIBDIR=$LIB_BASE_PATH/vivado/2019.1.1/modelsim_SE-64_2020
|
||||
source $1/setupenv.sh --vivado-path $(dirname $XILINX_VIVADO) --modelsim-path $(dirname $MODELSIM)
|
||||
@ -12,7 +12,7 @@ parameters:
|
||||
# Directory to execute the commands in
|
||||
- name: directory
|
||||
type: string
|
||||
default: $(Agent.BuildDirectory)/s
|
||||
default: $(Agent.BuildDirectory)/s/uhddev
|
||||
|
||||
steps:
|
||||
# Windows based calls
|
||||
|
||||
@ -1,82 +0,0 @@
|
||||
#
|
||||
# Copyright 2021 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template should be used for all FPGA builds within the uhddev
|
||||
# repository. Exports the FPGA build results (bitfile, device tree and timing
|
||||
# report from build directory) as artifacts 'FPGA image <target>'.
|
||||
#
|
||||
# See description for the parameters below.
|
||||
#
|
||||
|
||||
parameters:
|
||||
### Required parameters
|
||||
# FPGA target to be built e.g. X410_XG
|
||||
- name: target
|
||||
type: string
|
||||
|
||||
### Optional parameters
|
||||
# Set to true if the intermediate files from build-<target> directory should
|
||||
# be exported for debugging as artifact 'FPGA build <target> (<attempt>)'
|
||||
- name: debug
|
||||
type: boolean
|
||||
default: false
|
||||
# Checkout repository in a clean state as described in
|
||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout
|
||||
- name: clean
|
||||
type: boolean
|
||||
default: true
|
||||
# Default timeout of 4h
|
||||
- name: timeout
|
||||
type: number
|
||||
default: 240
|
||||
|
||||
jobs:
|
||||
- job: FPGA_${{ parameters.target }}
|
||||
displayName: 'Build FPGA ${{ parameters.target }}'
|
||||
pool:
|
||||
name: de-dre-lab
|
||||
demands:
|
||||
- ettus_fpga_build
|
||||
- vivado2019.1
|
||||
timeoutInMinutes: ${{ parameters.timeout }}
|
||||
steps:
|
||||
# Currently limited to be executed in same repo.
|
||||
# Removes all unversioned files if necessary.
|
||||
# Checkout path defined by single repository case in
|
||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checkout-path
|
||||
- checkout: self
|
||||
clean: ${{ parameters.clean }}
|
||||
|
||||
# Remove incomplete IP builds due to aborted previous runs.
|
||||
- bash: |
|
||||
python3 cleanup_incomplete_ip_builds.py -d fpga/usrp3/top/x400
|
||||
workingDirectory: $(Agent.BuildDirectory)/s/fpga/.ci/scripts/
|
||||
displayName: 'Incomplete IP Cleanup'
|
||||
|
||||
# Clean export directories and run FPGA build.
|
||||
- bash: |
|
||||
rm -rf build
|
||||
rm -rf build-${{ parameters.target }}
|
||||
source setupenv.sh
|
||||
make ${{ parameters.target }}
|
||||
workingDirectory: $(Agent.BuildDirectory)/s/fpga/usrp3/top/x400
|
||||
displayName: 'Build Target'
|
||||
|
||||
# Publish the final result only if all previous steps passed
|
||||
- publish: $(Agent.BuildDirectory)/s/fpga/usrp3/top/x400/build
|
||||
artifact: 'FPGA image ${{ parameters.target }}'
|
||||
displayName: 'Publish FPGA'
|
||||
|
||||
# Publish intermediate files.
|
||||
- publish: $(Agent.BuildDirectory)/s/fpga/usrp3/top/x400/build-${{ parameters.target }}
|
||||
artifact: 'FPGA build ${{ parameters.target }} ($(System.JobAttempt))'
|
||||
condition: and(always(), eq('${{ parameters.debug }}', true))
|
||||
displayName: 'Publish Build Directory'
|
||||
|
||||
# Check if FPGA build left any untracked files.
|
||||
- ${{ if eq(parameters.debug, true) }}:
|
||||
- template: check_clean_repo_steps.yml
|
||||
94
fpga/.ci/templates/job-build-fpga.yml
Normal file
94
fpga/.ci/templates/job-build-fpga.yml
Normal file
@ -0,0 +1,94 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template shall be used for FPGA builds within the uhddev
|
||||
# repository. Exports the FPGA build results (bitfile, device tree and build
|
||||
# report from build directory) as artifacts '<target>'.
|
||||
#
|
||||
# See description for the parameters below.
|
||||
#
|
||||
|
||||
parameters:
|
||||
### Required parameters
|
||||
# FPGA targets to be built.
|
||||
# E.g.
|
||||
# targets_matrix:
|
||||
# X410_XG_100:
|
||||
# target: X410_XG_100
|
||||
# timeout: 480
|
||||
# X410_X4_200:
|
||||
# target: X410_X4_200
|
||||
# timeout: 480
|
||||
- name: targets_matrix
|
||||
type: object
|
||||
# IP artifact name (from pipeline) to be used
|
||||
- name: ip_artifact
|
||||
type: string
|
||||
# PATH to device's top directory (where Makefile is located)
|
||||
- name: top_dir
|
||||
type: string
|
||||
|
||||
### Optional parameters
|
||||
# Set to true if the intermediate files from build-<target> directory should
|
||||
# be exported for debugging as artifact 'Build artifacts <target> (Attempt <attempt>)'
|
||||
- name: publish_int_files
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
|
||||
jobs:
|
||||
- job: build_fpga
|
||||
displayName: 'Build FPGA'
|
||||
timeoutInMinutes: $[ variables['timeout'] ]
|
||||
pool:
|
||||
name: hardware
|
||||
variables:
|
||||
- group: sdr-pipeline-vars
|
||||
strategy:
|
||||
matrix:
|
||||
${{ parameters.targets_matrix }}
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
||||
- checkout: hwtools
|
||||
clean: true
|
||||
path: s/hwtools/head
|
||||
persistCredentials: true
|
||||
|
||||
- download: current
|
||||
artifact: ${{ parameters.ip_artifact }}
|
||||
displayName: 'Download ${{ parameters.ip_artifact }}'
|
||||
|
||||
- bash: |
|
||||
mv $(Pipeline.Workspace)/${{ parameters.ip_artifact }} \
|
||||
${{ parameters.top_dir }}/build-ip/
|
||||
displayName: 'Populate build-ip'
|
||||
|
||||
- bash: |
|
||||
source $(Build.SourcesDirectory)/uhddev/fpga/.ci/scripts/run_setup.sh ./
|
||||
make $(target_name)
|
||||
workingDirectory: ${{ parameters.top_dir }}
|
||||
env:
|
||||
PATCHES_PATH: $(sdr-vivado-patches)
|
||||
displayName: 'Build Target'
|
||||
|
||||
# Publish the final result only if all previous steps passed
|
||||
- publish: ${{ parameters.top_dir }}/build
|
||||
artifact: '$(target_name)'
|
||||
displayName: 'Publish FPGA'
|
||||
|
||||
# Publish intermediate files.
|
||||
- publish: ${{ parameters.top_dir }}/build-$(target_name)
|
||||
artifact: 'Build artifacts $(target_name) (Attempt $(System.JobAttempt))'
|
||||
condition: and(always(), eq('${{ parameters.publish_int_files }}', true))
|
||||
displayName: 'Publish Build Directory'
|
||||
|
||||
# Check if FPGA build left any untracked files.
|
||||
- template: check_clean_repo_steps.yml
|
||||
parameters:
|
||||
directory: ${{ parameters.top_dir }}
|
||||
98
fpga/.ci/templates/job-build-ip.yml
Normal file
98
fpga/.ci/templates/job-build-ip.yml
Normal file
@ -0,0 +1,98 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template should be used for IP builds within the uhddev repository.
|
||||
# This job uses Azure's caching mechanism to speed up the build. A
|
||||
# successful job publishes the corresponding build-ip/ directory as a
|
||||
# pipeline artifact.
|
||||
#
|
||||
# See description for the parameters below.
|
||||
#
|
||||
|
||||
parameters:
|
||||
### Required parameters
|
||||
# PATH to device's top directory (where Makefile is located)
|
||||
- name: directory
|
||||
type: string
|
||||
# Name of the IP Make target (e.g. X410_IP for X410's IP)
|
||||
- name: ip_target
|
||||
type: string
|
||||
|
||||
### Optional parameters
|
||||
# Option to ignore cached artifacts (when available) and perform
|
||||
# a clean IP build.
|
||||
- name: clean_build
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
- job: ${{ parameters.ip_target }}
|
||||
displayName: 'Build ${{ parameters.ip_target }}'
|
||||
pool:
|
||||
name: Hardware
|
||||
timeoutInMinutes: 240
|
||||
variables:
|
||||
- group: sdr-pipeline-vars
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
persistCredentials: true
|
||||
|
||||
- checkout: hwtools
|
||||
clean: true
|
||||
path: s/hwtools/head
|
||||
persistCredentials: true
|
||||
|
||||
# Pipeline caching is leveraged in this job to minimize the time it takes
|
||||
# to build all the IP.
|
||||
# At a high level, the pipeline checks for an available and valid cache
|
||||
# artifact from its scope (target branch in PR or its own branch) and
|
||||
# downloads it to the workspace (Cache hit).
|
||||
# If no valid cache artifact exists (Cache miss), then the build will run
|
||||
# and the pipeline will automatically save the result as a cache artifact
|
||||
# for subsequent runs.
|
||||
# Further details on "Pipeline caching" available online:
|
||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops
|
||||
- ${{ if eq(parameters.clean_build, false) }}:
|
||||
- task: Cache@2
|
||||
inputs:
|
||||
key: "uhddev-fpga-${{ parameters.ip_target }}"
|
||||
path: ${{ parameters.directory }}/build-ip
|
||||
cacheHitVar: CACHE_RESTORED
|
||||
displayName: Cache IP
|
||||
|
||||
- bash: |
|
||||
BUILD_IP_CACHE_HASH=`cat build-ip/.ci/build-hash`
|
||||
echo "BUILD_IP_CACHE_HASH=$BUILD_IP_CACHE_HASH"
|
||||
git fetch origin $BUILD_IP_CACHE_HASH
|
||||
bash $(Build.SourcesDirectory)/uhddev/fpga/.ci/scripts/refresh_ip.sh \
|
||||
`realpath build-ip/` $BUILD_IP_CACHE_HASH
|
||||
workingDirectory: ${{ parameters.directory }}
|
||||
condition: eq(variables.CACHE_RESTORED, 'true')
|
||||
displayName: "Refresh IP"
|
||||
|
||||
- bash: |
|
||||
source $(Build.SourcesDirectory)/uhddev/fpga/.ci/scripts/run_setup.sh ./
|
||||
make ${{ parameters.ip_target }}
|
||||
mkdir -p build-ip/.ci/
|
||||
git rev-parse --verify HEAD 2>/dev/null 1>build-ip/.ci/build-hash
|
||||
workingDirectory: ${{ parameters.directory }}
|
||||
env:
|
||||
PATCHES_PATH: $(sdr-vivado-patches)
|
||||
displayName: "Build IP"
|
||||
|
||||
- publish: ${{ parameters.directory }}/build-ip
|
||||
artifact: '${{ parameters.ip_target }} (Attempt $(System.JobAttempt))'
|
||||
condition: failed()
|
||||
|
||||
- publish: ${{ parameters.directory }}/build-ip
|
||||
artifact: ${{ parameters.ip_target }}
|
||||
condition: succeeded()
|
||||
|
||||
- template: check_clean_repo_steps.yml
|
||||
parameters:
|
||||
directory: ${{ parameters.directory }}
|
||||
71
fpga/.ci/templates/job-package-images.yml
Normal file
71
fpga/.ci/templates/job-package-images.yml
Normal file
@ -0,0 +1,71 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template shall be used to package images.
|
||||
#
|
||||
# See description for the parameters below.
|
||||
#
|
||||
|
||||
parameters:
|
||||
### Required parameters
|
||||
# Package name for identification purposes
|
||||
- name: package_name
|
||||
type: string
|
||||
# FPGA artifacts to be downloaded to "build_directory"
|
||||
# Note that the value for each key is not used in this job.
|
||||
# E.g.
|
||||
# targets_matrix:
|
||||
# X410_XG_100:
|
||||
# target: X410_XG_100
|
||||
# timeout: 480
|
||||
# X410_X4_200:
|
||||
# target: X410_X4_200
|
||||
# timeout: 480
|
||||
- name: artifacts_matrix
|
||||
type: object
|
||||
# PATH to device's build directory (where artifacts will be copied and
|
||||
# packaging utility will be run)
|
||||
- name: build_directory
|
||||
type: string
|
||||
|
||||
|
||||
jobs:
|
||||
- job: ${{ parameters.package_name }}
|
||||
displayName: 'Create ${{ parameters.package_name }}'
|
||||
timeoutInMinutes: 10
|
||||
pool:
|
||||
name: hardware
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
||||
- ${{ each artifact in parameters.artifacts_matrix }}:
|
||||
- download: current
|
||||
artifact: ${{ artifact.key }}
|
||||
displayName: 'Download ${{ artifact.key }}'
|
||||
|
||||
- ${{ each artifact in parameters.artifacts_matrix }}:
|
||||
- bash: |
|
||||
mkdir -p ${{ parameters.build_directory }}
|
||||
cp $(Pipeline.Workspace)/${{ artifact.key }}/* \
|
||||
${{ parameters.build_directory }}/
|
||||
rm -rf $(Pipeline.Workspace)/${{ artifact.key }}/
|
||||
displayName: 'Populate ${{ artifact.key }} artifacts'
|
||||
|
||||
- bash: |
|
||||
OSS_REPO_HASH="$(git rev-parse --verify HEAD --short=7 2>/dev/null)"
|
||||
echo "##vso[task.setvariable variable=OSS_REPO_HASH]$OSS_REPO_HASH"
|
||||
echo "OSS Repo hash: $OSS_REPO_HASH"
|
||||
python3 $(Build.SourcesDirectory)/fpga/usrp3/tools/utils/package_images.py --githash "uhd-$OSS_REPO_HASH"
|
||||
rm -f *.bit *.dts *.rpt *.md5
|
||||
workingDirectory: ${{ parameters.build_directory }}
|
||||
displayName: 'Run package_images.py'
|
||||
|
||||
# Publish the final result only if all previous steps passed
|
||||
- publish: ${{ parameters.build_directory }}
|
||||
artifact: '${{ parameters.package_name }}-g$(OSS_REPO_HASH)'
|
||||
displayName: 'Publish package'
|
||||
40
fpga/.ci/templates/job-run-testbenches.yml
Normal file
40
fpga/.ci/templates/job-run-testbenches.yml
Normal file
@ -0,0 +1,40 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template is used to run all the testbenches using ModelSim.
|
||||
#
|
||||
|
||||
|
||||
jobs:
|
||||
- job:
|
||||
displayName: "ModelSim Simulation"
|
||||
timeoutInMinutes: 360
|
||||
pool:
|
||||
name: Hardware
|
||||
variables:
|
||||
- group: sdr-pipeline-vars
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
persistCredentials: true
|
||||
|
||||
- checkout: hwtools
|
||||
clean: true
|
||||
path: s/hwtools/head
|
||||
persistCredentials: true
|
||||
|
||||
- bash: |
|
||||
source $(Build.SourcesDirectory)/uhddev/fpga/.ci/scripts/run_setup.sh ./top/x300
|
||||
|
||||
echo "---- Run testbenches ----"
|
||||
pushd ./tools/utils
|
||||
python3 ./run_testbenches.py --logged --simulator modelsim --excludes=modelsim.excludes -j2 run
|
||||
popd
|
||||
workingDirectory: uhddev/fpga/usrp3
|
||||
env:
|
||||
PATCHES_PATH: $(sdr-vivado-patches)
|
||||
displayName: "Run Testbenches"
|
||||
104
fpga/.ci/templates/stages-fpga-pipeline.yml
Normal file
104
fpga/.ci/templates/stages-fpga-pipeline.yml
Normal file
@ -0,0 +1,104 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This template defines a stages-based pipeline that may be leveraged by both
|
||||
# a PR pipeline or a continuous delivery pipeline.
|
||||
#
|
||||
# See https://aka.ms/yaml for pipeline YAML documentation.
|
||||
#
|
||||
|
||||
parameters:
|
||||
## Optional parameters
|
||||
# Run testbenches
|
||||
- name: run_testbenches
|
||||
type: boolean
|
||||
default: true
|
||||
# Option to ignore cached artifacts (if available) and perform
|
||||
# a clean IP build.
|
||||
- name: clean_ip_build
|
||||
type: boolean
|
||||
default: false
|
||||
# Build X410 FPGA targets
|
||||
- name: build_x410
|
||||
type: boolean
|
||||
default: true
|
||||
# X410 FPGA targets to build (if build_x410 is true)
|
||||
- name: x410_targets_matrix
|
||||
type: object
|
||||
default:
|
||||
X410_X4_200:
|
||||
target_name: X410_X4_200
|
||||
timeout: 480
|
||||
# Option to publish intermediate files
|
||||
- name: publish_int_files
|
||||
type: boolean
|
||||
default: false
|
||||
# Create images package
|
||||
- name: package_images
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
|
||||
resources:
|
||||
repositories:
|
||||
- repository: hwtools
|
||||
type: git
|
||||
ref: main
|
||||
name: DevCentral/hwtools
|
||||
|
||||
|
||||
stages:
|
||||
|
||||
### START: Testbenches stage
|
||||
|
||||
- stage: run_testbenches_stage
|
||||
displayName: Run Testbenches
|
||||
dependsOn: []
|
||||
condition: and(succeeded(), eq('${{ parameters.run_testbenches }}', 'true'))
|
||||
jobs:
|
||||
- template: job-run-testbenches.yml
|
||||
|
||||
### END: Testbenches stage
|
||||
|
||||
|
||||
### START: X410 stages
|
||||
|
||||
- stage: build_x410_ip_stage
|
||||
displayName: Build X410 IP
|
||||
dependsOn: []
|
||||
condition: and(succeeded(), eq('${{ parameters.build_x410 }}', 'true'))
|
||||
jobs:
|
||||
- template: job-build-ip.yml
|
||||
parameters:
|
||||
directory: uhddev/fpga/usrp3/top/x400
|
||||
ip_target: X410_IP
|
||||
clean_build: ${{ parameters.clean_ip_build }}
|
||||
|
||||
- stage: build_x410_targets_stage
|
||||
displayName: Build X410 FPGA Targets
|
||||
dependsOn: build_x410_ip_stage
|
||||
condition: and(succeeded('build_x410_ip_stage'), eq('${{ parameters.build_x410 }}', 'true'))
|
||||
jobs:
|
||||
- template: job-build-fpga.yml
|
||||
parameters:
|
||||
targets_matrix: ${{ parameters.x410_targets_matrix }}
|
||||
ip_artifact: X410_IP
|
||||
top_dir: uhddev/fpga/usrp3/top/x400
|
||||
publish_int_files: ${{ parameters.publish_int_files }}
|
||||
|
||||
- stage: create_x410_packages_stage
|
||||
displayName: Create X410 Packages
|
||||
dependsOn: build_x410_targets_stage
|
||||
condition: and(succeeded('build_x410_targets_stage'), eq('${{ parameters.package_images }}', 'true'))
|
||||
jobs:
|
||||
- template: job-package-images.yml
|
||||
parameters:
|
||||
package_name: x4xx_x410_fpga_default
|
||||
artifacts_matrix: ${{ parameters.x410_targets_matrix }}
|
||||
build_directory: uhddev/fpga/usrp3/top/x400/build/
|
||||
|
||||
### END: X410 stages
|
||||
@ -1,114 +0,0 @@
|
||||
#
|
||||
# Copyright 2021 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# This pipeline is used to test building the FPGA and CPLD for each pull
|
||||
# request.
|
||||
#
|
||||
# See https://aka.ms/yaml for pipeline YAML documentation.
|
||||
#
|
||||
|
||||
trigger:
|
||||
- none
|
||||
|
||||
# Filter for target branches and paths on PRs. See:
|
||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml#pr-triggers
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
paths:
|
||||
include:
|
||||
- fpga/usrp3/lib
|
||||
- fpga/usrp3/tools
|
||||
- fpga/usrp3/top/x400
|
||||
- fpga/.ci
|
||||
|
||||
jobs:
|
||||
# -------------------------------------------------------------------
|
||||
# Build XG FPGA (100 MHz)
|
||||
# -------------------------------------------------------------------
|
||||
- template: templates/fpga_build.yml
|
||||
parameters:
|
||||
target: X410_XG_100
|
||||
debug: true # to be able to debug any failed attempts
|
||||
clean: false # for speedup of PR testing
|
||||
timeout: 480
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Build X4 FPGA (200 MHz)
|
||||
# -------------------------------------------------------------------
|
||||
- template: templates/fpga_build.yml
|
||||
parameters:
|
||||
target: X410_X4_200
|
||||
debug: true # to be able to debug any failed attempts
|
||||
clean: false # for speedup of PR testing
|
||||
timeout: 480
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Build C1 FPGA (400 MHz)
|
||||
# -------------------------------------------------------------------
|
||||
- template: templates/fpga_build.yml
|
||||
parameters:
|
||||
target: X410_C1_400
|
||||
debug: true # to be able to debug any failed attempts
|
||||
clean: false # for speedup of PR testing
|
||||
timeout: 480
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Make CPLD
|
||||
# -------------------------------------------------------------------
|
||||
#- template: templates/mb_cpld_build.yml
|
||||
# parameters:
|
||||
# debug: true # to be able to debug any failed attempts
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Make ZBX CPLD
|
||||
# -------------------------------------------------------------------
|
||||
#- template: templates/zbx_cpld_build.yml
|
||||
# parameters:
|
||||
# debug: true # to be able to debug any failed attempts
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Build IP
|
||||
# -------------------------------------------------------------------
|
||||
- job: IP
|
||||
displayName: 'Build IP'
|
||||
pool:
|
||||
name: de-dre-lab
|
||||
demands:
|
||||
- ettus_fpga_build
|
||||
- vivado2019.1
|
||||
timeoutInMinutes: 120
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: false
|
||||
|
||||
- bash: |
|
||||
python3 cleanup_incomplete_ip_builds.py -d $BUILD_SOURCESDIRECTORY/fpga/usrp3/top/x400
|
||||
workingDirectory: fpga/.ci/scripts/
|
||||
displayName: 'Incomplete IP Cleanup'
|
||||
|
||||
# Delete everything except for the build-ip directory, which is expected to
|
||||
# remain for speed-up.
|
||||
- bash: |
|
||||
git clean -xdff -e build-ip
|
||||
displayName: 'git clean'
|
||||
|
||||
- bash: |
|
||||
source setupenv.sh
|
||||
make X410_IP
|
||||
workingDirectory: fpga/usrp3/top/x400
|
||||
|
||||
- publish: fpga/usrp3/top/x400/build-ip
|
||||
artifact: 'IP ($(System.JobAttempt))'
|
||||
condition: failed()
|
||||
|
||||
- publish: fpga/usrp3/top/x400/build-ip
|
||||
artifact: 'IP'
|
||||
condition: succeeded()
|
||||
|
||||
- template: templates/check_clean_repo_steps.yml
|
||||
Loading…
Reference in New Issue
Block a user