llvm12/llvm11.spec
Mikhail Novosyolov 3c60167028 Fix strange macro misexpantion on rpm5
A requested package cannot be installed:
llvm11-11.0.1-3-rosa2016.1.i586 (due to unsatisfied lib%{1})
2021-01-21 00:48:28 +03:00

244 lines
7.2 KiB
RPMSpec

%define oname llvm
%define _prefix /opt/%{name}
%define _bindir %{_prefix}/bin
%define _datadir %{_prefix}/share
%define _includedir %{_prefix}/include
%define _libdir %{_prefix}/%{_lib}
%define _libexecdir %{_prefix}/libexec
%define _mandir %{_prefix}/share/man
%define __cmake /usr/bin/cmake
%define debugcflags %{nil}
%define debug_package %{nil}
%global optflags %{optflags} -fno-strict-aliasing
%global ldflags %{ldflags} -Wl,-rpath,%{_libdir}
# clang header paths are hard-coded at compile time
# and need adjustment whenever there's a new GCC version
%define gcc_version %(gcc -dumpversion)
%define compile_apidox 0
%{?_with_apidox: %{expand: %%global compile_apidox 1}}
%define maj_ver 11
Summary: LLVM and Clang in %{_prefix}
# llvm11
Name: llvm%{maj_ver}
Version: %{maj_ver}.0.1
Release: 3
License: NCSA
Group: Development/Other
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}/clang-tools-extra-%{version}.src.tar.xz
Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/polly-%{version}.src.tar.xz
Source4: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}/compiler-rt-%{version}.src.tar.xz
Source1000: llvm%{maj_ver}.rpmlintrc
# Adjust the search paths to match the OS, adjust the default compiler flags
# as well.
Patch1: clang-rosa.patch
BuildRequires: binutils-devel
BuildRequires: bison
BuildRequires: chrpath
BuildRequires: cmake
BuildRequires: flex
BuildRequires: graphviz
BuildRequires: groff
BuildRequires: libstdc++-devel
BuildRequires: libtool
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libtirpc)
# patchelf is for %%check
BuildRequires: patchelf
BuildRequires: sed
BuildRequires: tcl
BuildRequires: zip
%if %{compile_apidox}
BuildRequires: doxygen
%endif
Requires: libstdc++-devel
# Do not provide libraries rom /opt and do not try to depend from them
# ! Nothing must be linked with libllvm etc. from here!
AutoReq: 0
AutoProv: 0
# Require this manually instead of AutoReq
%if %rpm4
Requires: %(patchelf --print-soname /usr/%{_lib}/libffi.so || echo foo)%{_arch_tag_suffix}
%else
# _arch_tag_suffix in needed form does not exist in rpm5, make a more dirty hack
Requires: %{_lib}ffi%(patchelf --print-soname /usr/%{_lib}/libffi.so | rev | cut -d. -f1 | rev)
%endif
%description
LVM is a robust system, particularly well suited for developing new mid-level
language-independent analyses and optimizations of all sorts, including those
that require extensive interprocedural analysis. LLVM is also a great target
for front-end development for conventional or research programming languages,
including those which require compile-time, link-time, or run-time optimization
for effective implementation, proper tail calls or garbage collection.
This package contains LLVM and Clang in %{_prefix}.
%files
%doc LICENSE.TXT
%doc README.txt
%doc docs/tutorial
%doc examples
%if %{compile_apidox}
%doc docs/doxygen
%endif
%{_bindir}/bugpoint
%{_bindir}/c-index-test
%{_bindir}/clang*
%{_bindir}/diagtool
%{_bindir}/dsymutil
%{_bindir}/find-all-symbols
%{_bindir}/git-clang-format
%{_bindir}/hmaptool
%{_bindir}/llc
%{_bindir}/lli
%{_bindir}/llvm*
%{_bindir}/modularize
%{_bindir}/obj2yaml
%{_bindir}/opt
%{_bindir}/pollyc++
%{_bindir}/pollycc
%{_bindir}/pp-trace
%{_bindir}/sancov
%{_bindir}/sanstats
%{_bindir}/scan-build
%{_bindir}/scan-view
%{_bindir}/verify-uselistorder
%{_bindir}/yaml2obj
%{_datadir}/clang
%{_datadir}/opt-viewer
%{_datadir}/scan-build/
%{_datadir}/scan-view/
%{_includedir}/clang
%{_includedir}/clang-c
%{_includedir}/clang-tidy
%{_includedir}/%{oname}
%{_includedir}/%{oname}-c
%{_includedir}/polly
%{_libdir}/BugpointPasses.so
%{_libdir}/clang/
%{_libdir}/cmake/clang/ClangConfig.cmake
%{_libdir}/cmake/clang/ClangTargets.cmake
%{_libdir}/cmake/clang/ClangTargets-relwithdebinfo.cmake
%{_libdir}/cmake/%{oname}/*
%{_libdir}/cmake/polly/*.cmake
%{_libdir}/libclang*.a
%{_libdir}/libclang*.so
%{_libdir}/libclang*.so.%{maj_ver}
%{_libdir}/libfindAllSymbols.a
%{_libdir}/libLLVM*.a
%{_libdir}/libLLVM-*.so
%{_libdir}/libLLVM.so
%{_libdir}/libLTO.so*
%{_libdir}/libPolly*.a
%{_libdir}/libRemarks.so*
%{_libdir}/LLVMgold.so
%{_libdir}/LLVMHello.so
%{_libdir}/LLVMPolly.so
%{_libexecdir}/c++-analyzer
%{_libexecdir}/ccc-analyzer
%{_mandir}/man1/scan-build.1
#----------------------------------------------------------------------------
%prep
%setup -qn %{oname}-%{version}.src -a1 -a2 -a3 -a4
rm -rf tools/clang
mv clang-%{version}.src tools/clang
mv polly-%{version}.src tools/polly
mv clang-tools-extra-%{version}.src tools/clang/tools/extra
mv compiler-rt-%{version}.src projects/compiler-rt
cd tools/clang
%patch1 -p1 -b .rosa~
cd -
%build
# Build with gcc/g++, not clang if it happens to be installed
export CC=gcc
export CXX=g++
# A couple more fixes from OMV + a workaround for a bug (?) in GCC 4.9:
# https://llvm.org/bugs/show_bug.cgi?id=20080 and
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659
# (-fno-devirtualize)
#
# compiler-rt assumes off_t is 64 bits -- make sure this is true even on
# 32 bit OSes
%ifarch %ix86
# compiler-rt doesn't support ix86 with x<6 either
export CFLAGS="%{optflags} -march=i686 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -g1"
export CXXFLAGS="%{optflags} -march=i686 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -fno-devirtualize -g1 -Wno-redundant-move"
%else
export CXXFLAGS="%{optflags} -fno-devirtualize -g1 -Wno-redundant-move"
%endif
%ifarch %ix86
# Fix noexecstack
for i in projects/compiler-rt/lib/builtins/i386/*.S; do
cat >>$i <<'EOF'
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif
EOF
done
%endif
%cmake \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DLLVM_LIBDIR_SUFFIX=$(echo %{_lib} | sed -e 's,^lib,,') \
-DCLANG_LIBDIR_SUFFIX=$(echo %{_lib} | sed -e 's,^lib,,') \
-DWITH_POLLY:BOOL=ON \
-DLINK_POLLY_INTO_TOOLS:BOOL=ON \
-DLLVM_ENABLE_FFI:BOOL=ON \
-DLLVM_ENABLE_RTTI:BOOL=ON \
-DLLVM_BINUTILS_INCDIR=%{_includedir} \
-DLLVM_INCLUDE_UTILS:BOOL=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DOCAMLFIND=NOTFOUND \
%if %{compile_apidox}
-DLLVM_INCLUDE_DOCS:BOOL=ON \
-DLLVM_BUILD_DOCS:BOOL=ON \
%endif
-DLLVM_OPTIMIZED_TABLEGEN=ON
%make -s
%install
%makeinstall_std -C build
# [From OMV]
# Polly bits as described on
# http://polly.llvm.org/example_load_Polly_into_clang.html
cat >%{buildroot}%{_bindir}/pollycc <<'EOF'
#!/bin/sh
exec %{_bindir}/clang -O3 -Xclang -load -Xclang %{_libdir}/LLVMPolly.so "$@"
EOF
cat >%{buildroot}%{_bindir}/pollyc++ <<'EOF'
#!/bin/sh
exec %{_bindir}/clang++ -O3 -Xclang -load -Xclang %{_libdir}/LLVMPolly.so "$@"
EOF
chmod 0755 %{buildroot}%{_bindir}/pollycc %{buildroot}%{_bindir}/pollyc++
# Install libraries used for testing
cp -a build/%{_lib}/BugpointPasses.so %{buildroot}%{_libdir}
cp -a build/%{_lib}/LLVMHello.so %{buildroot}%{_libdir}
# Versionize shebangs python
sed '1 s,^.*$,#!%{__python3},' -i %{buildroot}%{_bindir}/{hmaptool,scan-view}
%check
patchelf --print-rpath %{buildroot}%{_bindir}/clang | grep -q %{_libdir}