flag-o-matic.eclass: Add functions for testing/stipping HIPFLAGS

HIPFLAFS allows to specify default compilation flags to be used when compiling HIP files.
As environment variable, it is supported in CMake for all projects that specify HIP as language[1][2].
Some flags like -mtls-dialect=* are not supported by HIP compiler; test-flags-HIPCXX can be used to test flags.

[1] https://cmake.org/cmake/help/latest/envvar/HIPFLAGS.html
[2] https://rocm.docs.amd.com/en/latest/conceptual/cmake-packages.html#using-the-hip-single-source-programming-model

Bug: https://bugs.gentoo.org/957893
Signed-off-by: Sv. Lockal <lockalsash@gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/42691
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sv. Lockal 2025-06-22 14:41:48 +00:00 committed by Sam James
parent 1f14d47e71
commit 74d25eedd9
No known key found for this signature in database
GPG Key ID: 738409F520DF9190

View File

@ -636,6 +636,11 @@ _test-flag-PROG() {
cmdline_extra+=(-xc)
;;
hip)
in_ext='hip'
in_src='int main(void) { return 0; }'
cmdline_extra+=(-xhip -c)
;;
esac
local test_in=${T}/test-flag.${in_ext}
local test_out=${T}/test-flag.exe
@ -707,6 +712,12 @@ test-flag-FC() { _test-flag-PROG FC f95 "$@"; }
# Returns shell true if <flag> is supported by the C compiler and linker, else returns shell false.
test-flag-CCLD() { _test-flag-PROG CC c+ld "$@"; }
# @FUNCTION: test-flag-HIPCXX
# @USAGE: <flag>
# @DESCRIPTION:
# Returns shell true if <flag> is supported by the HIP compiler, else returns shell false.
test-flag-HIPCXX() { _test-flag-PROG HIPCXX hip "$@"; }
# @FUNCTION: test-flags-PROG
# @USAGE: <compiler> <flag> [more flags...]
# @INTERNAL
@ -788,6 +799,12 @@ test-flags-FC() { _test-flags-PROG FC "$@"; }
# Returns shell true if <flags> are supported by the C compiler and default linker, else returns shell false.
test-flags-CCLD() { _test-flags-PROG CCLD "$@"; }
# @FUNCTION: test-flags-HIPCXX
# @USAGE: <flags>
# @DESCRIPTION:
# Returns shell true if <flags> are supported by the HIP compiler and default linker, else returns shell false.
test-flags-HIPCXX() { _test-flags-PROG HIPCXX "$@"; }
# @FUNCTION: test-flags
# @USAGE: <flags>
# @DESCRIPTION:
@ -810,7 +827,7 @@ test_version_info() {
# @FUNCTION: strip-unsupported-flags
# @DESCRIPTION:
# Strip {C,CXX,F,FC}FLAGS of any flags not supported by the active toolchain.
# Strip {C,CXX,F,FC,HIP}FLAGS of any flags not supported by the active toolchain.
strip-unsupported-flags() {
[[ $# -ne 0 ]] && die "strip-unsupported-flags takes no arguments"
export CFLAGS=$(test-flags-CC ${CFLAGS})
@ -818,6 +835,7 @@ strip-unsupported-flags() {
export FFLAGS=$(test-flags-F77 ${FFLAGS})
export FCFLAGS=$(test-flags-FC ${FCFLAGS})
export LDFLAGS=$(test-flags-CCLD ${LDFLAGS})
export HIPFLAGS=$(test-flags-HIPCXX ${HIPFLAGS})
}
# @FUNCTION: get-flag
@ -1008,6 +1026,12 @@ test-compile() {
args+=(${FCFLAGS[@]} ${LDFLAGS[@]} -xf95)
libs+=(${LIBS[@]})
;;
hip)
compiler="$(tc-getHIPCXX)"
filename_in="${T}/test.hip"
filename_out="${T}/test.o"
args+=(${CFLAGS[@]} -xhip -c)
;;
*)
die "Unknown compiled language ${lang}"
;;