public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gcc] rhel-f41-base: AMD GCN offloading support.
@ 2026-06-29 12:30 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2026-06-29 12:30 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 1362054ff7ef97cc576d1bff7a07db0dd6c14678
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2024-01-23T16:24:18+01:00
Stats  : +137/-2 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/1362054ff7ef97cc576d1bff7a07db0dd6c14678?branch=rhel-f41-base

Log:
AMD GCN offloading support.

---
diff --git a/gcc.spec b/gcc.spec
index d3d842b..2d3ad9d 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -114,6 +114,11 @@
 %else
 %global build_offload_nvptx 0
 %endif
+%ifarch x86_64
+%global build_offload_amdgcn 1
+%else
+%global build_offload_amdgcn 0
+%endif
 %if 0%{?fedora} < 32 && 0%{?rhel} < 8
 %ifarch s390x
 %global multilib_32_arch s390
@@ -229,6 +234,9 @@ BuildRequires: libunwind >= 0.98
 BuildRequires: doxygen >= 1.7.1
 BuildRequires: graphviz, dblatex, texlive-collection-latex, docbook5-style-xsl
 %endif
+%if %{build_offload_amdgcn}
+BuildRequires: llvm, lld
+%endif
 Requires: cpp = %{version}-%{release}
 # Need .eh_frame ld optimizations
 # Need proper visibility support
@@ -552,6 +560,15 @@ This package contains libgomp plugin for offloading to NVidia
 PTX.  The plugin needs libcuda.so.1 shared library that has to be
 installed separately.
 
+%package -n libgomp-offload-amdgcn
+Summary: GCC OpenMP v4.5 plugin for offloading to AMD GCN
+Requires: libgomp = %{version}-%{release}
+Requires: rocm-runtime >= 6.0.0
+
+%description -n libgomp-offload-amdgcn
+This package contains libgomp plugin for offloading to AMD ROCm capable
+devices.
+
 %package gdb-plugin
 Summary: GCC plugin for GDB
 Requires: gcc = %{version}-%{release}
@@ -834,6 +851,18 @@ NVidia PTX.  OpenMP and OpenACC programs linked with -fopenmp will
 by default add PTX code into the binaries, which can be offloaded
 to NVidia PTX capable devices if available.
 
+%package offload-amdgcn
+Summary: Offloading compiler to AMD GCN
+Requires: gcc = %{version}-%{release}
+Requires: libgomp-offload-amdgcn = %{version}-%{release}
+Requires: llvm, lld
+
+%description offload-amdgcn
+The gcc-offload-amdgcn package provides offloading support for
+AMD GCN.  OpenMP and OpenACC programs linked with -fopenmp will
+by default add GCN code into the binaries, which can be offloaded
+to AMD ROCm capable devices if available.
+
 %package plugin-annobin
 Summary: The annobin plugin for gcc, built by the installed version of gcc
 Requires: gcc = %{version}-%{release}
@@ -976,6 +1005,42 @@ cd ..
 rm -f newlib
 %endif
 
+%if %{build_offload_amdgcn}
+mkdir -p objia%{_prefix}/bin objia%{_prefix}/amdgcn-amdhsa/bin
+IAROOT=`pwd`/objia
+ln -sf %{_prefix}/bin/llvm-ar ${IAROOT}%{_prefix}/bin/amdgcn-amdhsa-ar
+ln -sf %{_prefix}/bin/llvm-ar ${IAROOT}%{_prefix}/bin/amdgcn-amdhsa-ranlib
+ln -sf %{_prefix}/bin/llvm-mc ${IAROOT}%{_prefix}/bin/amdgcn-amdhsa-as
+ln -sf %{_prefix}/bin/llvm-nm ${IAROOT}%{_prefix}/bin/amdgcn-amdhsa-nm
+ln -sf %{_prefix}/bin/lld ${IAROOT}%{_prefix}/bin/amdgcn-amdhsa-ld
+ln -sf ../../bin/amdgcn-amdhsa-ar ${IAROOT}%{_prefix}/amdgcn-amdhsa/bin/ar
+ln -sf ../../bin/amdgcn-amdhsa-ranlib ${IAROOT}%{_prefix}/amdgcn-amdhsa/bin/ranlib
+ln -sf ../../bin/amdgcn-amdhsa-as ${IAROOT}%{_prefix}/amdgcn-amdhsa/bin/as
+ln -sf ../../bin/amdgcn-amdhsa-nm ${IAROOT}%{_prefix}/amdgcn-amdhsa/bin/nm
+ln -sf ../../bin/amdgcn-amdhsa-ld ${IAROOT}%{_prefix}/amdgcn-amdhsa/bin/ld
+
+ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib
+rm -rf obj-offload-amdgcn-amdhsa
+mkdir obj-offload-amdgcn-amdhsa
+
+cd obj-offload-amdgcn-amdhsa
+CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
+	CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
+		  | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
+	XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
+	../configure --disable-bootstrap --disable-sjlj-exceptions \
+	--with-build-time-tools=${IAROOT}%{_prefix}/amdgcn-amdhsa/bin \
+	--target amdgcn-amdhsa --enable-as-accelerator-for=%{gcc_target_platform} \
+	--enable-languages=c,c++,fortran,lto \
+	--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
+	--with-bugurl=http://bugzilla.redhat.com/bugzilla \
+	--enable-checking=release --with-system-zlib \
+	--with-gcc-major-version-only --without-isl --disable-libquadmath
+make %{?_smp_mflags}
+cd ..
+rm -f newlib
+%endif
+
 rm -rf obj-%{gcc_target_platform}
 mkdir obj-%{gcc_target_platform}
 cd obj-%{gcc_target_platform}
@@ -1021,6 +1086,13 @@ enableld=,d
 %if %{build_m2}
 enablelm2=,m2
 %endif
+offloadtgts=
+%if %{build_offload_nvptx}
+offloadtgts=nvptx-none
+%endif
+%if %{build_offload_amdgcn}
+offloadtgts=${offloadtgts:+${offloadtgts},}amdgcn-amdhsa
+%endif
 CONFIGURE_OPTS="\
 	--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
 	--with-bugurl=http://bugzilla.redhat.com/bugzilla \
@@ -1053,9 +1125,11 @@ CONFIGURE_OPTS="\
 %else
 	--without-isl \
 %endif
+%if %{build_offload_nvptx} || %{build_offload_amdgcn}
+	--enable-offload-targets=$offloadtgts --enable-offload-defaulted \
+%endif
 %if %{build_offload_nvptx}
-	--enable-offload-targets=nvptx-none \
-	--without-cuda-driver --enable-offload-defaulted \
+	--without-cuda-driver \
 %endif
 %if 0%{?fedora} >= 21 || 0%{?rhel} >= 7
 %if %{attr_ifunc}
@@ -1359,6 +1433,43 @@ cd ..
 rm -f newlib
 %endif
 
+%if %{build_offload_amdgcn}
+mkdir -p %{buildroot}%{_prefix}/bin %{buildroot}%{_prefix}/amdgcn-amdhsa/bin
+ln -sf llvm-ar %{buildroot}%{_prefix}/bin/amdgcn-amdhsa-ar
+ln -sf llvm-ar %{buildroot}%{_prefix}/bin/amdgcn-amdhsa-ranlib
+ln -sf llvm-mc %{buildroot}%{_prefix}/bin/amdgcn-amdhsa-as
+ln -sf llvm-nm %{buildroot}%{_prefix}/bin/amdgcn-amdhsa-nm
+ln -sf lld %{buildroot}%{_prefix}/bin/amdgcn-amdhsa-ld
+ln -sf ../../bin/amdgcn-amdhsa-ar %{buildroot}%{_prefix}/amdgcn-amdhsa/bin/ar
+ln -sf ../../bin/amdgcn-amdhsa-ranlib %{buildroot}%{_prefix}/amdgcn-amdhsa/bin/ranlib
+ln -sf ../../bin/amdgcn-amdhsa-as %{buildroot}%{_prefix}/amdgcn-amdhsa/bin/as
+ln -sf ../../bin/amdgcn-amdhsa-nm %{buildroot}%{_prefix}/amdgcn-amdhsa/bin/nm
+ln -sf ../../bin/amdgcn-amdhsa-ld %{buildroot}%{_prefix}/amdgcn-amdhsa/bin/ld
+
+ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib
+cd obj-offload-amdgcn-amdhsa
+make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \
+  infodir=%{buildroot}%{_infodir} install
+rm -rf %{buildroot}%{_prefix}/libexec/gcc/amdgcn-amdhsa/%{gcc_major}/install-tools
+rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/{install-tools,plugin,cc1,cc1plus,f951}
+rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale
+rm -rf %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/{install-tools,plugin}
+rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/{install-tools,plugin,include-fixed}
+rm -rf %{buildroot}%{_prefix}/%{_lib}/libc[cp]1*
+mv -f %{buildroot}%{_prefix}/amdgcn-amdhsa/lib/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/
+mv -f %{buildroot}%{_prefix}/amdgcn-amdhsa/lib/gfx906/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx906/
+mv -f %{buildroot}%{_prefix}/amdgcn-amdhsa/lib/gfx908/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx908/
+mv -f %{buildroot}%{_prefix}/amdgcn-amdhsa/lib/gfx90a/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx90a/
+mv -f %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/
+mv -f %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/gfx906/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx906/
+mv -f %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/gfx908/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx908/
+mv -f %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/gfx90a/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/gfx90a/
+find %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa \
+     %{buildroot}%{_prefix}/amdgcn-amdhsa/lib -name \*.la | xargs rm
+cd ..
+rm -f newlib
+%endif
+
 cd obj-%{gcc_target_platform}
 
 TARGET_PLATFORM=%{gcc_target_platform}
@@ -3446,6 +3557,30 @@ end
 %{_prefix}/%{_lib}/libgomp-plugin-nvptx.so.*
 %endif
 
+%if %{build_offload_amdgcn}
+%files offload-amdgcn
+%{_prefix}/bin/amdgcn-amdhsa-*
+%{_prefix}/bin/%{gcc_target_platform}-accel-amdgcn-amdhsa-gcc
+%{_prefix}/bin/%{gcc_target_platform}-accel-amdgcn-amdhsa-lto-dump
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel
+%dir %{_prefix}/libexec/gcc
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel
+%{_prefix}/lib/gcc/amdgcn-amdhsa
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa
+%dir %{_prefix}/amdgcn-amdhsa
+%{_prefix}/amdgcn-amdhsa/bin
+%{_prefix}/amdgcn-amdhsa/include
+
+%files -n libgomp-offload-amdgcn
+%{_prefix}/%{_lib}/libgomp-plugin-gcn.so.*
+%endif
+
 %if %{build_annobin_plugin}
 %files plugin-annobin
 %dir %{_prefix}/lib/gcc

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-29 12:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-29 12:30 [rpms/gcc] rhel-f41-base: AMD GCN offloading support Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox