2018-07-23 14:45:44 -04:00
#
# Copyright (C) 2018 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.
#
#
2018-07-30 16:08:33 -04:00
# If environment variable DRM_DIR or LIBHSAKMT_PATH is set, the script
2018-07-23 14:45:44 -04:00
# will pick up the corresponding libraries from those pathes.
2020-10-27 12:15:16 -04:00
cmake_minimum_required ( VERSION 3.5 FATAL_ERROR )
2018-07-23 14:45:44 -04:00
project ( KFDTest )
2020-01-20 10:06:27 -05:00
# For DEB/RPM generation
2022-08-26 18:26:55 -05:00
set ( CPACK_PACKAGE_NAME "kfdtest" )
2020-01-20 10:06:27 -05:00
set ( CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc." )
set ( CPACK_PACKAGE_DESCRIPTION "This package includes kfdtest, the list of excluded tests for each ASIC, and a convenience script to run the test suite" )
set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Test suite for ROCK/KFD" )
2022-05-03 11:06:25 -04:00
# Make proper version for appending
# Default Value is 99999, setting it first
set ( ROCM_VERSION_FOR_PACKAGE "99999" )
if ( DEFINED ENV{ROCM_LIBPATCH_VERSION} )
set ( ROCM_VERSION_FOR_PACKAGE $ENV{ ROCM_LIBPATCH_VERSION } )
endif ()
2020-01-20 10:06:27 -05:00
set ( CPACK_PACKAGE_VERSION_MAJOR "1" )
set ( CPACK_PACKAGE_VERSION_MINOR "0" )
set ( CPACK_PACKAGE_VERSION_PATCH "0" )
2025-04-29 17:55:52 -04:00
set ( CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/ROCm/ROCR-Runtime/" )
2022-05-03 11:06:25 -04:00
set ( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" )
set ( CPACK_RPM_FILE_NAME "RPM-DEFAULT" )
2022-08-26 18:26:55 -05:00
## Debian package values
set ( CPACK_DEBIAN_PACKAGE_RELEASE "local" )
if ( DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE} )
set ( CPACK_DEBIAN_PACKAGE_RELEASE $ENV{ CPACK_DEBIAN_PACKAGE_RELEASE } )
endif ()
## RPM package variables
set ( CPACK_RPM_PACKAGE_RELEASE "local" )
if ( DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE} )
set ( CPACK_RPM_PACKAGE_RELEASE $ENV{ CPACK_RPM_PACKAGE_RELEASE } )
endif ()
2023-01-22 23:54:22 -08:00
## Note: rpm --eval %{?dist} will evaluate to NULL in Debian
## So Debian distros won't append dist tag to CPACK_RPM_PACKAGE_RELEASE.
## Also for debian package name , the dist tag is added from build env
execute_process ( COMMAND rpm --eval %{?dist}
RESULT_VARIABLE PROC_RESULT
OUTPUT_VARIABLE EVAL_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE )
message ( "RESULT_VARIABLE ${PROC_RESULT} OUTPUT_VARIABLE: ${EVAL_RESULT}" )
## Add distribution tag to rpm package name
if ( PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "" )
string ( APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}" )
endif ()
2022-05-03 11:06:25 -04:00
set ( PACKAGE_VERSION_STR "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}" )
set ( CPACK_PACKAGE_VERSION "${PACKAGE_VERSION_STR}" )
2020-04-26 18:17:32 -04:00
## Define default variable and variables for the optional build target hsakmt-dev
set ( SOURCE_DIR ${ CMAKE_CURRENT_SOURCE_DIR } CACHE STRING "Location of hsakmt source code." )
set ( CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE STRING "Default installation directory." )
set ( CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Default packaging prefix." )
set ( CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators." )
# Debian package specific variables
2025-04-29 17:55:52 -04:00
set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/ROCm/ROCR-Runtime/" )
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core" )
2021-07-05 23:01:10 +00:00
# RPM package specific variables
set ( CPACK_RPM_PACKAGE_REQUIRES "rocm-core" )
2020-04-26 18:17:32 -04:00
2018-07-23 14:45:44 -04:00
#set ( CMAKE_VERBOSE_MAKEFILE on )
find_package ( PkgConfig )
2023-04-05 13:49:01 -04:00
list ( PREPEND CMAKE_PREFIX_PATH "${DRM_DIR}" )
2018-07-23 14:45:44 -04:00
# The module name passed to pkg_check_modules() is determined by the
# name of file *.pc
2023-04-05 13:49:01 -04:00
pkg_check_modules ( DRM REQUIRED libdrm )
pkg_check_modules ( DRM_AMDGPU REQUIRED libdrm_amdgpu )
include_directories ( ${ DRM_AMDGPU_INCLUDE_DIRS } )
2018-07-23 14:45:44 -04:00
2018-07-30 16:08:33 -04:00
if ( DEFINED ENV{LIBHSAKMT_PATH} )
set ( LIBHSAKMT_PATH $ENV{ LIBHSAKMT_PATH } )
message ( "LIBHSAKMT_PATH environment variable is set" )
2018-07-23 14:45:44 -04:00
else ()
2019-09-17 18:11:50 -04:00
if ( ${ ROCM_INSTALL_PATH } )
2020-04-26 18:21:01 -04:00
set ( ENV{PKG_CONFIG_PATH} ${ ROCM_INSTALL_PATH } /share/pkgconfig )
2019-09-17 18:11:50 -04:00
else ()
2020-04-26 18:21:01 -04:00
set ( ENV{PKG_CONFIG_PATH} /opt/rocm/share/pkgconfig )
2019-09-17 18:11:50 -04:00
endif ()
2020-04-26 18:21:01 -04:00
pkg_check_modules ( HSAKMT libhsakmt )
2018-07-23 14:45:44 -04:00
if ( NOT HSAKMT_FOUND )
2019-09-17 18:11:50 -04:00
set ( LIBHSAKMT_PATH $ENV{ OUT_DIR } )
2018-07-23 14:45:44 -04:00
endif ()
endif ()
2018-07-30 16:08:33 -04:00
if ( DEFINED LIBHSAKMT_PATH )
2024-10-08 12:32:30 -04:00
set ( HSAKMT_LIBRARY_DIRS ${ LIBHSAKMT_PATH } )
2018-07-23 14:45:44 -04:00
set ( HSAKMT_LIBRARIES hsakmt )
endif ()
2018-07-30 16:08:33 -04:00
message ( "Find libhsakmt at ${HSAKMT_LIBRARY_DIRS}" )
2018-07-23 14:45:44 -04:00
2021-09-24 18:44:29 -04:00
if ( POLICY CMP0074 )
cmake_policy ( SET CMP0074 NEW )
endif ()
find_path ( LIGHTNING_CMAKE_DIR NAMES LLVMConfig.cmake
PATHS $ENV{ OUT_DIR } /llvm/lib/cmake/llvm NO_CACHE NO_DEFAULT_PATH )
if ( DEFINED LIGHTNING_CMAKE_DIR AND EXISTS ${ LIGHTNING_CMAKE_DIR } )
set ( LLVM_DIR ${ LIGHTNING_CMAKE_DIR } )
else ()
2022-05-11 13:39:49 -04:00
message ( STATUS "Couldn't find Lightning build in compute directory. "
"Searching LLVM_DIR then defaulting to system LLVM install if still not found..." )
2021-09-24 18:44:29 -04:00
endif ()
find_package ( LLVM REQUIRED CONFIG )
if ( ${ LLVM_PACKAGE_VERSION } VERSION_LESS "7.0" )
message ( FATAL_ERROR "Requires LLVM 7.0 or greater "
"(found ${LLVM_PACKAGE_VERSION})" )
elseif ( ${ LLVM_PACKAGE_VERSION } VERSION_LESS "14.0" )
message ( WARNING "Not using latest LLVM version. "
"Some ASIC targets may not work!" )
endif ()
message ( STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}" )
message ( STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}" )
include_directories ( ${ LLVM_INCLUDE_DIRS } )
separate_arguments ( LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${ LLVM_DEFINITIONS } )
add_definitions ( ${ LLVM_DEFINITIONS_LIST } )
2024-04-30 13:35:08 +08:00
if ( LLVM_LINK_LLVM_DYLIB )
set ( llvm_libs LLVM )
else ()
llvm_map_components_to_libnames ( llvm_libs AMDGPUAsmParser Core Support )
endif ()
2021-09-24 18:44:29 -04:00
2018-07-23 14:45:44 -04:00
include_directories ( ${ PROJECT_SOURCE_DIR } /gtest-1.6.0 )
include_directories ( ${ PROJECT_SOURCE_DIR } /include )
2019-08-20 17:21:30 -04:00
include_directories ( ${ PROJECT_SOURCE_DIR } /../../include )
2023-05-02 15:49:46 -04:00
include_directories ( ${ PROJECT_SOURCE_DIR } /../../libhsakmt/include )
2018-07-23 14:45:44 -04:00
include_directories ( ${ DRM_INCLUDE_DIRS } )
2020-01-22 14:34:46 -05:00
set ( SRC_FILES gtest-1.6.0/gtest-all.cpp
src/AqlQueue.cpp
src/BasePacket.cpp
2022-03-21 12:35:01 -04:00
src/BaseDebug.cpp
2020-01-22 14:34:46 -05:00
src/BaseQueue.cpp
src/Dispatch.cpp
src/GoogleTestExtension.cpp
src/IndirectBuffer.cpp
2021-09-24 18:44:29 -04:00
src/Assemble.cpp
2021-11-02 13:45:08 -04:00
src/ShaderStore.cpp
2020-01-22 14:34:46 -05:00
src/LinuxOSWrapper.cpp
src/PM4Packet.cpp
src/PM4Queue.cpp
src/RDMAUtil.cpp
src/SDMAPacket.cpp
src/SDMAQueue.cpp
src/KFDBaseComponentTest.cpp
src/KFDMultiProcessTest.cpp
src/KFDTestMain.cpp
src/KFDTestUtil.cpp
src/KFDTestUtilQueue.cpp
src/KFDOpenCloseKFDTest.cpp
src/KFDTopologyTest.cpp
src/KFDMemoryTest.cpp
src/KFDLocalMemoryTest.cpp
src/KFDEventTest.cpp
src/KFDQMTest.cpp
src/KFDCWSRTest.cpp
src/KFDExceptionTest.cpp
src/KFDGraphicsInterop.cpp
src/KFDPerfCounters.cpp
2022-04-13 16:09:35 -04:00
src/KFDDBGTest.cpp
2020-01-22 14:34:46 -05:00
src/KFDGWSTest.cpp
src/KFDIPCTest.cpp
2022-03-09 10:47:27 -05:00
src/KFDASMTest.cpp
2020-01-22 14:34:46 -05:00
src/KFDEvictTest.cpp
src/KFDHWSTest.cpp
src/KFDPerformanceTest.cpp
src/KFDPMTest.cpp
2021-03-19 16:10:16 -04:00
src/KFDSVMRangeTest.cpp
src/KFDSVMEvictTest.cpp
2020-01-22 14:34:46 -05:00
src/KFDRASTest.cpp
2023-07-21 23:02:00 -04:00
src/KFDPCSamplingTest.cpp
2024-08-20 12:08:01 -04:00
src/KFDNegativeTest.cpp
2020-01-22 14:34:46 -05:00
src/RDMATest.cpp )
2018-07-23 14:45:44 -04:00
message ( STATUS "PROJECT_SOURCE_DIR:" ${ PROJECT_SOURCE_DIR } )
#message( STATUS "SRC_FILES: ")
#foreach(file ${SRC_FILES})
# message(STATUS "${file}")
#endforeach()
#add_definitions(-Wall -std=c++11)
if ( "${CMAKE_C_COMPILER_VERSION}" STRGREATER "4.8.0" )
2019-09-22 22:28:40 -07:00
## Add --enable-new-dtags to generate DT_RUNPATH
2024-10-17 14:10:54 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17 -Wl,--enable-new-dtags" )
2018-07-23 14:45:44 -04:00
endif ()
if ( "${CMAKE_BUILD_TYPE}" STREQUAL Release )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2" )
else ()
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g" )
endif ()
2020-11-02 06:30:51 -05:00
## Address Sanitize Flag
if ( ${ ADDRESS_SANITIZER } )
2020-11-03 09:24:14 -05:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address" )
2020-11-02 06:30:51 -05:00
set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address )
endif ()
2018-07-23 14:45:44 -04:00
# link_directories() has to be put before add_executable()
# The modules found by pkg_check_modules() in the default pkg config
# path do not need to use link_directories() here.
link_directories ( ${ HSAKMT_LIBRARY_DIRS } )
add_executable ( kfdtest ${ SRC_FILES } )
2021-10-08 14:50:04 -04:00
target_link_libraries ( kfdtest ${ HSAKMT_LIBRARIES } ${ DRM_LDFLAGS } ${ DRM_AMDGPU_LDFLAGS } ${ llvm_libs } pthread m stdc++ rt numa )
2018-07-23 14:45:44 -04:00
2018-07-23 21:32:55 -04:00
configure_file ( scripts/kfdtest.exclude kfdtest.exclude COPYONLY )
configure_file ( scripts/run_kfdtest.sh run_kfdtest.sh COPYONLY )
2020-01-20 10:06:27 -05:00
2024-08-29 21:26:25 -04:00
install ( PROGRAMS ${ CMAKE_CURRENT_BINARY_DIR } /kfdtest ${ CMAKE_CURRENT_BINARY_DIR } /run_kfdtest.sh
2020-01-20 10:06:27 -05:00
DESTINATION bin )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /kfdtest.exclude
DESTINATION share/kfdtest )
2021-07-05 23:01:10 +00:00
# Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake
if ( NOT ROCM_DEP_ROCMCORE )
string ( REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${ CPACK_RPM_PACKAGE_REQUIRES } )
string ( REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${ CPACK_DEBIAN_PACKAGE_DEPENDS } )
endif ()
2020-01-20 10:06:27 -05:00
include ( CPack )