File aomp.spec of Package aomp

#
# spec file for package aomp
#
# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define real_version 19.0-3
%define rocm_version 6.1
%define aomp_prefix %{_prefix}/lib
%define aomp_install %{aomp_prefix}/aomp_%{real_version}
%define aomp_builddir %{_builddir}/aomp_%{real_version}

Name:           aomp
Version:        19.0.3
Release:        0
Summary:        AMD OpenMP ROCm stack
License:        Apache-2.0 AND MIT AND NCSA
URL:            https://github.com/ROCm-Developer-Tools/aomp/
Source0:        https://github.com/ROCm-Developer-Tools/aomp/releases/download/rel_%{real_version}/aomp-%{real_version}.tar.gz
Patch0:         Add-variable-for-controlling-which-components-to-bui.patch
Patch1:         Don-t-build-prerequisite-components.patch
Patch2:         Don-t-build-with-RPATHs.patch
Patch3:         Provide-correct-path-for-HIPCC_BIN_DIR.patch
Patch4:         Disable-ASAN-packaging.patch
BuildRequires:  Mesa-libGL-devel
BuildRequires:  cmake >= 3.13.4
BuildRequires:  execstack
BuildRequires:  fdupes
BuildRequires:  python311-CppHeaderParser
BuildRequires:  python311-ply
BuildRequires:  gcc-c++
BuildRequires:  gcc
BuildRequires:  hwloc-devel
BuildRequires:  libdrm-devel
BuildRequires:  libX11-devel
BuildRequires:  libelf-devel
BuildRequires:  libnuma-devel
BuildRequires:  ninja
BuildRequires:  lld
BuildRequires:  xxd
Requires:       libOpenCL1
ExclusiveArch:  x86_64

%description
AOMP is a scripted build of LLVM and supporting software. It has support for OpenMP target offload on AMD GPUs. Since AOMP is a clang/llvm compiler, it also supports GPU offloading with HIP, CUDA, and OpenCL.

%package -n libhsa-runtime64-1
Requires: libamd_comgr2 = %{version}
Summary: ROCm Platform Runtime

%description -n libhsa-runtime64-1
This repository includes the user-mode API interfaces and libraries necessary for host applications to launch compute kernels to available HSA ROCm kernel agents.

%package -n libhsa-runtime64-devel
Summary: Development files for the ROCr libraries
Requires: libhsa-runtime64-1 = %{version}

%description -n libhsa-runtime64-devel
This package contains development files for the ROCr runtime library.

%package -n rocm-device-libs
Summary: AMD specific device-side language runtime libraries

%description -n rocm-device-libs
This package contains the sources and CMake build system for a set of AMD specific device-side language runtime libraries.

%package -n libamd_comgr2
Summary: Code Object Manager library for the AMD ROCm stack

%description -n libamd_comgr2
The Code Object Manager is a shared library which provides operations for creating and inspecting code objects.

%package -n libamd_comgr2-devel
Summary: Development files for the AMD comgr library
Requires: libamd_comgr2 = %{version}

%description -n libamd_comgr2-devel
This package contains development files for the AMD comgr library.

%package -n libamdhip64-6
Summary: AMD HIP runtime library

%description -n libamdhip64-6
The HIP runtime implements HIP streams, events, and memory APIs, and is a object library that is linked with the application. 

%package -n libamdhip64-devel
Summary: Development files for the AMD HIP runtime library
Requires: libamdhip64-6 = %{version}

%description  -n libamdhip64-devel
This package contains development files for the AMD HIP runtime library.

%package -n libhiprtc-6
Summary: HIP runtime compilation support

%description -n libhiprtc-6
This package provides the libraries needed for HIP runtime compilation support.

%package -n libhiprtc-devel
Summary: Development files for HIP runtime compilation support
Requires: libhiprtc-6 = %{version}

%description -n libhiprtc-devel
This package provides the development files needed for HIP runtime compilation support.

%package -n hip
Summary: AMD Heterogeneous Interface for Portability

%description -n hip
The Heterogeneous Interface for Portability (HIP) is AMD’s dedicated GPU programming environment for designing high performance kernels on GPU hardware.

%package -n rocminfo
Summary: ROCm Application for Reporting System Info

%description -n rocminfo
This package prints the list of available AMD GCN ISA or architecture names and gives information about the HSA system attributes and agents.

%package -n amd-opencl
Summary: ROCm OpenCL Runtime

%description -n amd-opencl
OpenCL 2.0 compatible language runtime. Supports offline and in-process/in-memory compilation.

%prep
%autosetup -p1 -n aomp19.0

%build
export AOMP=%{_builddir}/aomp
export AOMP_CMAKE=/usr/bin/cmake
export AOMP_USE_NINJA

BUILD_TYPE=Release \
AOMP_COMPONENTS="rocm-cmake project roct rocr libdevice comgr rocminfo hipamd" \
make

%install
install -d %{buildroot}%{_prefix}
mv %{aomp_builddir}/* %{buildroot}%{_prefix}

install -d %{buildroot}%{_prefix}/lib64
cp -R %{buildroot}%{_prefix}/lib64/* %{buildroot}%{_prefix}/lib/
cp -R %{buildroot}%{_prefix}/lib/* %{buildroot}%{_prefix}/lib64/
rm -R %{buildroot}%{_prefix}/lib/* 

# hsakmt fixes
install -d %{buildroot}%{_docdir}/hsakmt
mv %{buildroot}%{_datadir}/doc/hsakmt/* %{buildroot}%{_docdir}/hsakmt/

# libhsa-runtime fixes
install -d %{buildroot}%{_docdir}/hsa-runtime64
mv %{buildroot}%{_datadir}/doc/hsa-runtime64/* %{buildroot}%{_docdir}/hsa-runtime64/

# amd-device-libs fixes
mv %{buildroot}%{_prefix}/amdgcn %{buildroot}%{_datadir}
install -d %{buildroot}%{_docdir}/ROCm-Device-Libs
mv %{buildroot}%{_datadir}/doc/ROCm-Device-Libs/* %{buildroot}%{_docdir}/ROCm-Device-Libs/

# libamd_comgr2 fixes
install -d %{buildroot}%{_docdir}/amd_comgr
mv %{buildroot}%{_datadir}/doc/amd_comgr/* %{buildroot}%{_docdir}/amd_comgr

# hip fixes
mv %{buildroot}%{_prefix}/lib/.hipInfo %{buildroot}%{_libdir}/
install -d %{buildroot}%{_docdir}/hip
mv %{buildroot}%{_datadir}/doc/hip/* %{buildroot}%{_docdir}/hip
%fdupes -s %{buildroot}%{_includedir}
execstack -c %{buildroot}%{_libdir}/libamdhip64.so.%{rocm_version}.*
execstack -c %{buildroot}%{_libdir}/libhiprtc-builtins.so.%{rocm_version}.*
execstack -c %{buildroot}%{_libdir}/libhiprtc.so.%{rocm_version}.*
chmod +x %{buildroot}%{_libdir}/libamdhip64.so.%{rocm_version}.*
chmod +x %{buildroot}%{_libdir}/libhiprtc-builtins.so.%{rocm_version}.*
chmod +x %{buildroot}%{_libdir}/libhiprtc.so.%{rocm_version}.*

# rocminfo fixes
install -d %{buildroot}%{_docdir}/rocminfo
mv %{buildroot}%{_datadir}/doc/rocminfo/* %{buildroot}%{_docdir}/rocminfo

# delete duplicated licenses
rm %{buildroot}%{_datadir}/doc/hip-asan/LICENSE.txt
rm %{buildroot}%{_datadir}/doc/opencl-asan/LICENSE.txt

# amd-opencl fixes
install -d %{buildroot}%{_docdir}/rocm-ocl-icd
mv %{buildroot}%{_datadir}/doc/rocm-ocl-icd/* %{buildroot}%{_docdir}/rocm-ocl-icd

# Create an OpenCL ICD Loader config
install -d %{buildroot}%{_datadir}/OpenCL/vendors/
echo %{_libdir}/libamdocl64.so > %{buildroot}%{_datadir}/OpenCL/vendors/amdocl64.icd

%post -p /usr/sbin/ldconfig
%postun -p /usr/sbin/ldconfig
%post -n libhsa-runtime64-1 -p /usr/sbin/ldconfig
%postun -n libhsa-runtime64-1 -p /usr/sbin/ldconfig
%post -n libhsa-runtime64-devel -p /usr/sbin/ldconfig
%postun -n libhsa-runtime64-devel -p /usr/sbin/ldconfig
%post -n libamd_comgr2 -p /usr/sbin/ldconfig
%postun -n libamd_comgr2 -p /usr/sbin/ldconfig
%post -n libamdhip64-6 -p /usr/sbin/ldconfig
%postun -n libamdhip64-6 -p /usr/sbin/ldconfig
%post -n libhiprtc-6 -p /usr/sbin/ldconfig
%postun -n libhiprtc-6 -p /usr/sbin/ldconfig

%files

# Don't package rocm-cmake
%exclude %{_datadir}/doc/rocm-cmake/LICENSE
%exclude %{_datadir}/rocm/cmake/ROCM*.cmake

# Don't package rocm-llvm
%exclude %{_bindir}/FileCheck
%exclude %{_bindir}/amdclang*
%exclude %{_bindir}/amdgpu-arch
%exclude %{_bindir}/amdlld
%exclude %{_bindir}/amdllvm
%exclude %{_bindir}/analyze-build
%exclude %{_bindir}/bugpoint
%exclude %{_bindir}/c-index-test
%exclude %{_bindir}/clang*
%exclude %{_bindir}/count
%exclude %{_bindir}/diagtool
%exclude %{_bindir}/dsymutil
%exclude %{_bindir}/find-all-symbols
%exclude %{_bindir}/git-clang-format
%exclude %{_bindir}/hmaptool
%exclude %{_bindir}/intercept-build
%exclude %{_bindir}/ld.lld
%exclude %{_bindir}/ld64.lld
%exclude %{_bindir}/llc
%exclude %{_bindir}/lld
%exclude %{_bindir}/lld-link
%exclude %{_bindir}/lli
%exclude %{_bindir}/llvm-*
%exclude %{_bindir}/modularize
%exclude %{_bindir}/not
%exclude %{_bindir}/nvptx-arch
%exclude %{_bindir}/opt
%exclude %{_bindir}/pp-trace
%exclude %{_bindir}/reduce-chunk-list
%exclude %{_bindir}/roc-obj-extract.bat
%exclude %{_bindir}/roc-obj-ls.bat
%exclude %{_bindir}/run-clang-tidy
%exclude %{_bindir}/sancov
%exclude %{_bindir}/sanstats
%exclude %{_bindir}/scan-build
%exclude %{_bindir}/scan-build-py
%exclude %{_bindir}/scan-view
%exclude %{_bindir}/verify-uselistorder
%exclude %{_bindir}/wasm-ld
%exclude %{_bindir}/yaml-bench
%exclude %{_includedir}/c++/v1/
%exclude %{_includedir}/clang-c/
%exclude %{_includedir}/clang-tidy/
%exclude %{_includedir}/clang/
%exclude %{_includedir}/lld/
%exclude %{_includedir}/llvm-c/
%exclude %{_includedir}/llvm/
%exclude %{_libdir}/disable_dynamic_devmem.ll
%exclude %{_libdir}/clang/
%exclude %{_libdir}/cmake/clang/
%exclude %{_libdir}/cmake/lld/
%exclude %{_libdir}/cmake/llvm/
%exclude %{_libdir}/libLTO*
%exclude %{_libdir}/libRemarks*
%exclude %{_libdir}/libc++*
%exclude %{_libdir}/libclang*
%exclude %{_libdir}/libear/
%exclude %{_libdir}/libfindAllSymbols*
%exclude %{_libdir}/liblld*
%exclude %{_libdir}/libscanbuild/
%exclude %{_libdir}/libLLVM.so
%exclude %{_libdir}/libLLVM*.a
%exclude %{_libdir}/llvm/bin
%exclude %{_prefix}/libexec/analyze-c++
%exclude %{_prefix}/libexec/analyze-cc
%exclude %{_prefix}/libexec/c++-analyzer
%exclude %{_prefix}/libexec/ccc-analyzer
%exclude %{_prefix}/libexec/intercept-c++
%exclude %{_prefix}/libexec/intercept-cc
%exclude %{_datadir}/clang/
%exclude %{_datadir}/clang-doc/
%exclude %{_datadir}/man/man1/scan-build.1.gz
%exclude %{_datadir}/opt-viewer/
%exclude %{_datadir}/scan-build/
%exclude %{_datadir}/scan-view/
%exclude %{_datadir}/libc++/
%exclude %{_datadir}/rocmcmakebuildtools/cmake/

# Don't package libomp
%exclude %{_bindir}/prep-libomptarget-bc
%exclude %{_libdir}/libgomp.so
%exclude %{_libdir}/libiomp5.so
%exclude %{_libdir}/libomp.so
%exclude %{_libdir}/libomptarget*
%exclude %{_libdir}/omptest/include/*
%exclude %{_libdir}/cmake/openmp/FindOpenMPTarget.cmake
%exclude %{_libdir}/cmake/omptest/omptest-config.cmake
%exclude %{_libdir}/libarcher.so
%exclude %{_libdir}/libarcher_static.a
%exclude %{_libdir}/libomptest.so

# Don't package libunwind
%exclude %{_libdir}/libunwind*
%exclude %{_includedir}/__libunwind_config.h
%exclude %{_includedir}/libunwind.h
%exclude %{_includedir}/libunwind.modulemap
%exclude %{_includedir}/mach-o/compact_unwind_encoding.h
%exclude %{_includedir}/mach-o/compact_unwind_encoding.modulemap
%exclude %{_includedir}/unwind.h
%exclude %{_includedir}/unwind_arm_ehabi.h
%exclude %{_includedir}/unwind_itanium.h


# libhsakmt is linked statically so we don't package it
%exclude %{_libdir}/libhsakmt.a
%exclude %{_libdir}/cmake/hsakmt/
%exclude %{_libdir}/pkgconfig/libhsakmt.pc
%exclude %{_includedir}/hsakmt/
%exclude %{_includedir}/hsakmt/
%exclude %{_docdir}/hsakmt/LICENSE.md

%files -n libhsa-runtime64-1
%{_libdir}/libhsa-runtime64.so.*
%dir %{_docdir}/hsa-runtime64
%license %{_docdir}/hsa-runtime64/LICENSE.md

%files -n libhsa-runtime64-devel
%{_libdir}/libhsa-runtime64.so
%{_libdir}/cmake/hsa-runtime64
%{_includedir}/hsa

%files -n rocm-device-libs
%dir %{_datadir}/amdgcn/
%dir %{_datadir}/amdgcn/bitcode
%{_datadir}/amdgcn/bitcode/*.bc
%{_libdir}/cmake/AMDDeviceLibs/AMDDeviceLibsConfig.cmake
%dir %{_libdir}/cmake/AMDDeviceLibs
%dir %{_docdir}/ROCm-Device-Libs
%license %{_docdir}/ROCm-Device-Libs/LICENSE.TXT

%files -n libamd_comgr2
%{_libdir}/libamd_comgr.so.2*
%{_libdir}/libLLVM-19_AOMP_STANDALONE_%{real_version}.so
%{_libdir}/libLLVM.so.19.0_AOMP_STANDALONE_%{real_version}
%license %{_docdir}/amd_comgr/LICENSE.txt
%doc %{_docdir}/amd_comgr/README.md
%doc %{_docdir}/amd_comgr/NOTICES.txt
%dir %{_docdir}/amd_comgr

%files -n libamd_comgr2-devel
%{_includedir}/amd_comgr/amd_comgr.h
%dir %{_includedir}/amd_comgr
%{_libdir}/cmake/amd_comgr/
%{_libdir}/libamd_comgr.so

%files -n libamdhip64-6
%{_libdir}/libamdhip64.so
%{_libdir}/libamdhip64.so.*

%files -n libamdhip64-devel
%{_includedir}/hip
%{_includedir}/hip_prof_str.h
%{_libdir}/cmake/hip-lang
%{_libdir}/cmake/hip

%files -n libhiprtc-6
%{_libdir}/libhiprtc.so.*
%{_libdir}/libhiprtc-builtins.so.*

%files -n libhiprtc-devel
%{_libdir}/libhiprtc.so
%{_libdir}/libhiprtc-builtins.so
%{_libdir}/cmake/hiprtc

%files -n hip
%{_bindir}/hipcc
%{_bindir}/hipcc.pl
%{_bindir}/hipcc_cmake_linker_helper
%{_bindir}/hipconfig
%{_bindir}/hipconfig.pl
%{_bindir}/hipdemangleatp
%{_bindir}/hipvars.pm
%{_bindir}/roc-obj
%{_bindir}/roc-obj-extract
%{_bindir}/roc-obj-ls
%{_libdir}/.hipInfo
%dir %{_datadir}/hip
%{_datadir}/hip/version
%exclude %{_bindir}/hipcc.bat
%exclude %{_bindir}/hipconfig.bat
%dir %{_docdir}/hip/
%license %{_docdir}/hip/LICENSE.txt

%files -n rocminfo
%{_bindir}/rocm_agent_enumerator
%{_bindir}/rocminfo
%dir %{_docdir}/rocminfo
%license %{_docdir}/rocminfo/License.txt

%files -n amd-opencl
%exclude %{_bindir}/clinfo
%exclude %{_includedir}/CL
%exclude %{_libdir}/libOpenCL.so*
%exclude %{_libdir}/libcltrace.so
%exclude %{_datadir}/doc/opencl/LICENSE.txt
%{_libdir}/libamdocl64.so
%dir %{_datadir}/OpenCL
%dir %{_datadir}/OpenCL/vendors
%{_datadir}/OpenCL/vendors/amdocl64.icd
%dir %{_docdir}/rocm-ocl-icd
%license %{_docdir}/rocm-ocl-icd/LICENSE

%changelog
openSUSE Build Service is sponsored by