diff --git a/projects/rocwmma/CMakeLists.txt b/projects/rocwmma/CMakeLists.txt index 84cb179edbe..2af3a278658 100644 --- a/projects/rocwmma/CMakeLists.txt +++ b/projects/rocwmma/CMakeLists.txt @@ -27,6 +27,14 @@ cmake_minimum_required( VERSION 3.14 ) message(STATUS "CMake version: ${CMAKE_VERSION}") +if(NOT WIN32) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(STATUS "The CMake generator is Ninja.") + else() + message(WARNING "The CMake generator is not Ninja. Ninja is preferred over Make.") + endif() +endif() + # This has to be initialized before the project() command appears # Set the default of CMAKE_BUILD_TYPE to be release, unless user specifies with -D. MSVC_IDE does not use CMAKE_BUILD_TYPE if( NOT DEFINED CMAKE_CONFIGURATION_TYPES AND NOT DEFINED CMAKE_BUILD_TYPE ) @@ -43,7 +51,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) #Set Clang C++ flags. -set(CMAKE_CXX_FLAGS_DEBUG "-g -O2") # clang++ crashes without -O2 +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O2") # clang++ crashes without -O2 set(CMAKE_CXX_FLAGS_MINSIZEREL "-O2 -DNDEBUG") # clang++ failed to build the project with the default -Os set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --driver-mode=g++ -Xclang -fallow-half-arguments-and-returns -D__HIP_HCC_COMPAT_MODE__=1 -Wno-format-nonliteral -parallel-jobs=4 -fclang-abi-compat=17") @@ -190,6 +198,11 @@ rocm_package_add_deb_dependencies("libomp-dev") rocm_package_add_rpm_dependencies("libomp-devel") set(CPACK_RPM_PACKAGE_LICENSE "MIT") +rocm_export_targets( + TARGETS roc::rocwmma + NAMESPACE roc:: +) + rocm_create_package( NAME rocwmma DESCRIPTION "AMD GPU C++ library for GEMM primitives using MFMA and WMMA matrix instructions" diff --git a/projects/rocwmma/samples/CMakeLists.txt b/projects/rocwmma/samples/CMakeLists.txt index 4f864343550..982fbcd2649 100644 --- a/projects/rocwmma/samples/CMakeLists.txt +++ b/projects/rocwmma/samples/CMakeLists.txt @@ -34,7 +34,7 @@ endif() # Custom target to build all rocWMMA samples add_custom_target(rocwmma_samples) -# Regular gtests that don't require any special +# Regular binaries that don't require any special # designation for validation or benchmarking function(add_rocwmma_sample TEST_TARGET TEST_SOURCE) diff --git a/projects/rocwmma/test/CMakeLists.txt b/projects/rocwmma/test/CMakeLists.txt index 530884c4278..c90470eb131 100644 --- a/projects/rocwmma/test/CMakeLists.txt +++ b/projects/rocwmma/test/CMakeLists.txt @@ -40,33 +40,38 @@ add_link_options(-mcmodel=large) # Test/benchmark requires additional dependencies if(ROCWMMA_USE_SYSTEM_GOOGLETEST) - find_package(GTest 1.12.1 REQUIRED) + find_package(GTest 1.16.0 REQUIRED) else() include( FetchContent ) + # Suppress ROCMChecks WARNING on GoogleTest + set(ROCM_DISABLE_CHECKS FALSE) + macro(rocm_check_toolchain_var var access value list_file) + if(NOT ROCM_DISABLE_CHECKS) + _rocm_check_toolchain_var("${var}" "${access}" "${value}" "${list_file}") + endif() + endmacro() + FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.1 + GIT_TAG v1.16.0 ) - FetchContent_GetProperties(googletest) - if(NOT googletest_POPULATED) - # Fetch the content using default details - FetchContent_Populate(googletest) - # Save the shared libs setting, then force to static libs - set(BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS}) - set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Build SHARED libraries" FORCE) + # Turn off gtest installation + set(INSTALL_GTEST OFF) - # Turn off gtest installation - set(INSTALL_GTEST OFF) + # Save the shared libs setting, then force to static libs + set(BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS}) + set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Build SHARED libraries" FORCE) - # Add gtest targets as static libs - add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) + # Fetch the content using default details + set(ROCM_DISABLE_CHECKS TRUE) + FetchContent_MakeAvailable(googletest) + set(ROCM_DISABLE_CHECKS FALSE) - # Restore shared libs setting - set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_OLD} CACHE INTERNAL "Build SHARED libraries" FORCE) - endif() + # Restore shared libs setting + set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_OLD} CACHE INTERNAL "Build SHARED libraries" FORCE) endif() set(ROCWMMA_TEST_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) @@ -80,6 +85,21 @@ file(WRITE "${INSTALL_TEST_FILE}" # It differs slightly from the default testfile, and you may encounter issues because of that. ]=] ) +set(INSTALL_SMOKE_TEST_FILE "${CMAKE_CURRENT_BINARY_DIR}/install_smoke_CTestTestfile.cmake") +file(WRITE "${INSTALL_SMOKE_TEST_FILE}" +[=[ +# This is a test file generated by rocWMMA for install time. +# It differs slightly from the default testfile, and you may encounter issues because of that. +]=] +) +set(INSTALL_REGRESSION_TEST_FILE "${CMAKE_CURRENT_BINARY_DIR}/install_regression_CTestTestfile.cmake") +file(WRITE "${INSTALL_REGRESSION_TEST_FILE}" +[=[ +# This is a test file generated by rocWMMA for install time. +# It differs slightly from the default testfile, and you may encounter issues because of that. +]=] +) + # Regular gtests that don't require any special # designation for validation or benchmarking @@ -87,10 +107,10 @@ function(add_rocwmma_test TEST_TARGET TEST_SOURCE) list(APPEND TEST_SOURCE ${ARGN}) add_executable(${TEST_TARGET} ${TEST_SOURCE}) - target_link_libraries(${TEST_TARGET} rocwmma gtest) + target_link_libraries(${TEST_TARGET} rocwmma GTest::gtest) target_link_libraries(${TEST_TARGET} OpenMP::OpenMP_CXX "-L${HIP_CLANG_ROOT}/lib") if(UNIX) - target_link_libraries(${TEST_TARGET} "-Wl,-rpath=$ORIGIN/../llvm/lib" "-fno-rtlib-add-rpath") + target_link_libraries(${TEST_TARGET} "-Wl,-rpath='\$$ORIGIN/../llvm/lib'" "-fno-rtlib-add-rpath") endif() target_include_directories(${TEST_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} @@ -139,6 +159,12 @@ function(add_rocwmma_test TEST_TARGET TEST_SOURCE) endif() file(APPEND "${INSTALL_TEST_FILE}" "add_test(${TEST_TARGET} \"../${EXE_NAME}\")\n") file(APPEND "${INSTALL_TEST_FILE}" "set_tests_properties(${TEST_TARGET} PROPERTIES SKIP_REGULAR_EXPRESSION \"no ROCm-capable device;unsupported host device\")\n") + + file(APPEND "${INSTALL_SMOKE_TEST_FILE}" "add_test(\"${TEST_TARGET} smoke\" \"../../${EXE_NAME}\" --emulation smoke)\n") + file(APPEND "${INSTALL_SMOKE_TEST_FILE}" "set_tests_properties(\"${TEST_TARGET} smoke\" PROPERTIES SKIP_REGULAR_EXPRESSION \"no ROCm-capable device;unsupported host device\")\n") + + file(APPEND "${INSTALL_REGRESSION_TEST_FILE}" "add_test(\"${TEST_TARGET} regression\" \"../../${EXE_NAME}\" --emulation regression)\n") + file(APPEND "${INSTALL_REGRESSION_TEST_FILE}" "set_tests_properties(\"${TEST_TARGET} regression\" PROPERTIES SKIP_REGULAR_EXPRESSION \"no ROCm-capable device;unsupported host device\")\n") endfunction() # Targets that implement specifically validation configuration @@ -165,3 +191,15 @@ rocm_install( COMPONENT tests RENAME "CTestTestfile.cmake" ) +rocm_install( + FILES "${INSTALL_SMOKE_TEST_FILE}" + DESTINATION "${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}/smoke" + COMPONENT tests + RENAME "CTestTestfile.cmake" +) +rocm_install( + FILES "${INSTALL_REGRESSION_TEST_FILE}" + DESTINATION "${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}/regression" + COMPONENT tests + RENAME "CTestTestfile.cmake" +) diff --git a/projects/rocwmma/test/gemm/CMakeLists.txt b/projects/rocwmma/test/gemm/CMakeLists.txt index 81f99984c83..3534683ad80 100644 --- a/projects/rocwmma/test/gemm/CMakeLists.txt +++ b/projects/rocwmma/test/gemm/CMakeLists.txt @@ -29,8 +29,8 @@ include( CMakeDependentOption ) cmake_dependent_option( ROCWMMA_VALIDATE_WITH_ROCBLAS "Use rocBLAS for validation" ON "ROCWMMA_BUILD_VALIDATION_TESTS" OFF ) cmake_dependent_option( ROCWMMA_BENCHMARK_WITH_ROCBLAS "Include rocBLAS benchmark performance comparisons" OFF "ROCWMMA_BUILD_BENCHMARK_TESTS" OFF ) -set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time") -set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CMAKE_COMMAND} -E time") +set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "\"${CMAKE_COMMAND}\" -E time") +set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "\"${CMAKE_COMMAND}\" -E time") if(ROCWMMA_VALIDATE_WITH_ROCBLAS OR ROCWMMA_BENCHMARK_WITH_ROCBLAS) find_package( rocblas REQUIRED PATHS /opt/rocm /opt/rocm/rocblas $ENV{ROCBLAS_DIR} )