parameters: - name: componentName type: string default: rocPRIM - 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 - git - ninja-build - python3-pip - name: rocmDependencies type: object default: - clr - llvm-project - rocm-cmake - rocminfo - ROCR-Runtime - name: rocmTestDependencies type: object default: - clr - llvm-project - rocminfo - ROCR-Runtime - rocprofiler-register - name: jobMatrix type: object default: buildJobs: - { os: ubuntu2204, packageManager: apt, target: gfx942 } - { os: ubuntu2204, packageManager: apt, target: gfx90a } - { os: ubuntu2204, packageManager: apt, target: gfx1201 } - { os: ubuntu2204, packageManager: apt, target: gfx1100 } - { os: ubuntu2204, packageManager: apt, target: gfx1030 } - { os: almalinux8, packageManager: dnf, target: gfx942 } - { os: almalinux8, packageManager: dnf, target: gfx90a } - { os: almalinux8, packageManager: dnf, target: gfx1201 } - { os: almalinux8, packageManager: dnf, target: gfx1100 } - { os: almalinux8, packageManager: dnf, target: gfx1030 } testJobs: - { os: ubuntu2204, packageManager: apt, target: gfx942, shard: 1, shardCount: 3 } - { os: ubuntu2204, packageManager: apt, target: gfx942, shard: 2, shardCount: 3 } - { os: ubuntu2204, packageManager: apt, target: gfx942, shard: 3, shardCount: 3 } - { os: ubuntu2204, packageManager: apt, target: gfx90a, shard: 1, shardCount: 3 } - { os: ubuntu2204, packageManager: apt, target: gfx90a, shard: 2, shardCount: 3 } - { os: ubuntu2204, packageManager: apt, target: gfx90a, shard: 3, shardCount: 3 } - name: downstreamComponentMatrix type: object default: - rocThrust: name: rocThrust sparseCheckoutDir: projects/rocthrust skipUnifiedBuild: 'false' buildDependsOn: - rocPRIM_build - hipCUB: name: hipCUB sparseCheckoutDir: projects/hipcub skipUnifiedBuild: 'false' buildDependsOn: - rocPRIM_build # rocSOLVER depends on both rocBLAS and rocPRIM # for a unified build, rocBLAS will be the one to call rocSOLVER # - rocSOLVER: # name: rocSOLVER # sparseCheckoutDir: projects/rocsolver # skipUnifiedBuild: 'true' # buildDependsOn: # - rocPRIM_build jobs: - ${{ each job in parameters.jobMatrix.buildJobs }}: - job: ${{ parameters.componentName }}_build_${{ job.os }}_${{ job.target }} ${{ if parameters.buildDependsOn }}: dependsOn: - ${{ each build in parameters.buildDependsOn }}: - ${{ build }}_${{ job.os }}_${{ job.target }} variables: - group: common - template: /.azuredevops/variables-global.yml pool: ${{ variables.MEDIUM_BUILD_POOL }} ${{ if eq(job.os, 'almalinux8') }}: container: image: rocmexternalcicd.azurecr.io/manylinux228:latest endpoint: ContainerService3 workspace: clean: all steps: - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-other.yml parameters: aptPackages: ${{ parameters.aptPackages }} 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-vendor.yml parameters: dependencyList: - gtest - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-rocm.yml parameters: checkoutRef: ${{ parameters.checkoutRef }} dependencyList: ${{ parameters.rocmDependencies }} gpuTarget: ${{ job.target }} os: ${{ job.os }} aggregatePipeline: ${{ parameters.aggregatePipeline }} ${{ if parameters.triggerDownstreamJobs }}: downstreamAggregateNames: ${{ parameters.downstreamAggregateNames }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/build-cmake.yml parameters: os: ${{ job.os }} consolidateBuildAndInstall: true extraBuildFlags: >- -DCMAKE_PREFIX_PATH="$(Agent.BuildDirectory)/rocm;$(Agent.BuildDirectory)/vendor" -DCMAKE_CXX_COMPILER=$(Agent.BuildDirectory)/rocm/llvm/bin/amdclang++ -DAMDGPU_TARGETS=${{ job.target }} -DBUILD_BENCHMARK=ON -DBUILD_TEST=ON -GNinja extraCxxFlags: -Wno-deprecated-declarations - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/manifest.yml parameters: componentName: ${{ parameters.componentName }} sparseCheckoutDir: ${{ parameters.sparseCheckoutDir }} gpuTarget: ${{ job.target }} os: ${{ job.os }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/artifact-upload.yml parameters: componentName: ${{ parameters.componentName }} gpuTarget: ${{ job.target }} os: ${{ job.os }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/artifact-links.yml - ${{ if eq(job.os, 'ubuntu2204') }}: - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/docker-container.yml parameters: aptPackages: ${{ parameters.aptPackages }} gpuTarget: ${{ job.target }} - ${{ if eq(parameters.unifiedBuild, False) }}: - ${{ each job in parameters.jobMatrix.testJobs }}: - job: ${{ parameters.componentName }}_test_${{ job.os }}_${{ job.target }}_shard_${{ job.shard }} dependsOn: ${{ parameters.componentName }}_build_${{ job.os }}_${{ job.target }} condition: and(succeeded(), eq(variables['ENABLE_${{ upper(job.target) }}_TESTS'], 'true'), not(containsValue(split(variables['DISABLED_${{ upper(job.target) }}_TESTS'], ','), '${{ parameters.componentName }}')), eq(${{ parameters.aggregatePipeline }}, False) ) variables: - group: common - template: /.azuredevops/variables-global.yml pool: ${{ job.target }}_test_pool workspace: clean: all steps: - checkout: none - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-other.yml parameters: aptPackages: ${{ parameters.aptPackages }} packageManager: ${{ job.packageManager }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/preamble.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/local-artifact-download.yml parameters: preTargetFilter: ${{ parameters.componentName }} gpuTarget: ${{ job.target }} os: ${{ job.os }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-aqlprofile.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/dependencies-rocm.yml parameters: checkoutRef: ${{ parameters.checkoutRef }} dependencyList: ${{ parameters.rocmTestDependencies }} gpuTarget: ${{ job.target }} os: ${{ job.os }} ${{ if parameters.triggerDownstreamJobs }}: downstreamAggregateNames: ${{ parameters.downstreamAggregateNames }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/gpu-diagnostics.yml - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/test.yml parameters: componentName: ${{ parameters.componentName }} testDir: '$(Agent.BuildDirectory)/rocm/bin/rocprim' extraTestParameters: '-I ${{ job.shard }},,${{ job.shardCount }}' os: ${{ job.os }} - template: ${{ variables.CI_TEMPLATE_PATH }}/steps/docker-container.yml parameters: aptPackages: ${{ parameters.aptPackages }} environment: test gpuTarget: ${{ job.target }} - ${{ if parameters.triggerDownstreamJobs }}: - ${{ each component in parameters.downstreamComponentMatrix }}: - ${{ if not(and(parameters.unifiedBuild, eq(component.skipUnifiedBuild, 'true'))) }}: - template: /.azuredevops/components/${{ component.name }}.yml@pipelines_repo parameters: checkoutRepo: ${{ parameters.checkoutRepo }} sparseCheckoutDir: ${{ component.sparseCheckoutDir }} buildDependsOn: ${{ component.buildDependsOn }} downstreamAggregateNames: ${{ parameters.downstreamAggregateNames }}+${{ parameters.componentName }} triggerDownstreamJobs: true unifiedBuild: ${{ parameters.unifiedBuild }}