Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ cmake_policy(SET CMP0104 OLD)
# Project
project(onnxruntime C CXX ASM)

include(DetectPackageBackend)
detect_package_backend()

# Disable fast-math for Intel oneAPI compiler
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "IntelLLVM")
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC-like")
Expand Down
88 changes: 88 additions & 0 deletions cmake/DetectPackageBackend.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Copyright (c) Advanced Micro Devices, Inc. All rights reserved.
# Licensed under the MIT License.

# Detect the packaging backend for ONNX Runtime ROCm builds.
#
# detect_package_backend() sets ORT_PACKAGE_BACKEND as a cache variable:
# "therock" - TheRock environment (amdrocm-xxx deb/rpm packages)
# "default" - Traditional ROCm with deb/rpm packages
#
# Preferred usage (explicit):
# cmake -DORT_PACKAGE_BACKEND=therock -DORT_THEROCK_GPU_ARCH=gfx120x ..
#
# If ORT_PACKAGE_BACKEND is not set, falls back to auto-detection via
# dpkg/rpm to check for installed amdrocm-runtime packages.
#
# When ORT_PACKAGE_BACKEND=therock, ORT_THEROCK_GPU_ARCH must be set
# to the target GPU architecture family that follows TheRock packaging requirements.

function(_detect_therock_via_package_manager)
set(_found FALSE)
if(NOT WIN32)
find_program(_ort_dpkg_exe dpkg)
if(_ort_dpkg_exe)
execute_process(
COMMAND ${_ort_dpkg_exe} -s amdrocm-runtime
RESULT_VARIABLE _result
OUTPUT_QUIET ERROR_QUIET
)
if(_result EQUAL 0)
set(_found TRUE)
endif()
endif()
if(NOT _found)
find_program(_ort_rpm_exe rpm)
if(_ort_rpm_exe)
execute_process(
COMMAND ${_ort_rpm_exe} -q amdrocm-runtime
RESULT_VARIABLE _result
OUTPUT_QUIET ERROR_QUIET
)
if(_result EQUAL 0)
set(_found TRUE)
endif()
endif()
endif()
unset(_ort_dpkg_exe CACHE)
unset(_ort_rpm_exe CACHE)
endif()
set(_ORT_THEROCK_DETECTED ${_found} PARENT_SCOPE)
endfunction()

function(detect_package_backend)
if(NOT DEFINED CACHE{ORT_PACKAGE_BACKEND})
_detect_therock_via_package_manager()
if(_ORT_THEROCK_DETECTED)
set(_default_backend "therock")
message(STATUS "ORT package backend auto-detected: therock (amdrocm-runtime found)")
message(STATUS " Hint: prefer explicit -DORT_PACKAGE_BACKEND=therock -DORT_THEROCK_GPU_ARCH=<arch>")
else()
set(_default_backend "default")
endif()
set(ORT_PACKAGE_BACKEND "${_default_backend}" CACHE STRING
"Packaging backend: 'default' for traditional ROCm, 'therock' for TheRock amdrocm packages")
endif()

set_property(CACHE ORT_PACKAGE_BACKEND PROPERTY STRINGS "default" "therock")

set(_valid_backends "default" "therock")
if(NOT ORT_PACKAGE_BACKEND IN_LIST _valid_backends)
message(FATAL_ERROR
"ORT_PACKAGE_BACKEND='${ORT_PACKAGE_BACKEND}' is not valid. "
"Must be one of: ${_valid_backends}")
endif()

if(ORT_PACKAGE_BACKEND STREQUAL "therock")
if(DEFINED ENV{GPU_ARCH_FOR_THEROCK})
set(_default_gpu_arch "$ENV{GPU_ARCH_FOR_THEROCK}")
else()
set(_default_gpu_arch "")
endif()
set(ORT_THEROCK_GPU_ARCH "${_default_gpu_arch}" CACHE STRING
"TheRock GPU architecture family suffix (e.g. gfx120x)")

message(STATUS "ORT package backend: therock (GPU arch: ${ORT_THEROCK_GPU_ARCH})")
else()
message(STATUS "ORT package backend: default (traditional ROCm)")
endif()
endfunction()
15 changes: 15 additions & 0 deletions cmake/adjust_global_compile_flags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,21 @@ else()
set(onnxruntime_ENABLE_CPU_FP16_OPS FALSE)
endif()

# Suppress warnings from newer Clang shipped with TheRock / ROCm 7.x+
check_cxx_compiler_flag("-Wlifetime-safety-intra-tu-suggestions" HAS_LIFETIME_SAFETY_INTRA_TU)
if (HAS_LIFETIME_SAFETY_INTRA_TU)
string(APPEND CMAKE_CXX_FLAGS " -Wno-lifetime-safety-intra-tu-suggestions")
endif()
check_cxx_compiler_flag("-Wlifetime-safety-cross-tu-suggestions" HAS_LIFETIME_SAFETY_CROSS_TU)
if (HAS_LIFETIME_SAFETY_CROSS_TU)
string(APPEND CMAKE_CXX_FLAGS " -Wno-lifetime-safety-cross-tu-suggestions")
endif()
check_cxx_compiler_flag("-Wc2y-extensions" HAS_C2Y_EXTENSIONS)
if (HAS_C2Y_EXTENSIONS)
string(APPEND CMAKE_CXX_FLAGS " -Wno-c2y-extensions")
string(APPEND CMAKE_C_FLAGS " -Wno-c2y-extensions")
endif()

endif()

if (WIN32)
Expand Down
90 changes: 90 additions & 0 deletions dockerfiles/Dockerfile.therock
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# ONNXRuntime build environment with TheRock (amdrocm-*) deb packages.
#
# Build args:
# GPU_ARCH GPU architecture family (e.g. gfx120x, gfx94x)
# ROCM_RELEASE_URL TheRock ROCm apt repository URL
#
# Build:
# docker build --build-arg GPU_ARCH=<gpu_arch> \
# --build-arg ROCM_RELEASE_URL=<rocm_release_url> \
# -f dockerfiles/Dockerfile.therock -t onnxruntime-therock .
#
# Run:
# docker run -it --device=/dev/kfd --device=/dev/dri --group-add video \
# -v $(pwd):/code/onnxruntime onnxruntime-therock
#
# Build ONNXRuntime inside the container:
# cd /code/onnxruntime
# ./build.sh --allow_running_as_root --config Release --build_wheel \
# --use_rocm --rocm_home /opt/rocm --use_migraphx \
# --cmake_extra_defines ORT_PACKAGE_BACKEND=therock \
# ORT_THEROCK_GPU_ARCH=$(rocminfo | grep -o -m1 'gfx.*')

FROM ubuntu:24.04

ARG GPU_ARCH=gfx120x
ARG ROCM_RELEASE_URL=https://rocm.nightlies.amd.com/deb/20260414-24379014014

RUN dpkg --add-architecture i386

# Install apt repository signing key for LLVM.
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates gnupg2 curl && \
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-archive-keyring.gpg

# Add TheRock ROCm nightly repository (unsigned until upstream signs the repo).
RUN sh -c "echo deb [arch=amd64 trusted=yes] ${ROCM_RELEASE_URL} stable main > /etc/apt/sources.list.d/rocm.list"

RUN sh -c "echo 'Package: *\nPin: release o=repo.radeon.com\nPin-priority: 600' > /etc/apt/preferences.d/rocm-pin-600"

# Add LLVM repository for Clang 17
RUN sh -c "echo deb [arch=amd64 signed-by=/usr/share/keyrings/llvm-archive-keyring.gpg] https://apt.llvm.org/noble/ llvm-toolchain-noble-17 main > /etc/apt/sources.list.d/llvm.list"

# Install build dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
apt-utils \
build-essential \
clang-17 \
cmake \
curl \
g++ \
gdb \
git \
locales \
pkg-config \
python3 \
python3-dev \
python3-pip \
python3-full \
wget \
libnuma-dev \
libomp-17-dev \
libssl-dev \
zlib1g-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# Install TheRock ROCm libraries
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
amdrocm-runtime \
amdrocm-runtime-dev \
amdrocm-llvm \
amdrocm-core-${GPU_ARCH} \
amdrocm-core-dev-${GPU_ARCH} \
amdrocm-blas-${GPU_ARCH} \
amdrocm-blas-dev-${GPU_ARCH} \
amdrocm-hipblas-common-dev-${GPU_ARCH} \
amdrocm-dnn-${GPU_ARCH} \
amdrocm-dnn-dev-${GPU_ARCH} && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

ENV PIP_BREAK_SYSTEM_PACKAGES=1
ENV PATH=/opt/rocm/bin:$PATH

# Expose GPU arch for CMake (avoids ORT_ prefix "unused env" warning).
ENV GPU_ARCH_FOR_THEROCK=${GPU_ARCH}

RUN locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8

ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
Loading