From a644e0f17d4799db70d9ebc2eedbb0010674b935 Mon Sep 17 00:00:00 2001 From: "Sv. Lockal" Date: Sat, 15 Nov 2025 23:00:41 +0800 Subject: [PATCH] dev-util/rocm_bandwidth_test: fix {cxx,ld}flags/cxx/niceness rocm_bandwidth_test cmake files reinvents variables for everything: installation paths, flags, generator, compiler, linker selection, etc. Then cmake calls bash, which calls another cmake, which ignores niceness, verbose logs, CXX, etc. That code is objectively bad, but at least it can be patched. New ebuild erases nested build shell script in favor of cmake.eclass functions and removes automagic adding of ld.lld. Closes: https://bugs.gentoo.org/965916 Signed-off-by: Sv. Lockal Part-of: https://github.com/gentoo/gentoo/pull/44633 Signed-off-by: Sam James --- ...ld => rocm_bandwidth_test-7.1.0-r1.ebuild} | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) rename dev-util/rocm_bandwidth_test/{rocm_bandwidth_test-7.1.0.ebuild => rocm_bandwidth_test-7.1.0-r1.ebuild} (60%) diff --git a/dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0.ebuild b/dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0-r1.ebuild similarity index 60% rename from dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0.ebuild rename to dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0-r1.ebuild index f73d7b0ff195e..c5be88d58c534 100644 --- a/dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0.ebuild +++ b/dev-util/rocm_bandwidth_test/rocm_bandwidth_test-7.1.0-r1.ebuild @@ -3,7 +3,8 @@ EAPI=8 -inherit cmake +ROCM_VERSION=${PV} +inherit cmake rocm DESCRIPTION="Bandwidth test for ROCm" HOMEPAGE="https://github.com/ROCm/rocm_bandwidth_test" @@ -14,26 +15,41 @@ LICENSE="MIT" SLOT="0/$(ver_cut 1-2)" KEYWORDS="~amd64" +REQUIRED_USE="${ROCM_REQUIRED_USE}" + RDEPEND=" dev-libs/rocr-runtime:${SLOT} dev-util/hip:${SLOT} + dev-libs/boost:=[stacktrace] dev-libs/libfmt:= dev-libs/spdlog:= + net-misc/curl sys-process/numactl " DEPEND=" ${RDEPEND} dev-cpp/nlohmann_json dev-util/hipcc - dev-libs/boost[stacktrace] - net-misc/curl dev-cpp/cli11 dev-cpp/catch " PATCHES=( "${FILESDIR}"/rocm_bandwidth_test-7.1.0-nogit.patch ) +tb_plugin_wrapper() { + local PATCHES=() + local CMAKE_USE_DIR="${S}/plugins/tb/transferbench" + local BUILD_DIR="${CMAKE_USE_DIR}/build" + "$@" +} + src_prepare() { + # rocm_bandwidth_test cmake files reinvents variables for everything: + # installation paths, flags, generator, compiler, linker selection, etc. + # Then cmake calls bash, which calls another cmake, which ignores niceness, verbose logs, CXX, etc. + # That code is objectively bad, a lot of patches go below. + # See also: https://github.com/ROCm/rocm_bandwidth_test/issues/131 + # Relax version checks sed -e "s/ \${FMT_PKG_MINIMUM_REQUIRED_VERSION}//" -i cmake/build_utils.cmake || die sed -e "s/ \${SPDLOG_PKG_MINIMUM_REQUIRED_VERSION}//" -i cmake/build_utils.cmake || die @@ -43,7 +59,6 @@ src_prepare() { sed -e "/set(CATCH2_PACKAGE_NAME/ s/catch2/Catch2/" -i cmake/build_utils.cmake || die sed -e "s/ QUIT)/)/" -i main/cmdline/CMakeLists.txt || die - # https://github.com/ROCm/rocm_bandwidth_test/issues/131 sed -e "/set(AMD_ROCM_STAGING_INSTALL_PATH/ s:/usr/local:${EPREFIX}/usr:" \ -e "/set(AMD_STANDALONE_STAGING_INSTALL_LIBDIR/ s/lib/$(get_libdir)/" \ -e "/set(AMD_STANDALONE_STAGING_INSTALL_EXPORTDIR/ s/lib/$(get_libdir)/" \ @@ -65,10 +80,22 @@ src_prepare() { sed -e "s:./rocm_bandwidth_test:rocm_bandwidth_test:" -i bin/rbt_run_tb || die + # Let the user decide, which programs to use (definitely not `gcc -fuse-ld=lld`) + # Bug: https://bugs.gentoo.org/965916 + sed -e '/find_program(CCACHE_PATH/d' -e '/find_program(LD_LLD_PATH/d' \ + -e '/find_program(LD_MOLD_PATH/d' -i cmake/build_utils.cmake || die + + # Cleanup build script as we build in src_compile. + # This shell script basically calls "cmake ... && cmake install", + # we replace it with normal cmake.eclass functions with tb_plugin_wrapper. + echo "" > plugins/tb/transferbench/build_libamd_tb.sh || die + cmake_src_prepare + tb_plugin_wrapper cmake_src_prepare } src_configure() { + # Configure plugin launcher (can be compiled with any compiler) local mycmakeargs=( -DROCM_PATH="${EPREFIX}/usr" -DUSE_LOCAL_FMT_LIB=ON @@ -78,15 +105,30 @@ src_configure() { -DUSE_LOCAL_CLI11=ON -DUSE_LOCAL_CATCH2=ON + -DAMD_APP_BUILD_DOCS=OFF + -DAMD_APP_BUILD_EXAMPLES=OFF -DAMD_APP_COMPILER_TRY_CLANG=OFF -DAMD_APP_STANDALONE_BUILD_PACKAGE=ON -DAMD_APP_TREAT_WARNINGS_AS_ERRORS=OFF -Wno-dev ) cmake_src_configure + + # Configure tb plugin (HIP code) + rocm_use_clang + mycmakeargs=( + -DBUILD_INTERNAL_BINARY_VERSION=$(< VERSION) + -DGPU_TARGETS="$(get_amdgpu_flags)" + -DHSA_INCLUDE_DIR="${EPREFIX}/usr/include/hsa" + -DROCM_PATH="${EPREFIX}/usr" + ) + tb_plugin_wrapper cmake_src_configure } src_compile() { - cmake_src_compile AMD_TB_LIBRARY + # tb plugin must be compiled before transferbench + tb_plugin_wrapper cmake_src_compile + cp "${S}"/plugins/tb/transferbench/build/libamd_tb.* "${S}/plugins/tb/lib" || die + cmake_src_compile }