Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

241 lines
8.5 KiB
CMake

# Copyright © Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.25.2)
add_compile_definitions(__HIP_PLATFORM_AMD__)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/ClangToolChain.cmake"
CACHE STRING "Toolchain file"
)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/VersionUtils.cmake)
dnn_provider_setup_version(hip_kernel_provider ${CMAKE_CURRENT_LIST_DIR})
project(hip-kernel-provider VERSION ${HIP_KERNEL_PROVIDER_VERSION} LANGUAGES CXX)
# shared/ctest is only present in a full rocm-libraries checkout; guard the check at the
# point of use so standalone / sparse checkouts that lack shared/ctest still build.
if(NOT DEFINED ROCM_LIBRARIES_ROOT)
set(ROCM_LIBRARIES_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..")
endif()
if(NOT WIN32 AND DEFINED ROCM_PATH)
# Only set if not already specified by user
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${ROCM_PATH}" CACHE PATH "Install path prefix" FORCE)
endif()
message(STATUS "Setting CMAKE_INSTALL_PREFIX to ${CMAKE_INSTALL_PREFIX}")
endif()
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE
CACHE BOOL "Add paths to linker search and installed rpath"
)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake
${CMAKE_CURRENT_SOURCE_DIR}/../cmake ${ROCM_PATH}/lib/cmake/hip ${HIP_DIR}/cmake
)
option(HIPKERNELPROVIDER_ENABLE_TESTS "Build tests" ON)
option(HIPKERNELPROVIDER_ENABLE_ROCKE "Build rocKE engine and smoke tests" OFF)
option(ENABLE_ASM_SDPA_ENGINE "Build the ASM SDPA engine" ON)
option(ENABLE_HIP_MLOPS_ENGINE "Build the HIP kernel engine" ON)
option(BUILD_ADDRESS_SANITIZER "Build with Address Sanitizer enabled" OFF)
option(ENABLE_CLANG_FORMAT "Enable Clang-Format checks" ON)
if(WIN32)
option(ENABLE_CLANG_TIDY "Enable Clang-Tidy checks" OFF)
else()
option(ENABLE_CLANG_TIDY "Enable Clang-Tidy checks" ON)
endif()
option(HIPKERNELPROVIDER_ENABLE_COVERAGE "Build with code coverage flags" OFF)
if(HIPKERNELPROVIDER_ENABLE_COVERAGE)
message(VERBOSE "Enabling compile flags for coverage-mapping")
add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
add_link_options(-fprofile-instr-generate -fcoverage-mapping)
endif()
if(ENABLE_ASM_SDPA_ENGINE)
message(STATUS "ASM SDPA engine enabled")
else()
message(STATUS "ASM SDPA engine disabled")
endif()
if(ENABLE_HIP_MLOPS_ENGINE)
message(STATUS "HIP kernel engine enabled")
else()
message(STATUS "HIP kernel engine disabled")
endif()
list(
PREPEND
HIPDNN_WARNING_COMPILE_OPTIONS
-Werror
-Wall
-Wextra
-Wpedantic
-Wshadow
-Wnon-virtual-dtor
-Wold-style-cast
-Wcast-align
-Woverloaded-virtual
-Wconversion
-Wsign-conversion
-Wnull-dereference
-Wdouble-promotion
-Wformat=2
-Winit-self
-Wunreachable-code
-Wno-error=unused-command-line-argument
-Wswitch-default
)
# NOTE: Workaround until llvm & hip cmake modules fixes symlink logic in their config files;
# remove when fixed. Added to prevent issues with not finding hip cmake.
list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH}/llvm ${ROCM_PATH} ${ROCM_PATH}/hip)
find_package(hip REQUIRED)
find_package(hiprtc REQUIRED)
# hipdnn SDK dependencies - use targets directly if available (superbuild),
# otherwise find installed packages (true standalone)
if(NOT TARGET hipdnn_data_sdk)
find_package(hipdnn_data_sdk CONFIG REQUIRED)
endif()
if(NOT TARGET hipdnn_flatbuffers_sdk)
find_package(hipdnn_flatbuffers_sdk CONFIG REQUIRED)
endif()
if(NOT TARGET hipdnn_plugin_sdk)
find_package(hipdnn_plugin_sdk CONFIG REQUIRED)
endif()
include(CheckToolVersion)
include(ClangCheck)
include(ClangTidy)
include(Sanitizers)
# Setup testing dependencies
include(Dependencies)
if(HIPKERNELPROVIDER_ENABLE_TESTS)
fetch_gtest_dependency()
endif()
include(Tests)
if(WIN32)
set(HIPDNN_PLUGIN_ENGINE_ROOTDIR "bin")
else()
set(HIPDNN_PLUGIN_ENGINE_ROOTDIR "lib")
endif()
set(HIPDNN_BUILD_PLUGIN_ENGINE_DIR
"${CMAKE_BINARY_DIR}/${HIPDNN_PLUGIN_ENGINE_ROOTDIR}/${HIPDNN_PLUGIN_ENGINE_SUBDIR}"
)
message(STATUS "Plugin build directory: ${HIPDNN_BUILD_PLUGIN_ENGINE_DIR}")
message(STATUS "Plugin install directory: ${HIPDNN_INSTALL_PLUGIN_ENGINE_DIR}")
file(MAKE_DIRECTORY ${HIPDNN_BUILD_PLUGIN_ENGINE_DIR})
if(HIPKERNELPROVIDER_ENABLE_ROCKE)
message(STATUS "rocKE features enabled")
# rocke/ = platform (engine + build-time Python). The engine's installed
# CTest entries stage into EXTERNAL_TEST_INSTALL_STAGING_hip_kernel_provider,
# so add_subdirectory(rocke) must precede src/ below, which emits
# bin/hip_kernel_provider/CTestTestfile.cmake.
set(ROCKE_INSTALL_PROVIDER_CTEST_SUBDIR "hip_kernel_provider")
set(ROCKE_INSTALL_STANDALONE_CTEST OFF)
add_subdirectory(rocke)
else()
message(STATUS "rocKE features disabled")
endif()
add_subdirectory(src)
# ============================================================================
# Code Coverage
# ============================================================================
if(HIPKERNELPROVIDER_ENABLE_COVERAGE)
findandcheckllvmtools()
set(CODE_COVERAGE_IGNORE_REGEX ".*_deps.*|.*tests.*|.*integration_tests.*")
set(CODE_COVERAGE_OBJECTS
-object ${HIPDNN_BUILD_PLUGIN_ENGINE_DIR}/libhip_kernel_provider.so
-object ./${CMAKE_INSTALL_BINDIR}/hip_kernel_provider_tests
-object ./${CMAKE_INSTALL_BINDIR}/hip_kernel_provider_integration_tests
)
# Creates a coverage target that merges profraw files and generates reports.
#
# @param TARGET_NAME name of the custom target to create
# @param DEPENDS_TARGET target to depend on (empty string for no dependency)
function(add_custom_coverage_target TARGET_NAME DEPENDS_TARGET)
set(DEPENDS_CLAUSE "")
if(NOT "${DEPENDS_TARGET}" STREQUAL "")
set(DEPENDS_CLAUSE DEPENDS ${DEPENDS_TARGET})
endif()
# cmake-format: off
add_custom_target(
${TARGET_NAME}
COMMAND find . -name "*.profraw" -print0 | xargs -0 ${LLVM_PROFDATA_BINARY} merge
-sparse -o ./coverage-report/hip_kernel_provider.profdata
COMMAND
${LLVM_COV_BINARY} report ${CODE_COVERAGE_OBJECTS}
-instr-profile=./coverage-report/hip_kernel_provider.profdata
-ignore-filename-regex=${CODE_COVERAGE_IGNORE_REGEX} >
./coverage-report/code_cov_hip_kernel_provider.report
COMMAND
${LLVM_COV_BINARY} show -Xdemangler=${LLVM_CXXFILT_BINARY} ${CODE_COVERAGE_OBJECTS}
-instr-profile=./coverage-report/hip_kernel_provider.profdata
-ignore-filename-regex=${CODE_COVERAGE_IGNORE_REGEX} --format=html
--output-dir=coverage-report
COMMAND
${LLVM_COV_BINARY} export ${CODE_COVERAGE_OBJECTS}
-instr-profile=./coverage-report/hip_kernel_provider.profdata
-ignore-filename-regex=${CODE_COVERAGE_IGNORE_REGEX} --format=lcov >
./coverage-report/coverage.info
${DEPENDS_CLAUSE}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generating code coverage report"
VERBATIM
USES_TERMINAL
)
# cmake-format: on
endfunction()
add_custom_coverage_target(code_coverage check)
add_custom_coverage_target(unit-coverage unit-check)
add_custom_coverage_target(integration-coverage integration-check)
# Alias target
add_custom_target(coverage DEPENDS code_coverage COMMENT "Alias for code_coverage")
# Standalone coverage report from existing profdata (does not run tests)
add_custom_coverage_target(current-coverage "")
endif()
# ============================================================================
# Install
# ============================================================================
install(TARGETS hip_kernel_provider EXPORT hip-kernel-provider
LIBRARY DESTINATION ${HIPDNN_RELATIVE_INSTALL_PLUGIN_ENGINE_DIR}
RUNTIME DESTINATION ${HIPDNN_RELATIVE_INSTALL_PLUGIN_ENGINE_DIR}
)
if(ENABLE_ASM_SDPA_ENGINE)
install(DIRECTORY src/engines/asm_sdpa_engine/asm/asm_kernels/
DESTINATION ${HIPDNN_RELATIVE_INSTALL_PLUGIN_ENGINE_DIR}/hip_kernel_provider/asm_kernels
FILES_MATCHING PATTERN "*.co")
endif()