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@gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/44633
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sv. Lockal
2025-11-15 23:00:41 +08:00
committed by Sam James
parent 6357e689b3
commit a644e0f17d

View File

@@ -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
}