%global maj_ver 17 %global min_ver 0 %global patch_ver 6 %global baserelease 10 # Limit build jobs on ppc64 systems to avoid running out of memory. %global _smp_mflags -j8 %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 Name: llvm-compat17 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++ BuildRequires: cmake BuildRequires: zlib-devel BuildRequires: libffi-devel BuildRequires: ncurses-devel BuildRequires: multilib-rpm-config BuildRequires: ninja-build # This pulls in /usr/bin/python3 BuildRequires: python3-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 Obsoletes: clang-libs = %{maj_ver}.%{min_ver} Provides: clang-libs = %{version}-%{release} Provides: clang-libs%{?_isa} = %{version}-%{release} Obsoletes: llvm-libs = %{maj_ver}.%{min_ver} Provides: llvm-libs = %{version}-%{release} Provides: llvm-libs%{?_isa} = %{version}-%{release} %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 %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 \ %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" \ -DLLVM_ENABLE_LIBCXX:BOOL=OFF \ -DLLVM_ENABLE_ZLIB:BOOL=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" \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} DESTDIR=%{buildroot} %__ninja %__ninja_common_opts popd %install cd .. DESTDIR=%{buildroot} %__ninja %__ninja_common_opts -l 8 -C llvm-build \ install-LLVM install-libclang install-clang-cpp # 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 # Remove unversioned symlinks rm -Rf %{buildroot}%{pkg_libdir}/libclang.so rm -Rf %{buildroot}%{pkg_libdir}/libclang-cpp.so %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}/libclang*.so.*