parameters: - name: checkoutRepo type: string default: 'self' - name: checkoutRef type: string default: '' # monorepo related parameters - name: sparseCheckoutDir type: string default: '' - name: triggerDownstreamJobs type: boolean default: false - name: downstreamAggregateNames type: string default: '' - name: buildDependsOn type: object default: null - name: unifiedBuild type: boolean default: false # set to true if doing full build of ROCm stack # and dependencies are pulled from same pipeline - name: aggregatePipeline type: boolean default: false - name: aptPackages type: object default: - cmake - ffmpeg - libavcodec-dev - libavformat-dev - libavutil-dev - libdlpack-dev - libdrm-dev - libva-dev - ninja-build - pkg-config - python3-pip - name: pipModules type: object default: - hip-python --extra-index-url https://test.pypi.org/simple - numpy - pybind11 - name: rocmDependencies type: object default: - clr - llvm-project - rocDecode - rocJPEG - rocm-cmake - rocm-core - rocminfo - ROCR-Runtime - rocprofiler-register - name: jobMatrix type: object default: buildJobs: - { os: ubuntu2204, packageManager: apt, target: gfx942 } - { os: ubuntu2204, packageManager: apt, target: gfx90a } testJobs: - { os: ubuntu2204, packageManager: apt, target: gfx942 } - { os: ubuntu2204, packageManager: apt, target: gfx90a } jobs: - ${{ each job in parameters.jobMatrix.buildJobs }}: - job: rocPyDecode_build_${{ job.target }} ${{ if parameters.buildDependsOn }}: dependsOn: - ${{ each build in parameters.buildDependsOn }}: - ${{ build }}_${{ job.os }} variables: - group: common - template: /.azuredevops/variables-global.yml - name: ROCM_PATH value: $(Agent.BuildDirectory)/rocm pool: vmImage: ${{ variables.BASE_BUILD_POOL }} workspace: clean: all steps: - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-other.yml parameters: aptPackages: ${{ parameters.aptPackages }} pipModules: ${{ parameters.pipModules }} packageManager: ${{ job.packageManager }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/preamble.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/checkout.yml parameters: checkoutRepo: ${{ parameters.checkoutRepo }} sparseCheckoutDir: ${{ parameters.sparseCheckoutDir }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-rocm.yml parameters: checkoutRef: ${{ parameters.checkoutRef }} dependencyList: ${{ parameters.rocmDependencies }} gpuTarget: ${{ job.target }} aggregatePipeline: ${{ parameters.aggregatePipeline }} ${{ if parameters.triggerDownstreamJobs }}: downstreamAggregateNames: ${{ parameters.downstreamAggregateNames }} - task: Bash@3 displayName: 'Save Python Package Paths' inputs: targetType: inline script: | echo "##vso[task.setvariable variable=PYTHON_USER_SITE;]$(python3 -m site --user-site)" echo "##vso[task.setvariable variable=PYTHON_DIST_PACKAGES;]$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')" echo "##vso[task.setvariable variable=PYBIND11_PATH;]$(python3 -c 'import pybind11; print(pybind11.get_cmake_dir())')" - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/build-cmake.yml parameters: installEnabled: false extraBuildFlags: >- -DCMAKE_PREFIX_PATH=$(Agent.BuildDirectory)/rocm;$(PYTHON_USER_SITE)/pybind11;$(PYTHON_DIST_PACKAGES)/pybind11;$(PYBIND11_PATH) -DCMAKE_BUILD_TYPE=Release -DGPU_TARGETS=${{ job.target }} -DCMAKE_INSTALL_PREFIX_PYTHON=$(Build.BinariesDirectory) -GNinja - task: Bash@3 displayName: 'rocPyDecode install' inputs: targetType: inline script: | sudo cmake --build . --target install sudo chown -R $(whoami):$(id -gn) $(Build.BinariesDirectory) workingDirectory: $(Build.SourcesDirectory)/build - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/manifest.yml parameters: gpuTarget: ${{ job.target }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/artifact-upload.yml parameters: gpuTarget: ${{ job.target }} publish: false - task: Bash@3 displayName: Create wheel file inputs: targetType: inline script: | export HIP_INCLUDE_DIRS=$(Agent.BuildDirectory)/rocm/include/hip sudo python3 setup.py bdist_wheel sudo chown -R $(whoami):$(id -gn) $(find . -name "*.whl") workingDirectory: $(Build.SourcesDirectory) - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/artifact-prepare-package.yml parameters: sourceDir: $(Build.SourcesDirectory)/dist contentsString: '*.whl' targetDir: $(Build.ArtifactStagingDirectory) clean: false - task: PublishPipelineArtifact@1 displayName: 'wheel file Publish' retryCountOnTaskFailure: 3 inputs: targetPath: $(Build.ArtifactStagingDirectory) - task: Bash@3 displayName: Save pipeline artifact file names inputs: workingDirectory: $(Pipeline.Workspace) targetType: inline script: | whlFile=$(find "$(Build.ArtifactStagingDirectory)" -type f -name "*.whl" | head -n 1) if [ -n "$whlFile" ]; then echo $(basename "$whlFile") >> pipelineArtifacts.txt fi - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/artifact-links.yml # - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/docker-container.yml # parameters: # aptPackages: ${{ parameters.aptPackages }} # pipModules: ${{ parameters.pipModules }} # gpuTarget: ${{ job.target }} - ${{ each job in parameters.jobMatrix.testJobs }}: - job: rocPyDecode_test_${{ job.target }} dependsOn: rocPyDecode_build_${{ job.target }} condition: and(succeeded(), eq(variables['ENABLE_${{ upper(job.target) }}_TESTS'], 'true'), not(containsValue(split(variables['DISABLED_${{ upper(job.target) }}_TESTS'], ','), variables['Build.DefinitionName'])), eq(${{ parameters.aggregatePipeline }}, False) ) variables: - group: common - template: /.azuredevops/variables-global.yml - name: ROCM_PATH value: $(Agent.BuildDirectory)/rocm pool: name: ${{ job.target }}_test_pool workspace: clean: all steps: - task: Bash@3 displayName: Ensure pybind11-dev is not installed inputs: targetType: inline script: | if dpkg -l | grep -q pybind11-dev; then echo "Removing pybind11-dev..." sudo apt remove -y pybind11-dev else echo "pybind11-dev is not installed." fi - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-other.yml parameters: aptPackages: ${{ parameters.aptPackages }} pipModules: ${{ parameters.pipModules }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/preamble.yml - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Wheel Files' retryCountOnTaskFailure: 3 inputs: itemPattern: '**/*.whl' targetPath: $(Agent.BuildDirectory) - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/local-artifact-download.yml parameters: gpuTarget: ${{ job.target }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-aqlprofile.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-rocm.yml parameters: checkoutRef: ${{ parameters.checkoutRef }} dependencyList: ${{ parameters.rocmDependencies }} gpuTarget: ${{ job.target }} setupHIPLibrarySymlinks: true - task: Bash@3 displayName: pip install inputs: targetType: inline script: | pip uninstall -y rocPyDecode find -name *.whl -exec pip install {} \; workingDirectory: $(Agent.BuildDirectory) - task: Bash@3 displayName: Setup search paths inputs: targetType: inline script: | echo "##vso[task.setvariable variable=PYTHON_USER_SITE;]$(python3 -m site --user-site)" echo "##vso[task.setvariable variable=PYTHON_DIST_PACKAGES;]$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')" echo "##vso[task.setvariable variable=PYBIND11_PATH;]$(python3 -c 'import pybind11; print(pybind11.get_cmake_dir())')" - task: CMake@1 displayName: 'rocPyDecode Test CMake Flags' inputs: workingDirectory: $(Agent.BuildDirectory)/rocm/share/rocpydecode/tests cmakeArgs: >- -DCMAKE_PREFIX_PATH=$(Agent.BuildDirectory)/rocm;$(PYTHON_USER_SITE)/pybind11;$(PYTHON_DIST_PACKAGES)/pybind11;$(PYBIND11_PATH) -DCMAKE_BUILD_TYPE=Release -DGPU_TARGETS=${{ job.target }} . - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/gpu-diagnostics.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/test.yml parameters: componentName: rocPyDecode testDir: $(Agent.BuildDirectory)/rocm/share/rocpydecode/tests - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/docker-container.yml parameters: aptPackages: ${{ parameters.aptPackages }} pipModules: ${{ parameters.pipModules }} environment: test gpuTarget: ${{ job.target }} pythonEnvVars: true # note that this docker won't have hip-python installed via pip