%global maj_ver 19 %global min_ver 1 %global patch_ver 2 %global baserelease 0.1 %ifarch ppc64le # Limit build jobs on ppc64 systems to avoid running out of memory. %global _smp_mflags -j8 %endif %global install_prefix %{_libdir}/llvm%{maj_ver} %global pkg_libdir %{install_prefix}/lib/ # Disable debuginfo on ppc64le to reduce disk space usage. %ifarch ppc64le %global _find_debuginfo_dwz_opts %{nil} %global debug_package %{nil} %endif %if 0%{?rhel} == 8 %global python3_pkgversion 3.12 %global __python3 /usr/bin/python3.12 %endif %if 0%{?rhel} < 10 %global gcc_toolset gcc-toolset-14 %endif Name: llvm-compat%{maj_ver} Version: %{maj_ver}.%{min_ver}.%{patch_ver} Release: %{baserelease}%{?dist} Summary: The Low Level Virtual Machine License: NCSA URL: http://llvm.org Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/llvm-%{version}.src.tar.xz Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/clang-%{version}.src.tar.xz Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/cmake-%{version}.src.tar.xz # RHEL-specific patch to avoid unwanted recommonmark dep #Patch101: 0101-Deactivate-markdown-doc.patch BuildRequires: gcc BuildRequires: gcc-c++ %if 0%{?rhel} < 10 BuildRequires: %{gcc_toolset}-gcc BuildRequires: %{gcc_toolset}-gcc-c++ BuildRequires: %{gcc_toolset}-gcc-plugin-annobin %endif BuildRequires: cmake BuildRequires: zlib-devel BuildRequires: libffi-devel BuildRequires: ncurses-devel BuildRequires: multilib-rpm-config BuildRequires: ninja-build BuildRequires: python%{python3_pkgversion}-devel %ifarch %{valgrind_arches} # Enable extra functionality when run the LLVM JIT under valgrind. BuildRequires: valgrind-devel %endif Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description LLVM is a compiler infrastructure designed for compile-time, link-time, runtime, and idle-time optimization of programs from arbitrary programming languages. The compiler infrastructure includes mirror sets of programming tools as well as libraries with equivalent functionality. %package libs Summary: LLVM shared libraries %description libs Shared libraries for the LLVM compiler infrastructure. %prep %setup -T -q -b 2 -n cmake-%{version}.src cd .. mv cmake-%{version}.src cmake %setup -T -q -b 1 -n clang-%{version}.src %autopatch -m100 -p2 cd .. mv clang-%{version}.src clang %setup -q -n llvm-%{version}.src %autopatch -M100 -p2 %build %if 0%{?rhel} < 10 source /opt/rh/%{gcc_toolset}/enable %endif %ifarch s390 %ix86 # Decrease debuginfo verbosity to reduce memory consumption during final library linking %global optflags %(echo %{optflags} | sed 's/-g /-g1 /') %endif cd .. mkdir llvm-build pushd llvm-build # force off shared libs as cmake macros turns it on. %cmake ../llvm-%{version}.src -G Ninja \ -B . \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \ -DPython3_EXECUTABLE=%{__python3} \ %ifarch ppc64le -DCMAKE_BUILD_TYPE=Release \ %else -DCMAKE_BUILD_TYPE=RelWithDebInfo \ %endif %ifarch s390 %ix86 -DCMAKE_C_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \ %endif \ -DLLVM_TARGETS_TO_BUILD="X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;ARM;Mips;BPF;WebAssembly" \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ -DLLVM_ENABLE_EH=ON \ -DLLVM_ENABLE_FFI:BOOL=ON \ -DLLVM_ENABLE_RTTI:BOOL=ON \ -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON \ -DLLVM_DYLIB_EXPORT_ALL:BOOL=ON \ -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ -DLLVM_ENABLE_PROJECTS=clang \ -DLLVM_BUILD_DOCS=OFF \ -DLLVM_INCLUDE_DOCS=OFF %ninja_build LLVM %ninja_build libclang.so %ninja_build libclang-cpp.so popd %install mkdir -p %{buildroot}%{pkg_libdir} install -m 0755 ../llvm-build/lib/libLLVM.so.%{maj_ver}* %{buildroot}%{pkg_libdir} install -m 0755 ../llvm-build/lib/libclang.so.%{maj_ver}* %{buildroot}%{pkg_libdir} install -m 0755 ../llvm-build/lib/libclang-cpp.so.%{maj_ver}* %{buildroot}%{pkg_libdir} ln -sf libLLVM.so.%{maj_ver}.%{min_ver}.%{patch_ver} %{buildroot}%{pkg_libdir}/libLLVM-%{maj_ver}.so ln -sf libclang.so.%{maj_ver}.%{min_ver}.%{patch_ver} %{buildroot}%{pkg_libdir}/libclang.so.%{maj_ver}.%{min_ver} # Create ld.so.conf.d entry mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf << EOF %{pkg_libdir} EOF %check %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig %files %files libs %config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf %{pkg_libdir}/libLLVM-%{maj_ver}.so %{pkg_libdir}/libLLVM.so.* %{pkg_libdir}/libclang*.so.*