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
319 lines
9.9 KiB
CMake
319 lines
9.9 KiB
CMake
# Copyright Advanced Micro Devices, Inc., or its affiliates.
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
cmake_minimum_required(VERSION 3.25.2)
|
|
set(ROCROLLER_VERSION 1.0.0)
|
|
set(ROCROLLER_SOVERSION 1)
|
|
project(rocroller VERSION ${ROCROLLER_VERSION} LANGUAGES CXX)
|
|
|
|
if(NOT DEFINED ROCM_LIBRARIES_ROOT)
|
|
set(ROCM_LIBRARIES_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
|
endif()
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
include(CMakeRC)
|
|
include(FetchContent)
|
|
include(CMakeDependentOption)
|
|
include(rocroller_target_configure_sanitizers)
|
|
|
|
include(fetch_rocm_cmake)
|
|
|
|
option(ROCROLLER_ENABLE_CLIENT "Build the rocRoller client." ON)
|
|
option(ROCROLLER_ENABLE_YAML_CPP "Enable yaml-cpp backend." ON)
|
|
cmake_dependent_option(ROCROLLER_ENABLE_LLVM "Enable llvm yaml backend." ON "NOT ROCROLLER_ENABLE_YAML_CPP" OFF)
|
|
option(ROCROLLER_BUILD_TESTING "Build rocRoller testing." ON)
|
|
option(ROCROLLER_ENABLE_DOCS "Build rocRoller documentation." OFF)
|
|
option(ROCROLLER_ENABLE_CATCH "Build rocRoller catch unit tests" ON)
|
|
option(ROCROLLER_ENABLE_ROCPROF_ANALYZER "Enable rocprofiler analyzer tests." OFF)
|
|
option(ROCROLLER_ENABLE_GEMM_CLIENT_TESTS "Use pytest test discovery to add gemm client tests (requires pytest-cmake)" ON)
|
|
option(ROCROLLER_ENABLE_TEST_DISCOVERY "Use gtest and catch2 test discovery functions." ON)
|
|
option(ROCROLLER_ENABLE_COVERAGE "Build code coverage." OFF)
|
|
cmake_dependent_option(ROCROLLER_ENABLE_SLOW_TESTS "Disable slow running tests." ON "NOT ROCROLLER_ENABLE_COVERAGE" OFF)
|
|
option(ROCROLLER_EMBED_ARCH_DEF "Embed msgpack architecture data in library." ON)
|
|
option(ROCROLLER_BUILD_SHARED_LIBS "Build rocRoller as a shared library." ON)
|
|
option(ROCROLLER_ENABLE_FETCH "Enable fetch content for dependencies if find_package fails." OFF)
|
|
option(ROCROLLER_ENABLE_TIMERS "Enable rocRoller timer code." OFF)
|
|
option(ROCROLLER_ENABLE_CPPCHECK "Enable cppcheck." OFF)
|
|
option(ROCROLLER_ENABLE_ASAN "Enable addresss sanitizers." OFF)
|
|
option(ROCROLLER_ENABLE_PREGENERATED_ARCH_DEF "Use the pregenerates GPU architecture definition YAML file(s) in the repository." ON)
|
|
set(ROCROLLER_MRISAS_DIR "${CMAKE_CURRENT_BINARY_DIR}/GPUArchitectureGenerator/amd-mrisa" CACHE STRING "Path to directory containing MRISA XML files.")
|
|
|
|
if(ROCROLLER_ENABLE_TEST_DISCOVERY)
|
|
enable_testing()
|
|
endif()
|
|
|
|
if(ROCROLLER_ENABLE_CPPCHECK)
|
|
find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
|
|
if(CMAKE_CXX_CPPCHECK)
|
|
list(
|
|
APPEND
|
|
CMAKE_CXX_CPPCHECK
|
|
"--enable=warning"
|
|
"--enable=performance"
|
|
"--enable=portability"
|
|
"--enable=style"
|
|
"--error-exitcode=10"
|
|
"--force"
|
|
"--inline-suppr"
|
|
"--library=googletest"
|
|
"--suppressions-list=${PROJECT_SOURCE_DIR}/CppCheckSuppressions.txt"
|
|
)
|
|
endif()
|
|
else()
|
|
unset(CMAKE_CXX_CPPCHECK CACHE)
|
|
endif()
|
|
|
|
find_package(fmt 11.1.3 QUIET)
|
|
if(NOT fmt_FOUND)
|
|
if(ROCROLLER_ENABLE_FETCH)
|
|
set(FMT_SYSTEM_HEADERS ON)
|
|
FetchContent_Declare(
|
|
fmt
|
|
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
|
|
GIT_TAG 11.1.3
|
|
)
|
|
FetchContent_MakeAvailable(fmt)
|
|
set_property(DIRECTORY ${fmt_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL ON)
|
|
else()
|
|
message(FATAL_ERROR "Failed to find fmt")
|
|
endif()
|
|
endif()
|
|
|
|
find_package(spdlog QUIET)
|
|
if(NOT spdlog_FOUND)
|
|
if(ROCROLLER_ENABLE_FETCH)
|
|
block(SCOPE_FOR VARIABLES PROPAGATE spdlog_SOURCE_DIR)
|
|
# option() honors existing variables
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
set(ROCM_WARN_TOOLCHAIN_VAR OFF)
|
|
FetchContent_Declare(
|
|
spdlog
|
|
GIT_REPOSITORY https://github.com/gabime/spdlog.git
|
|
GIT_TAG v1.x
|
|
)
|
|
FetchContent_MakeAvailable(spdlog)
|
|
endblock()
|
|
set_property(DIRECTORY ${spdlog_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL ON)
|
|
else()
|
|
message(FATAL_ERROR "Failed to find spdlog")
|
|
endif()
|
|
endif()
|
|
|
|
find_package(libdivide QUIET)
|
|
if(NOT libdivide_FOUND)
|
|
if(ROCROLLER_ENABLE_FETCH)
|
|
FetchContent_Declare(
|
|
libdivide
|
|
GIT_REPOSITORY https://github.com/ridiculousfish/libdivide.git
|
|
GIT_TAG master
|
|
)
|
|
FetchContent_MakeAvailable(libdivide)
|
|
set_property(DIRECTORY ${libdivide_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL ON)
|
|
else()
|
|
message(FATAL_ERROR "Failed to find libdivide")
|
|
endif()
|
|
endif()
|
|
|
|
find_package(msgpack-cxx CONFIG)
|
|
if(msgpack-cxx_FOUND)
|
|
message(STATUS "Found msgpack-cxx (>=6.x)")
|
|
set(msgpack_libs msgpack-cxx)
|
|
else()
|
|
find_package(msgpackc-cxx CONFIG REQUIRED NAMES msgpackc-cxx msgpack)
|
|
message(STATUS "Found msgpack (<=5.x)")
|
|
set(msgpack_libs msgpackc-cxx)
|
|
endif()
|
|
|
|
find_package(hip REQUIRED)
|
|
find_package(amd_comgr REQUIRED)
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
set(CMAKE_REQUIRED_LIBRARIES hip::host)
|
|
check_cxx_source_compiles(
|
|
"#include <hip/hip_runtime.h>
|
|
int main() {
|
|
hipLaunchAttribute attr;
|
|
attr.id = hipLaunchAttributeClusterDimension;
|
|
return 0;
|
|
}"
|
|
ROCROLLER_HAS_HIP_WORKGROUP_CLUSTERS
|
|
)
|
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
|
|
|
if(ROCROLLER_ENABLE_LLVM)
|
|
find_package(LLVM REQUIRED)
|
|
endif()
|
|
|
|
if(ROCROLLER_BUILD_SHARED_LIBS)
|
|
add_library(rocroller SHARED)
|
|
else()
|
|
add_library(rocroller STATIC)
|
|
set_target_properties(rocroller PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
set_target_properties(rocroller
|
|
PROPERTIES
|
|
VERSION ${ROCROLLER_VERSION}
|
|
SOVERSION ${ROCROLLER_SOVERSION}
|
|
)
|
|
add_library(roc::rocroller ALIAS rocroller)
|
|
|
|
add_library(rocroller-interface INTERFACE)
|
|
add_library(roc::rocroller-interface ALIAS rocroller-interface)
|
|
|
|
target_compile_options(rocroller PUBLIC $<BUILD_INTERFACE:-fmacro-prefix-map=${PROJECT_SOURCE_DIR}=shared/rocroller>)
|
|
|
|
if(ROCROLLER_ENABLE_ASAN AND NOT WIN32)
|
|
rocroller_target_configure_sanitizers(rocroller PRIVATE)
|
|
set(ASAN_LIB_PATH "unset")
|
|
execute_process(
|
|
COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=libclang_rt.asan-x86_64.so
|
|
OUTPUT_VARIABLE ASAN_LIB_PATH
|
|
)
|
|
# If ASAN_LIB_PATH is libclang_rt.asan-x86_64.so
|
|
# rather than /path/to/libclang_rt.asan-x86_64.so then
|
|
# we failed to locate it and HAS_PARENT_PATH is false.
|
|
string(STRIP ${ASAN_LIB_PATH} ASAN_LIB_PATH)
|
|
cmake_path(HAS_PARENT_PATH ASAN_LIB_PATH result)
|
|
if(NOT result)
|
|
message(FATAL_ERROR "Failed to locate libclang_rt.asan-x86_64.so ")
|
|
endif()
|
|
set(asan_opts "LD_PRELOAD=${ASAN_LIB_PATH};ASAN_OPTIONS=detect_leaks=0")
|
|
endif()
|
|
|
|
target_link_libraries(rocroller-interface INTERFACE roc::rocroller)
|
|
|
|
if(ROCROLLER_ENABLE_TIMERS)
|
|
target_compile_definitions(rocroller PUBLIC ROCROLLER_ENABLE_TIMERS)
|
|
endif()
|
|
|
|
if(ROCROLLER_ENABLE_YAML_CPP)
|
|
if(ROCROLLER_ENABLE_FETCH)
|
|
block(SCOPE_FOR VARIABLES PROPAGATE yaml_cpp_SOURCE_DIR)
|
|
# option() honors existing variables
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
set(YAML_CPP_BUILD_TOOLS OFF)
|
|
set(YAML_BUILD_SHARED_LIBS OFF)
|
|
set(BUILD_TESTING OFF)
|
|
option(YAML_CPP_INSTALL "" ON)
|
|
FetchContent_Declare(
|
|
yaml_cpp
|
|
GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git
|
|
GIT_TAG 0.8.0
|
|
)
|
|
FetchContent_MakeAvailable(yaml_cpp)
|
|
endblock()
|
|
set_property(DIRECTORY ${yaml_cpp_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL ON)
|
|
else()
|
|
find_package(yaml-cpp 0.8.0 REQUIRED)
|
|
endif()
|
|
target_link_libraries(rocroller PUBLIC yaml-cpp::yaml-cpp)
|
|
target_compile_definitions(rocroller PUBLIC ROCROLLER_USE_YAML_CPP)
|
|
endif()
|
|
|
|
target_compile_definitions(rocroller
|
|
PUBLIC
|
|
ROCROLLER_USE_HIP
|
|
__HIP_PLATFORM_AMD__
|
|
)
|
|
|
|
if(ROCROLLER_HAS_HIP_WORKGROUP_CLUSTERS)
|
|
target_compile_definitions(rocroller PUBLIC ROCROLLER_HAS_HIP_WORKGROUP_CLUSTERS)
|
|
endif()
|
|
|
|
if(ROCROLLER_ENABLE_LLVM)
|
|
llvm_map_components_to_libnames(llvm_yaml_libs objectyaml)
|
|
endif()
|
|
|
|
target_link_libraries(rocroller
|
|
PUBLIC
|
|
hip::host
|
|
PRIVATE
|
|
${msgpack_libs}
|
|
amd_comgr
|
|
)
|
|
|
|
if(ROCROLLER_ENABLE_LLVM)
|
|
# ROCROLLER_USE_LLVM enables the llvm yaml API
|
|
target_compile_definitions(rocroller PUBLIC ROCROLLER_USE_LLVM)
|
|
target_include_directories(rocroller PUBLIC "${LLVM_INCLUDE_DIRS}")
|
|
endif()
|
|
|
|
target_link_libraries(rocroller
|
|
PUBLIC
|
|
fmt::fmt-header-only
|
|
PRIVATE
|
|
$<BUILD_INTERFACE:spdlog::spdlog_header_only>
|
|
$<BUILD_INTERFACE:libdivide::libdivide>
|
|
${llvm_yaml_libs}
|
|
)
|
|
|
|
target_include_directories(rocroller
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib/include>
|
|
)
|
|
|
|
|
|
target_compile_features(rocroller PUBLIC cxx_std_20)
|
|
|
|
# Git hash
|
|
rocm_get_git_commit_tag(ROCROLLER_GIT_HASH)
|
|
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/lib/source/Utilities/Version.cpp.in"
|
|
"${PROJECT_BINARY_DIR}/rocRoller/src/Version.cpp"
|
|
)
|
|
target_sources(rocroller PRIVATE "${PROJECT_BINARY_DIR}/rocRoller/src/Version.cpp")
|
|
|
|
add_subdirectory(lib/source)
|
|
add_subdirectory(lib/include)
|
|
add_subdirectory(GPUArchitectureGenerator)
|
|
|
|
if(ROCROLLER_EMBED_ARCH_DEF)
|
|
target_link_libraries(rocroller PUBLIC $<BUILD_INTERFACE:rocroller::GPUArchitecture_def>)
|
|
target_compile_definitions(rocroller PRIVATE ROCROLLER_EMBED_ARCH_DEF)
|
|
endif()
|
|
|
|
if(ROCROLLER_BUILD_TESTING)
|
|
add_subdirectory(test)
|
|
endif()
|
|
|
|
if(ROCROLLER_ENABLE_CLIENT)
|
|
add_subdirectory(client)
|
|
endif()
|
|
|
|
rocm_install(
|
|
TARGETS rocroller rocroller-interface
|
|
EXPORT rocroller-targets
|
|
INCLUDE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/lib/include"
|
|
)
|
|
|
|
if(ROCROLLER_BUILD_TESTING OR BUILD_TESTING)
|
|
rocm_install(
|
|
TARGETS rocroller-tests
|
|
COMPONENT tests
|
|
)
|
|
if(ROCROLLER_ENABLE_CATCH)
|
|
rocm_install(
|
|
TARGETS rocroller-tests-catch
|
|
COMPONENT tests
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
rocm_export_targets(
|
|
TARGETS roc::rocroller roc::rocroller-interface
|
|
NAMESPACE roc::
|
|
EXPORT rocroller-targets
|
|
DEPENDS PACKAGE yaml-cpp
|
|
DEPENDS PACKAGE fmt
|
|
DEPENDS PACKAGE hip
|
|
)
|
|
|
|
if(ROCROLLER_ENABLE_DOCS)
|
|
add_subdirectory(docs)
|
|
endif()
|