%global upstreamname ROCmValidationSuite %global rocm_release 6.0 %global rocm_patch 2 %global rocm_version %{rocm_release}.%{rocm_patch} %global toolchain rocm # hipcc does not support some clang flags %global build_cxxflags %(echo %{optflags} | sed -e 's/-fcf-protection//' -e 's/-fcf-protection//' -e 's/-ffat-lto-objects//') # $gpu will be evaluated in the loops below %global _vpath_builddir %{_vendor}-%{_target_os}-build-${gpu} Name: rocm-validation-suite Version: %{rocm_version} Release: %autorelease Summary: ROCm Validation Suite (rvs) Url: https://github.com/ROCm/ROCmValidationSuite License: MIT Source0: %{url}/archive/rocm-%{version}.tar.gz#/%{upstreamname}-%{version}.tar.gz BuildRequires: cmake BuildRequires: ninja-build BuildRequires: pciutils-devel BuildRequires: rocblas-devel BuildRequires: rocm-cmake BuildRequires: rocm-comgr-devel BuildRequires: rocm-hip-devel BuildRequires: rocm-rpm-macros BuildRequires: rocm-rpm-macros-modules BuildRequires: rocm-runtime-devel BuildRequires: rocm-smi-devel BuildRequires: yaml-cpp-devel Requires: rocm-rpm-macros-modules ExclusiveArch: x86_64 %description The ROCm Validation Suite (RVS) is a system validation and diagnostics tool for monitoring, stress testing, detecting and troubleshooting issues that affects the functionality and performance of AMD GPU(s) operating in a high-performance/AI/ML computing environment. RVS is enabled using the ROCm software stack on a compatible software and hardware platform. %package test Summary: ROCm Validation Suite %description test The ROCm Validation Suite (RVS) is a system validation and diagnostics tool for monitoring, stress testing, detecting and troubleshooting issues that affects the functionality and performance of AMD GPU(s) operating in a high-performance/AI/ML computing environment. RVS is enabled using the ROCm software stack on a compatible software and hardware platform. %prep %autosetup -n %{upstreamname}-rocm-%{version} -p 1 # disable rpath sed -i -e 's@set(CMAKE_SHARED_LINKER_FLAGS_INIT@#set(CMAKE_SHARED_LINKER_FLAGS_INIT@' CMakeLists.txt sed -i -e 's@set(CMAKE_EXE_LINKER_FLAGS_INIT@#set(CMAKE_EXE_LINKER_FLAGS_INIT@' CMakeLists.txt # remove improper setting of libdir sed -i -e 's@set(CMAKE_INSTALL_LIBDIR "lib"@#set(CMAKE_INSTALL_LIBDIR "lib"@' CMakeLists.txt # fix opt/rocm things sed -i -e 's@set(ROCM_PATH "/opt/rocm"@set(ROCM_PATH "/usr"@' CMakeLists.txt sed -i -e 's@set(CMAKE_INSTALL_PREFIX "/opt/rocm"@#set(CMAKE_INSTALL_PREFIX "/opt/rocm"@' CMakeLists.txt sed -i -e 's@set(CPACK_PACKAGING_INSTALL_PREFIX@#set(CPACK_PACKAGING_INSTALL_PREFIX@' CMakeLists.txt sed -i -e 's@set(ROCR_LIB_DIR "${ROCM_PATH}/lib"@set(ROCR_LIB_DIR "${ROCM_PATH}/lib64"@' CMakeLists.txt sed -i -e 's@set(ROCBLAS_INC_DIR "${ROCM_PATH}/include")@#set(ROCBLAS_INC_DIR "${ROCM_PATH}/include")@' CMakeLists.txt sed -i -e 's@set(ROCBLAS_LIB_DIR "${ROCM_PATH}/lib")@#set(ROCBLAS_LIB_DIR "${ROCM_PATH}/lib")@' CMakeLists.txt sed -i -e 's@set(ROCM_SMI_INC_DIR "${ROCM_PATH}/include")@#set(ROCM_SMI_INC_DIR "${ROCM_PATH}/include")@' CMakeLists.txt sed -i -e 's@set(ROCM_SMI_LIB_DIR "${ROCM_PATH}/lib")@#set(ROCM_SMI_LIB_DIR "${ROCM_PATH}/lib")@' CMakeLists.txt # disable use of CPACK_PACKAGING_INSTALL_PREFIX sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' CMakeLists.txt sed -i -e 's@INSTALL_DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/cmake/rvs@INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rvs@' CMakeLists.txt sed -i -e 's@${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/cmake/rvs@${CMAKE_INSTALL_LIBDIR}/cmake/rvs@' CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' babel.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' edp.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' gm.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' gpup.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' gst.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' iet.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' mem.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' pbqt.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' pebb.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' peqt.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' perf.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' pesm.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' rcqt.so/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' rvs/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' rvslib/CMakeLists.txt sed -i -e 's@DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX}/@DESTINATION @g' smqt.so/CMakeLists.txt # fix the path to the *.so's sed -i -e 's@add_definitions(-DRVS_LIB_PATH="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/rvs")@add_definitions(-DRVS_LIB_PATH="${CMAKE_INSTALL_LIBDIR}/rvs")@' CMakeLists.txt # do not build docs sed -i -e 's@find_package(Doxygen)@#find_package(Doxygen)@' CMakeLists.txt # disable git usage on tarballs sed -i -e 's@GIT NAMES git@GIT NAMES git-not-going-to-find-me@' cmake_modules/utils.cmake %build for gpu in %{rocm_gpu_list} do module load rocm/$gpu %cmake -G Ninja \ -DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DROCBLAS_LIB_DIR=$ROCM_LIB \ -DROCBLAS_INC_DIR=%{_includedir} \ -DROCM_SMI_LIB_DIR=%{_libdir} \ -DROCM_SMI_INC_DIR=%{_includedir} \ -DROCM_SYMLINK_LIBS=OFF \ -DHIP_PLATFORM=amd \ -DAMDGPU_TARGETS=${ROCM_GPUS} \ -DCMAKE_INSTALL_LIBDIR=$ROCM_LIB \ -DCMAKE_INSTALL_BINDIR=$ROCM_BIN \ -DRVS_BUILD_TESTS=FALSE %cmake_build module purge done %install for gpu in %{rocm_gpu_list} do %cmake_install done chmod 755 %{buildroot}%{_datadir}/rocm-validation-suite/conf/deviceid.sh cp -r rvs/conf %{buildroot}%{_libdir}/rocm/gfx8/bin cp -r rvs/conf %{buildroot}%{_libdir}/rocm/gfx9/bin cp -r rvs/conf %{buildroot}%{_libdir}/rocm/gfx10/bin cp -r rvs/conf %{buildroot}%{_libdir}/rocm/gfx11/bin cp rvs/.rvsmodules.config %{buildroot}%{_libdir}/rocm/gfx8/bin cp rvs/.rvsmodules.config %{buildroot}%{_libdir}/rocm/gfx9/bin cp rvs/.rvsmodules.config %{buildroot}%{_libdir}/rocm/gfx10/bin cp rvs/.rvsmodules.config %{buildroot}%{_libdir}/rocm/gfx11/bin %files test %{_datadir}/rocm-validation-suite %{_libdir}/rocm/gfx{8,9,10,11}/lib/rvs %{_libdir}/rocm/gfx{8,9,10,11}/bin/conf # do not use normal bin dir because of extra files/garbage copied there # do not include devel things, this a test only package # license is a duplicate %exclude %{_bindir}/rvs %exclude %{_libdir}/cmake/rvs %exclude %{_libdir}/librvs* %exclude %{_includedir}/rvs/* %exclude %{_libdir}/rvs %exclude %{_libdir}/rocm/gfx*/lib/cmake/rvs/* %exclude %{_docdir}/%{name}/LICENSE %license LICENSE %doc README.md %{_datadir}/rocm-validation-suite %{_libdir}/rocm/gfx*/lib/rvs/* %{_libdir}/rocm/gfx*/lib/librvs* %{_libdir}/rocm/gfx*/bin/rvs %{_libdir}/rocm/gfx*/bin/.rvsmodules.config %{_libdir}/rocm/gfx*/bin/conf/* %changelog %autochangelog