# download and install rocm dependencies through pipeline builds in the project parameters: - name: checkoutRef type: string default: '' - name: dependencyList type: object default: [] - name: os type: string default: 'ubuntu2204' - name: gpuTarget type: string default: '' # set to true if dlopen calls for HIP libraries are causing failures # because they do not follow shared library symlink convention - name: setupHIPLibrarySymlinks 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 # monorepo related parameters - name: downstreamAggregateNames type: string default: '' - name: componentVarList type: object default: AMDMIGraphX: pipelineId: 113 developBranch: develop hasGpuTarget: true amdsmi: pipelineId: 376 developBranch: develop hasGpuTarget: false aomp-extras: pipelineId: 111 developBranch: aomp-dev hasGpuTarget: false aomp: pipelineId: 115 developBranch: aomp-dev hasGpuTarget: false aqlprofile: pipelineId: 365 developBranch: develop hasGpuTarget: false clr: pipelineId: 335 developBranch: develop hasGpuTarget: false composable_kernel: pipelineId: 86 developBranch: develop hasGpuTarget: true half: pipelineId: 101 developBranch: rocm hasGpuTarget: false HIP: pipelineId: 335 developBranch: develop hasGpuTarget: false hip-tests: pipelineId: 362 developBranch: develop hasGpuTarget: false hipBLAS: pipelineId: 317 developBranch: develop hasGpuTarget: true hipBLASLt: pipelineId: 301 developBranch: develop hasGpuTarget: true hipBLAS-common: pipelineId: 300 developBranch: develop hasGpuTarget: false hipCUB: pipelineId: 277 developBranch: develop hasGpuTarget: true hipFFT: pipelineId: 283 developBranch: develop hasGpuTarget: true hipfort: pipelineId: 102 developBranch: develop hasGpuTarget: false HIPIFY: pipelineId: 92 developBranch: amd-staging hasGpuTarget: false hipRAND: pipelineId: 275 developBranch: develop hasGpuTarget: true hipSOLVER: pipelineId: 84 developBranch: develop hasGpuTarget: true hipSPARSE: pipelineId: 315 developBranch: develop hasGpuTarget: true hipSPARSELt: pipelineId: 309 developBranch: develop hasGpuTarget: true hipTensor: pipelineId: 374 developBranch: develop hasGpuTarget: true llvm-project: pipelineId: 2 developBranch: amd-staging hasGpuTarget: false MIOpen: pipelineId: 320 developBranch: develop hasGpuTarget: true MIVisionX: pipelineId: 80 developBranch: develop hasGpuTarget: true origami: pipelineId: 364 developBranch: develop hasGpuTarget: true rccl: pipelineId: 107 developBranch: develop hasGpuTarget: true rdc: pipelineId: 360 developBranch: develop hasGpuTarget: false rocAL: pipelineId: 151 developBranch: develop hasGpuTarget: true rocALUTION: pipelineId: 89 developBranch: develop hasGpuTarget: true rocBLAS: pipelineId: 302 developBranch: develop hasGpuTarget: true ROCdbgapi: pipelineId: 135 developBranch: amd-staging hasGpuTarget: false rocDecode: pipelineId: 79 developBranch: develop hasGpuTarget: false rocFFT: pipelineId: 282 developBranch: develop hasGpuTarget: true ROCgdb: pipelineId: 134 developBranch: amd-staging hasGpuTarget: false rocJPEG: pipelineId: 262 developBranch: develop hasGpuTarget: false rocm-cmake: pipelineId: 6 developBranch: develop hasGpuTarget: false rocm-core: pipelineId: 349 developBranch: develop hasGpuTarget: false rocm-examples: pipelineId: 216 developBranch: amd-staging hasGpuTarget: true rocminfo: pipelineId: 356 developBranch: develop hasGpuTarget: false rocMLIR: pipelineId: 229 developBranch: develop hasGpuTarget: false ROCmValidationSuite: pipelineId: 106 developBranch: master hasGpuTarget: true rocm_bandwidth_test: pipelineId: 88 developBranch: master hasGpuTarget: false rocm_smi_lib: pipelineId: 358 developBranch: develop hasGpuTarget: false rocPRIM: pipelineId: 273 developBranch: develop hasGpuTarget: true rocprofiler: pipelineId: 329 developBranch: develop hasGpuTarget: true rocprofiler-compute: pipelineId: 344 developBranch: develop hasGpuTarget: true rocprofiler-register: pipelineId: 327 developBranch: develop hasGpuTarget: false rocprofiler-sdk: pipelineId: 347 developBranch: develop hasGpuTarget: true rocprofiler-systems: pipelineId: 345 developBranch: develop hasGpuTarget: true rocPyDecode: pipelineId: 239 developBranch: develop hasGpuTarget: true ROCR-Runtime: pipelineId: 354 developBranch: develop hasGpuTarget: false rocRAND: pipelineId: 274 developBranch: develop hasGpuTarget: true rocr_debug_agent: pipelineId: 136 developBranch: amd-staging hasGpuTarget: false rocSOLVER: pipelineId: 81 developBranch: develop hasGpuTarget: true rocSPARSE: pipelineId: 314 developBranch: develop hasGpuTarget: true rocThrust: pipelineId: 276 developBranch: develop hasGpuTarget: true roctracer: pipelineId: 331 developBranch: develop hasGpuTarget: true rocWMMA: pipelineId: 370 developBranch: develop hasGpuTarget: true rpp: pipelineId: 78 developBranch: develop hasGpuTarget: true TransferBench: pipelineId: 265 developBranch: develop hasGpuTarget: true steps: # assuming artifact-download.yml template file in same directory # for the case where rocm dependency item in list has a colon (:) # assume it is of the format of componentName:fileFilter # fileFilter could contain both a subcomponent name or gpu name separated by asterisks # gpu name will be specified by parameters.gpuTarget for components that are in componentsWithGPUTarget # e.g., gfx942 to only download artifacts from component for this gpu if applicable - ${{ each dependency in parameters.dependencyList }}: - ${{ if contains(dependency, ':') }}: - template: artifact-download.yml parameters: componentName: ${{ split(dependency, ':')[0] }} pipelineId: ${{ parameters.componentVarList[split(dependency, ':')[0]].pipelineId }} branchName: ${{ parameters.componentVarList[split(dependency, ':')[0]].developBranch }} aggregatePipeline: ${{ parameters.aggregatePipeline }} extractAndDeleteFiles: false # no colon (:) found in this item in the list - ${{ elseif containsValue(split(parameters.downstreamAggregateNames, '+'), dependency) }}: - template: local-artifact-download.yml parameters: buildType: current preTargetFilter: ${{ dependency }} os: ${{ parameters.os }} ${{ if parameters.componentVarList[dependency].hasGpuTarget }}: gpuTarget: ${{ parameters.gpuTarget }} - ${{ else }}: - template: artifact-download.yml parameters: componentName: ${{ dependency }} pipelineId: ${{ parameters.componentVarList[dependency].pipelineId }} branchName: ${{ parameters.componentVarList[dependency].developBranch }} aggregatePipeline: ${{ parameters.aggregatePipeline }} extractAndDeleteFiles: false ${{ if parameters.componentVarList[dependency].hasGpuTarget }}: fileFilter: ${{ parameters.os }}_${{ parameters.gpuTarget }} ${{ else }}: fileFilter: ${{ parameters.os }} - task: ExtractFiles@1 displayName: Extract ROCm artifacts inputs: archiveFilePatterns: $(Pipeline.Workspace)/d/**/*.tar.gz destinationFolder: $(Agent.BuildDirectory)/rocm cleanDestinationFolder: false overwriteExistingFiles: true - task: DeleteFiles@1 displayName: Clean up ROCm artifacts inputs: SourceFolder: $(Pipeline.Workspace)/d Contents: '**/*.tar.gz' RemoveDotFiles: true - ${{ if containsValue(parameters.dependencyList, 'llvm-project') }}: - task: Bash@3 displayName: Symlink from rocm/llvm to rocm/lib/llvm inputs: targetType: inline script: | sudo mkdir -p $(Agent.BuildDirectory)/rocm/lib sudo ln -sr $(Agent.BuildDirectory)/rocm/llvm $(Agent.BuildDirectory)/rocm/lib/llvm echo "Created symlink from rocm/llvm to rocm/lib/llvm" - task: Bash@3 displayName: Symlink executables from rocm/llvm/bin to rocm/bin inputs: targetType: inline script: | for file in amdclang amdclang++ amdclang-cl amdclang-cpp amdflang amdlld aompcc mygpu mycpu offload-arch; do sudo ln -sr $(Agent.BuildDirectory)/rocm/llvm/bin/$file $(Agent.BuildDirectory)/rocm/bin/$file echo "Created symlink from rocm/llvm/bin/$file to rocm/bin/$file" done - ${{ if containsValue(parameters.dependencyList, 'rocm-core') }}: - task: Bash@3 displayName: Print rocm/.info/version inputs: targetType: inline script: cat $(Agent.BuildDirectory)/rocm/.info/version # dlopen calls within a ctest or pytest sequence runs into issues when shared library symlink convention is not followed # the convention is as follows: # unversioned .so is a symlink to major version .so # major version .so is a symlink to detailed version .so # HIP libraries do not follow this convention, and each .so is a copy of each other # changing the library structure to follow the symlink convention resolves some test failures - ${{ if eq(parameters.setupHIPLibrarySymlinks, true) }}: - task: Bash@3 displayName: Setup symlinks for hip libraries inputs: targetType: inline workingDirectory: $(Agent.BuildDirectory)/rocm/lib script: | LIBRARIES=("libamdhip64" "libhiprtc-builtins" "libhiprtc") for LIB_NAME in "${LIBRARIES[@]}"; do VERSIONED_SO=$(ls ${LIB_NAME}.so.* 2>/dev/null | grep -E "${LIB_NAME}\.so\.[0-9]+\.[0-9]+\.[0-9]+(-.*)?" | sort -V | tail -n 1) if [[ -z "$VERSIONED_SO" ]]; then continue fi MAJOR_VERSION=$(echo "$VERSIONED_SO" | grep -oP "${LIB_NAME}\.so\.\K[0-9]+") if [[ -e "${LIB_NAME}.so.${MAJOR_VERSION}" && ! -L "${LIB_NAME}.so.${MAJOR_VERSION}" ]]; then rm -f "${LIB_NAME}.so.${MAJOR_VERSION}" fi if [[ -e "${LIB_NAME}.so" && ! -L "${LIB_NAME}.so" ]]; then rm -f "${LIB_NAME}.so" fi ln -sf "$VERSIONED_SO" "${LIB_NAME}.so.${MAJOR_VERSION}" ln -sf "${LIB_NAME}.so.${MAJOR_VERSION}" "${LIB_NAME}.so" echo "Symlinks created for $LIB_NAME:" ls -l ${LIB_NAME}.so* done - task: Bash@3 displayName: 'List downloaded ROCm files' inputs: targetType: inline script: ls -la1R $(Agent.BuildDirectory)/rocm - task: Bash@3 displayName: 'Link ROCm shared libraries' inputs: targetType: inline # OS ignores if the ROCm lib folder shows up more than once script: | echo $(Agent.BuildDirectory)/rocm/lib | sudo tee -a /etc/ld.so.conf.d/rocm-ci.conf echo $(Agent.BuildDirectory)/rocm/llvm/lib | sudo tee -a /etc/ld.so.conf.d/rocm-ci.conf echo $(Agent.BuildDirectory)/rocm/lib64 | sudo tee -a /etc/ld.so.conf.d/rocm-ci.conf echo $(Agent.BuildDirectory)/rocm/llvm/lib64 | sudo tee -a /etc/ld.so.conf.d/rocm-ci.conf sudo cat /etc/ld.so.conf.d/rocm-ci.conf sudo ldconfig -v ldconfig -p