commit: a644e0f17d4799db70d9ebc2eedbb0010674b935
Author: Sv. Lockal <lockalsash <AT> gmail <DOT> com>
AuthorDate: Sat Nov 15 15:00:41 2025 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Nov 16 09:14:51 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a644e0f1
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 <lockalsash <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/44633
Signed-off-by: Sam James <sam <AT> gentoo.org>
....ebuild => rocm_bandwidth_test-7.1.0-r1.ebuild} | 52 +++++++++++++++++++---
1 file changed, 47 insertions(+), 5 deletions(-)
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 f73d7b0ff195..c5be88d58c53 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
}