uhd/.ci/templates/job-uhd-build-installer.yml
Virendra Kakade eb785ff23b ci: Build UHD DEBs with B310 support
Add nib310rio-dev to the Debian build dependencies so the UHD package
build fails if the B310 userspace header is unavailable instead of
silently disabling B300 support.

The Ubuntu installer pipeline downloads the nib310rio Debian package
artifact and exposes it to pbuilder as a local apt repository. This lets
pbuilder satisfy the new dependency inside the clean build root where
CMake checks for nib310rio/nib310rio.h.
2026-09-15 23:44:29 +01:00

206 lines
8.9 KiB
YAML

parameters:
- name: 'toolset'
type: string
values:
- fedora_rpm
- make
- msbuild
- ubuntu_deb
- name: 'installer'
type: string
values:
- rpm # fedora_rpm
- tar # make
- nsis # msbuild
- deb # ubuntu_deb
- name: 'cmake_args'
type: string
default: " "
- name: releaseBinaries
type: boolean
default: false
# In this job, we always use uhd_images_downloader to get FPGA images, never
# the pipeline. This variable only controls if we use files.ettus.com or our
# internal server.
- name: fpga_imgs_source
type: string
default: 'Internal'
values:
- 'Internal'
- 'files.ettus.com (Public)'
- name: create_sbom
type: boolean
default: true
jobs:
- job: build_uhd_installer_${{ parameters.toolset }}
displayName: ${{ parameters.toolset }} UHD installer
dependsOn: get_latest_uhd_docker
${{ if contains(parameters.toolset, 'msbuild') }}:
timeoutInMinutes: 150
${{ else }}:
timeoutInMinutes: 120
variables:
# Need to use list format to support inclusion of variable groups.
# Variable group used by .ci/templates/steps-windows-sbom.yml@ettus-rts
- group: meta-ettus-vars
# Variable group needed for code signing (signtool-p4-path)
- ${{ if eq(parameters.toolset, 'msbuild') }}:
- group: sdr-pipeline-vars
# Docker vars from job-get-latest-uhd-docker.yml
- name: dockerBuildNumber
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerBuildNumber'] ]
- name: dockerImagePrefix
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImagePrefix'] ]
- name: dockerImageMatrixLin
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixLin'] ]
- name: dockerImageMatrixWin
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixWin'] ]
- name: dockerImageMatrixUbuntuDeb
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixUbuntuDeb'] ]
- name: macOSBuilders
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.macOSBuilders'] ]
- name: dockerImageMatrixSourcePackageBuilders
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixSourcePackageBuilders'] ]
- name: dockerImageMatrixFedoraRpm
value: $[ dependencies.get_latest_uhd_docker.outputs['setDockerVar.dockerImageMatrixFedoraRpm'] ]
pool:
name: Drivers-NIBuildFarm-RFMIBUILD
demands:
- docker
- ${{ if contains(parameters.toolset, 'msbuild') }}:
- Agent.OS -equals Windows_NT
- large_disk -equals 1
- high_disk_io -equals 1
- high_cpu_per_thread -equals 1
- cpu_host_type -equals Intel_x86-64-v4
- ${{ if not(contains(parameters.toolset, 'msbuild')) }}:
- Agent.OS -equals Linux
workspace:
clean: outputs
strategy:
${{ if and(eq(parameters.toolset, 'make'), eq(parameters.installer, 'tarball')) }}:
matrix: $[ variables.dockerImageMatrixLin ]
${{ if and(eq(parameters.toolset, 'msbuild'), eq(parameters.installer, 'nsis')) }}:
matrix: $[ variables.dockerImageMatrixWin ]
${{ if and(eq(parameters.toolset, 'ubuntu_deb'), eq(parameters.installer, 'deb')) }}:
matrix: $[ variables.dockerImageMatrixUbuntuDeb ]
${{ if and(eq(parameters.toolset, 'fedora_rpm'), eq(parameters.installer, 'rpm')) }}:
matrix: $[ variables.dockerImageMatrixFedoraRpm ]
container:
image: '$(dockerImagePrefix)$(DockerImageName):$(dockerBuildNumber)'
${{ if eq(parameters.toolset, 'msbuild') }}:
options: --cpu-count 6 --memory 12G
${{ if or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/UHD-')) }}:
endpoint: rnd-docker-niartifacts-ci-readonly
${{ else }}:
endpoint: rnd-docker-niartifacts-pre-readonly
${{ if eq(parameters.toolset, 'ubuntu_deb') }}:
#pbuilder requires access to /proc
options: --privileged
steps:
# Job uses template which causes self checkout to result in different values
# for $(Build.SourcesDirectory) due to single vs multiple repositories use.
# Switching to use manual path definition $(Pipeline.Workspace)/s/<RepoName>
# for consistent behavior to avoid
# $(Pipeline.Workspace)/s vs $(Pipeline.Workspace)/s/<RepoName>).
# Custom path now includes <RepoName>, which is now hardcoded, rather than
# use name from git repo (avoids problem when building from public uhd repo).
# Checkout path needs to be defined relative to $(Pipeline.Workspace).
- checkout: self
clean: true
path: 's/uhddev'
# Need to use OS specific steps because predefined variable
# (i.e. $(Pipeline.Workspace) on Linux is treated as runtime shell expansion,
# but actually handled by Azure and the quotes ensure correct, delayed variable
# expansion. On Windows variables are exanded before script runs, and
# using quotes results in leading or trailing quotes in the variable value.
- script: |
echo "##vso[task.setvariable variable=uhdSrcDir]$(Pipeline.Workspace)/s/uhddev"
condition: eq( variables['Agent.OS'], 'Linux' )
displayName: 'Define uhdSrcDir variable (Linux)'
- script: |
echo ##vso[task.setvariable variable=uhdSrcDir]$(Pipeline.Workspace)\s\uhddev
condition: eq( variables['Agent.OS'], 'Windows_NT' )
displayName: 'Define uhdSrcDir variable (Windows)'
- download: uhd_build_docker_container
- template: .ci/templates/steps-setup.yml@ettus-rts
- ${{ if eq(parameters.toolset, 'fedora_rpm') }}:
- template: steps-build-uhd-installer-fedora-rpm.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdBuildDir: $(Build.BinariesDirectory)/uhddev/build
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
fedoraReleaseName: $(fedoraReleaseName)
releaseBinaries: ${{ parameters.releaseBinaries }}
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-linux-sbom.yml@ettus-rts
parameters:
toolset: ${{ parameters.toolset }}
installer: ${{ parameters.installer }}
sbomComponentList: 'uhd libuhd libboost libusb'
buildOSName: $(buildOSName)
osReleaseName: $(fedoraReleaseName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
releaseBinaries: ${{ parameters.releaseBinaries }}
- ${{ if eq(parameters.toolset, 'ubuntu_deb') }}:
- template: steps-install-nib310rio-dev.yml
- template: steps-build-uhd-installer-ubuntu-deb.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
ubuntuReleaseName: $(ubuntuReleaseName)
nib310rioDebPackageDir: $(Pipeline.Workspace)/nib310rio_kernel_packages/nib310rio-deb-packages
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-linux-sbom.yml@ettus-rts
parameters:
toolset: ${{ parameters.toolset }}
installer: ${{ parameters.installer }}
sbomComponentList: 'uhd libuhd'
buildOSName: $(buildOSName)
osReleaseName: $(ubuntuReleaseName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)/uhddev-installer
releaseBinaries: ${{ parameters.releaseBinaries }}
- ${{ if and(eq(parameters.toolset, 'msbuild'), eq(parameters.installer, 'nsis')) }}:
- template: steps-build-uhd-installer-msbuild-nsis.yml
parameters:
uhdSrcDir: $(uhdSrcDir)
uhdBuildDir: c:\uhddev\build
uhdInstallerDir: $(Build.BinariesDirectory)\uhddev-installer
uhdImageDir: c:\uhd-images
uhdVcpkgManifestDir: c:\uhd-vcpkg
uhdReleaseBinaries: ${{ parameters.releaseBinaries }}
uhdBuildPythonAPI: True
${{ if contains(parameters.fpga_imgs_source, 'Internal') }}:
uhdImagesDownloaderExtraArgs: '-b $(InternalFileServerUrl)'
cmakeCompiler: $(cmakeCompiler)
cmakeArch: $(cmakeArch)
vsArch: $(vsArch)
vsYear: $(vsYear)
cleanTargetFolder: False
cmake_args: ${{ parameters.cmake_args }}
- ${{ if parameters.create_sbom }}:
- template: .ci/templates/steps-windows-sbom.yml@ettus-rts
parameters:
sbomComponentList: ''
buildOSName: $(buildOSName)
uhdSrcDir: $(uhdSrcDir)
uhdInstallerDir: $(Build.BinariesDirectory)\uhddev-installer
uhdBuildDir: c:\uhddev\build
uhdVcpkgManifestDir: c:\uhd-vcpkg
releaseBinaries: ${{ parameters.releaseBinaries }}
uhdBuildPythonAPI: True
vsArch: $(vsArch)
vsYear: $(vsYear)
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.BinariesDirectory)/uhddev-installer'
artifactName: 'uhddev-$(buildOSName)-${{ parameters.toolset }}-${{ parameters.installer }}-installer'
displayName: Upload uhd installer artifact