commit:     74d25eedd9c327fe91048b06ad81b86eb14d9cb7
Author:     Sv. Lockal <lockalsash <AT> gmail <DOT> com>
AuthorDate: Sun Jun 22 14:41:48 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Jul  5 07:14:13 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=74d25eed

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 <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/42691
Signed-off-by: Sam James <sam <AT> gentoo.org>

 eclass/flag-o-matic.eclass | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/eclass/flag-o-matic.eclass b/eclass/flag-o-matic.eclass
index f22854c646c7..1c9abe1280b6 100644
--- a/eclass/flag-o-matic.eclass
+++ b/eclass/flag-o-matic.eclass
@@ -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}"
                        ;;

Reply via email to