Files
TheRock/rocm-libraries/shared/rocroller/test/CMakeLists.txt
T
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

290 lines
10 KiB
CMake

# Copyright Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
find_package(GTest QUIET)
if(NOT GTest_FOUND)
if(ROCROLLER_ENABLE_FETCH)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/release-1.12.1.zip
)
FetchContent_MakeAvailable(googletest)
else()
message(FATAL_ERROR "Failed to find googletest")
endif()
endif()
if(NOT ROCM_LIBS_SUPERBUILD)
if(ROCROLLER_ENABLE_THEROCK)
find_package(mxDataGenerator REQUIRED)
else()
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../../../shared/mxdatagenerator" "${CMAKE_CURRENT_BINARY_DIR}/mxdatagenerator")
endif()
endif()
add_executable(rocroller-tests)
if(ROCROLLER_ENABLE_CATCH AND (ROCROLLER_BUILD_TESTING OR BUILD_TESTING))
add_executable(rocroller-tests-catch)
if(ROCROLLER_ENABLE_ROCPROF_ANALYZER)
add_executable(rocroller-tests-rocprofiler)
endif()
# When detecting tests gtest and catch test discovery modules run
# something like:
# execute_process(COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests ${filter})
# where TEST_EXECUTABLE is rocroller-tests-catch and TEST_EXECUTOR
# is a command to prepend primarily for the purposes of running in
# a cross compiled environment. As such, we can set the CROSSCOMPILING_EMULATOR
# property on the test targets to use the cmake -E -env command providing
# the LD_PRELOAD and ASAN_OPTIONS variables necessary to run sanitizer builds.
# Note that the entries in the string are semicolon separated which is necessary
# to ensure that the command supplied to execute_process is interpreted as a list
# of strings rather than one white space delimited string.
if(ROCROLLER_ENABLE_ASAN)
rocroller_target_configure_sanitizers(rocroller-tests-catch PRIVATE)
set_target_properties(rocroller-tests-catch
PROPERTIES
CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND};-E;env;${asan_opts}"
)
if(ROCROLLER_ENABLE_ROCPROF_ANALYZER)
rocroller_target_configure_sanitizers(rocroller-tests-rocprofiler PRIVATE)
set_target_properties(rocroller-tests-rocprofiler
PROPERTIES
CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND};-E;env;${asan_opts}"
)
endif()
endif()
endif()
# Component stand-alone test
add_executable(component-test)
if(ROCROLLER_ENABLE_ASAN)
rocroller_target_configure_sanitizers(component-test PRIVATE)
set_target_properties(component-test
PROPERTIES
CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND};-E;env;${asan_opts}"
)
rocroller_target_configure_sanitizers(rocroller-tests PRIVATE)
set_target_properties(rocroller-tests
PROPERTIES
CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND};-E;env;${asan_opts}"
)
endif()
if(ROCROLLER_ENABLE_GEMM_CLIENT_TESTS)
find_package(Pytest REQUIRED) # requires pip install -r requirements.txt
pytest_discover_tests(
GEMMClientTests
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/client"
ENVIRONMENT "ROCROLLER_BUILD_DIR=${PROJECT_BINARY_DIR}" "LD_PRELOAD=${ASAN_LIB_PATH}" "ASAN_OPTIONS=detect_leaks=0"
)
endif()
add_executable(arch-gen-tests)
if(ROCROLLER_ENABLE_ASAN)
rocroller_target_configure_sanitizers(arch-gen-tests PRIVATE)
set_target_properties(arch-gen-tests
PROPERTIES
CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND};-E;env;${asan_opts}"
)
endif()
find_package(BLAS REQUIRED)
find_package(cblas)
find_package(OpenMP REQUIRED)
if(ROCROLLER_ENABLE_YAML_CPP)
target_compile_definitions(rocroller-tests PRIVATE ROCROLLER_TESTS_USE_YAML_CPP)
else()
target_compile_definitions(rocroller-tests PRIVATE ROCROLLER_USE_LLVM)
endif()
if(ROCROLLER_ENABLE_CATCH)
add_subdirectory(catch)
if(ROCROLLER_ENABLE_ROCPROF_ANALYZER)
add_subdirectory(rocprofiler)
endif()
endif()
add_subdirectory(common)
add_subdirectory(standalone)
add_subdirectory(unit)
if(ROCROLLER_ENABLE_TEST_DISCOVERY)
set(TEST_REPORT_DIR "${PROJECT_BINARY_DIR}/test_report")
include(GoogleTest)
gtest_discover_tests(
rocroller-tests
XML_OUTPUT_DIR ${TEST_REPORT_DIR}
TEST_FILTER "-*GPU_*"
DISCOVERY_MODE PRE_TEST
PROPERTIES
"LABELS" "GTEST"
"ENVIRONMENT" "${asan_opts}"
)
gtest_discover_tests(
rocroller-tests
XML_OUTPUT_DIR ${TEST_REPORT_DIR}
TEST_FILTER "*GPU_*"
PROPERTIES
"LABELS" "GPU"
"LABELS" "GTEST"
"ENVIRONMENT" "${asan_opts}"
DISCOVERY_MODE PRE_TEST
)
gtest_discover_tests(
arch-gen-tests
XML_OUTPUT_DIR ${TEST_REPORT_DIR}
DISCOVERY_MODE PRE_TEST
PROPERTIES
"LABELS" "GTEST"
"ENVIRONMENT" "${asan_opts}"
)
if(ROCROLLER_ENABLE_CATCH)
if(ROCROLLER_ENABLE_FETCH)
list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/extras")
else()
list(APPEND CMAKE_MODULE_PATH "${Catch2_DIR}")
endif()
include(Catch)
catch_discover_tests(
rocroller-tests-catch
REPORTER JUnit
OUTPUT_DIR ${TEST_REPORT_DIR}
OUTPUT_SUFFIX ".xml"
DISCOVERY_MODE PRE_TEST
EXTRA_ARGS "--reporter console::out=-::colour-mode=ansi"
TEST_SPEC "[gpu]"
PROPERTIES "LABELS" "CATCH"
"LABELS" "GPU"
"ENVIRONMENT" "${asan_opts}"
SKIP_REGULAR_EXPRESSION "[1-9][0-9]* skipped" "[1-9][0-9]* SKIPPED"
)
catch_discover_tests(
rocroller-tests-catch
REPORTER JUnit
OUTPUT_DIR ${TEST_REPORT_DIR}
OUTPUT_SUFFIX ".xml"
DISCOVERY_MODE PRE_TEST
EXTRA_ARGS "--reporter console::out=-::colour-mode=ansi"
TEST_SPEC "~[gpu]"
PROPERTIES "LABELS" "CATCH"
"ENVIRONMENT" "${asan_opts}"
SKIP_REGULAR_EXPRESSION "[1-9][0-9]* skipped" "[1-9][0-9]* SKIPPED"
)
if(ROCROLLER_ENABLE_ROCPROF_ANALYZER)
catch_discover_tests(
rocroller-tests-rocprofiler
REPORTER JUnit
OUTPUT_DIR ${TEST_REPORT_DIR}
OUTPUT_SUFFIX ".xml"
DISCOVERY_MODE PRE_TEST
EXTRA_ARGS "--reporter console::out=-::colour-mode=ansi"
PROPERTIES "LABELS" "ROCPROFILER"
"LABELS" "CATCH"
"LABELS" "GPU"
"ENVIRONMENT" "${asan_opts}"
SKIP_REGULAR_EXPRESSION "[1-9][0-9]* skipped" "[1-9][0-9]* SKIPPED"
)
endif()
endif()
if(NOT ROCROLLER_ENABLE_SLOW_TESTS)
set(PYTHON_TEST_SKIP "-m not slow")
endif()
add_test(
NAME PythonLint
COMMAND flake8
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/scripts"
)
set_tests_properties(
PythonLint
PROPERTIES ENVIRONMENT "ROCROLLER_BUILD_DIR=${PROJECT_BINARY_DIR}"
"LABELS" "PYTHON"
)
add_test(
NAME PythonTest
COMMAND
pytest -s --cov-report html:python_cov_html --cov=rrperf scripts
${PYTHON_TEST_SKIP} --junit-xml=${TEST_REPORT_DIR}/python_tests.xml
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
set_tests_properties(
PythonTest
PROPERTIES
ENVIRONMENT
"ROCROLLER_BUILD_DIR=${PROJECT_BINARY_DIR};PYTHONPATH=${PROJECT_SOURCE_DIR}/scripts/lib"
"LABELS" "PYTHON"
)
endif()
if(ROCROLLER_ENABLE_COVERAGE OR BUILD_CODE_COVERAGE)
target_compile_options(rocroller PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_options(rocroller PRIVATE -fprofile-instr-generate)
target_compile_options(common-test-utilities PRIVATE -fprofile-instr-generate -fcoverage-mapping)
if(ROCROLLER_ENABLE_ARCH_GEN_TEST)
target_compile_options(arch-gen-tests PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_options(arch-gen-tests PRIVATE -fprofile-instr-generate)
endif()
target_compile_options(rocroller-tests PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_options(rocroller-tests PRIVATE -fprofile-instr-generate)
target_compile_options(rocroller-tests-catch PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_options(rocroller-tests-catch PRIVATE -fprofile-instr-generate)
if(ROCROLLER_ENABLE_ROCPROF_ANALYZER)
target_compile_options(rocroller-tests-rocprofiler PRIVATE -fprofile-instr-generate -fcoverage-mapping)
target_link_options(rocroller-tests-rocprofiler PRIVATE -fprofile-instr-generate)
endif()
endif()
# Create install-time test file for distribution
set(INSTALL_TEST_FILE "${CMAKE_CURRENT_BINARY_DIR}/install_CTestTestfile.cmake")
file(WRITE "${INSTALL_TEST_FILE}"
[=[
# This is a test file generated by rocRoller for install time.
# Tests are defined with relative paths to work in the installed location.
]=]
)
set(_test_categories_yaml "${CMAKE_CURRENT_SOURCE_DIR}/test_categories.yaml")
include(${ROCM_LIBRARIES_ROOT}/shared/ctest/TestCategories.cmake OPTIONAL)
set(_test_categories_catch2_yaml "${CMAKE_CURRENT_SOURCE_DIR}/test_categories_catch2.yaml")
if(COMMAND apply_test_category_labels)
if(EXISTS "${_test_categories_yaml}")
message(STATUS "YAML-based test categorization")
apply_test_category_labels("rocroller-tests" "${_test_categories_yaml}" "${PROJECT_BINARY_DIR}" "${INSTALL_TEST_FILE}")
else()
message(STATUS "No test categorization (YAML missing)")
endif()
else()
message(STATUS "Test categorization not available (TestCategories.cmake not found)")
endif()
if(COMMAND apply_catch2_test_category_labels)
if(EXISTS "${_test_categories_catch2_yaml}")
message(STATUS "YAML-based Catch2 test categorization")
apply_catch2_test_category_labels("rocroller-tests-catch" "${_test_categories_catch2_yaml}" "${PROJECT_BINARY_DIR}" "${INSTALL_TEST_FILE}")
else()
message(STATUS "No Catch2 test categorization (YAML missing)")
endif()
else()
message(STATUS "Catch2 test categorization not available (TestCategories.cmake not found)")
endif()
install(
FILES "${INSTALL_TEST_FILE}"
DESTINATION "${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}"
COMPONENT tests
RENAME "CTestTestfile.cmake"
)