Files
TheRock/rocm-libraries/projects/rocalution/clients/tests/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

237 lines
8.6 KiB
CMake

# ########################################################################
# Copyright (C) 2018-2026 Advanced Micro Devices, Inc. All rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# ########################################################################
# Optional: CTest test categorization when building in rocm-libraries with shared/ctest.
# Skipped when shared/ is not present (e.g. standalone rocalution or sparse checkout in CI).
if(DEFINED ROCM_LIBRARIES_ROOT AND EXISTS "${ROCM_LIBRARIES_ROOT}/shared/ctest/TestCategories.cmake")
include("${ROCM_LIBRARIES_ROOT}/shared/ctest/TestCategories.cmake")
set(ROCALUTION_HAS_CTEST_CATEGORIES ON)
endif()
# Find google test and its dependencies
find_package(GTest REQUIRED)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# Non MPI tests
set(ROCALUTION_TEST_SOURCES
rocalution_host_gtest_main.cpp
# Direct solvers
test_qr.cpp
test_lu.cpp
test_inversion.cpp
# Krylov solvers
test_backend.cpp
test_bicgstab.cpp
test_bicgstabl.cpp
test_cg.cpp
test_cr.cpp
test_fcg.cpp
test_fgmres.cpp
test_gmres.cpp
test_idr.cpp
test_qmrcgstab.cpp
# AMG
test_pairwise_amg.cpp
test_ruge_stueben_amg.cpp
test_saamg.cpp
test_uaamg.cpp
# Other tests
test_preconditioner.cpp
test_itersolver.cpp
test_chebyshev.cpp
test_mixed_precision.cpp
)
if(NOT WIN32)
# Local structures - skip on Windows, as google test does not support union for death tests
list(APPEND ROCALUTION_TEST_SOURCES
test_local_matrix.cpp
test_local_matrix_multicoloring.cpp
test_local_matrix_itsolve.cpp
test_local_matrix_solve.cpp
test_local_stencil.cpp
test_local_vector.cpp
)
endif()
# MPI tests
if(SUPPORT_MPI)
list(APPEND ROCALUTION_TEST_SOURCES
test_global_matrix.cpp
# test_global_stencil.cpp
test_global_vector.cpp
test_parallel_manager.cpp
)
endif()
# Common
list(APPEND ROCALUTION_TEST_SOURCES
../include/random.cpp
)
add_executable(rocalution-test ${ROCALUTION_TEST_SOURCES} ${ROCALUTION_CLIENTS_COMMON})
# Google test
target_compile_definitions(rocalution-test PRIVATE GOOGLE_TEST)
target_link_libraries(rocalution-test PRIVATE GTest::gtest Threads::Threads)
# Include common client headers
target_include_directories(rocalution-test PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)
# Link rocALUTION library
target_link_libraries(rocalution-test PRIVATE roc::rocalution)
if(NOT TARGET rocalution)
set_target_properties(rocalution-test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/staging")
else()
set_target_properties(rocalution-test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/clients/staging")
endif()
rocm_install(TARGETS rocalution-test COMPONENT tests)
# ---------------------------------------------------------------------------
# CTest categorization via test_categories.yaml
# Only active when building in the full rocm-libraries tree (ROCM_LIBRARIES_ROOT
# is defined and shared/ctest/TestCategories.cmake exists).
#
# rocALUTION does not use GTest category prefixes; all categories use "*" as
# the test pattern. Test subset selection is done via environment variables
# set below after the YAML-driven suites are generated:
#
# quick / ffm-quick / ffm-full -> ROCALUTION_EMULATION_SMOKE=1
# standard -> ROCALUTION_EMULATION_REGRESSION=1
# comprehensive -> ROCALUTION_EMULATION_EXTENDED=1
# full -> (no env var — full parameter sweep)
# ---------------------------------------------------------------------------
set(ROCALUTION_CTEST_INSTALL_FILE "")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test_categories.yaml")
if(ROCALUTION_HAS_CTEST_CATEGORIES)
enable_testing()
message(STATUS "rocALUTION: YAML-based test categorization")
# Determine staging directory (mirrors the binary output path above)
if(NOT TARGET rocalution)
set(ROCALUTION_STAGING_DIR "${PROJECT_BINARY_DIR}/staging")
else()
set(ROCALUTION_STAGING_DIR "${PROJECT_BINARY_DIR}/clients/staging")
endif()
file(MAKE_DIRECTORY "${ROCALUTION_STAGING_DIR}")
# Install-time CTestTestfile for TheRock
set(ROCALUTION_CTEST_INSTALL_FILE "${CMAKE_CURRENT_BINARY_DIR}/install_CTestTestfile.cmake")
file(WRITE "${ROCALUTION_CTEST_INSTALL_FILE}"
[=[
# This is a test file generated by rocALUTION for install time.
# Tests are defined with relative paths to work in the installed location.
]=]
)
apply_test_category_labels(
rocalution-test
"${CMAKE_CURRENT_SOURCE_DIR}/test_categories.yaml"
"${ROCALUTION_STAGING_DIR}"
"${ROCALUTION_CTEST_INSTALL_FILE}"
)
# Set per-suite ROCALUTION_EMULATION_* env vars.
# The YAML uses test_patterns: ["*"] for most suites; the env var drives
# which parameter sets actually execute inside the test binary.
# ffm-quick and ffm-full use an explicit GTest filter (single CG test) instead,
# so they do not need an emulation env var.
# We also append these to the install-time file because the Python parser
# that generates it has no knowledge of our post-hoc set_tests_properties().
if(TEST rocalution-test_quick_suite)
set_tests_properties(rocalution-test_quick_suite PROPERTIES
ENVIRONMENT "ROCALUTION_EMULATION_SMOKE=1"
)
if(ROCALUTION_CTEST_INSTALL_FILE)
file(APPEND "${ROCALUTION_CTEST_INSTALL_FILE}"
"set_tests_properties(rocalution-test_quick_suite PROPERTIES ENVIRONMENT \"ROCALUTION_EMULATION_SMOKE=1\")\n"
)
endif()
endif()
if(TEST rocalution-test_standard_suite)
set_tests_properties(rocalution-test_standard_suite PROPERTIES
ENVIRONMENT "ROCALUTION_EMULATION_REGRESSION=1"
)
if(ROCALUTION_CTEST_INSTALL_FILE)
file(APPEND "${ROCALUTION_CTEST_INSTALL_FILE}"
"set_tests_properties(rocalution-test_standard_suite PROPERTIES ENVIRONMENT \"ROCALUTION_EMULATION_REGRESSION=1\")\n"
)
endif()
endif()
if(TEST rocalution-test_comprehensive_suite)
set_tests_properties(rocalution-test_comprehensive_suite PROPERTIES
ENVIRONMENT "ROCALUTION_EMULATION_EXTENDED=1"
)
if(ROCALUTION_CTEST_INSTALL_FILE)
file(APPEND "${ROCALUTION_CTEST_INSTALL_FILE}"
"set_tests_properties(rocalution-test_comprehensive_suite PROPERTIES ENVIRONMENT \"ROCALUTION_EMULATION_EXTENDED=1\")\n"
)
endif()
endif()
# rocalution-test_full_suite intentionally has no env var (runs everything).
else()
message(STATUS "rocALUTION: shared/ctest not found (e.g. standalone checkout), skipping CTest categories")
# Fall back to a single unlabelled CTest entry
add_test(rocalution-test rocalution-test)
endif()
else()
message(STATUS "rocALUTION: No test_categories.yaml (CTest categories not used)")
add_test(rocalution-test rocalution-test)
endif()
# Install CTestTestfile.cmake to bin/rocalution/ for TheRock
if(ROCALUTION_CTEST_INSTALL_FILE)
rocm_install(
FILES "${ROCALUTION_CTEST_INSTALL_FILE}"
DESTINATION "${CMAKE_INSTALL_BINDIR}/rocalution"
COMPONENT tests
RENAME "CTestTestfile.cmake"
)
endif()
if(WIN32)
# for now adding in all .dll as dependency chain is not cmake based on win32
file(GLOB third_party_dlls
LIST_DIRECTORIES OFF
CONFIGURE_DEPENDS
${HIP_DIR}/bin/*.dll
${HIP_DIR}/bin/hipinfo.exe
${CMAKE_SOURCE_DIR}/rtest.*
$ENV{rocsparse_DIR}/bin/*.dll
$ENV{rocrand_DIR}/bin/*.dll
$ENV{rocblas_DIR}/bin/*.dll
C:/Windows/System32/libomp140*.dll
)
foreach(file_i ${third_party_dlls})
add_custom_command(TARGET rocalution-test POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy ${file_i} ${PROJECT_BINARY_DIR}/staging/ COMMENT "Copying ${file_i} to staging")
endforeach(file_i)
endif()