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
241 lines
8.5 KiB
CMake
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()
|