llvm12/llvm.spec
Evgenii Shatokhin 4393600447 Revert "Restore the building of R600 target"
This reverts commit 6d93944a0e.

"R600" is no longer available in LLVM. The target was renamed "AMDGPU"
and is not experimental now.
2015-12-02 12:08:45 +03:00

553 lines
16 KiB
RPMSpec

%define _disable_ld_no_undefined 0
%define debug_package %{nil}
%define debugcflags %{nil}
# 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}}
%bcond_without clang
%bcond_with ocaml
%define major_ver 3.7
%define minor_ver 0
Summary: Low Level Virtual Machine (LLVM)
Name: llvm
Version: %{major_ver}.%{minor_ver}
Release: 1
License: NCSA
Group: Development/Other
Url: http://llvm.org/
# There's a branch of LLVM maintained at
# git://people.freedesktop.org/~tstellar/llvm
# Ir is the working branch of the AMDGPU/R600 backend needed by Mesa (and is otherwise
# more or less identical to upstream llvm).
# At times it may be necessary to package this branch instead.
Source0: http://llvm.org/releases/%{version}/llvm-%{version}.src.tar.xz
Source1: http://llvm.org/releases/%{version}/cfe-%{version}.src.tar.xz
Source2: http://llvm.org/releases/%{version}/clang-tools-extra-%{version}.src.tar.xz
Source3: http://llvm.org/releases/%{version}/polly-%{version}.src.tar.xz
Source4: http://llvm.org/releases/%{version}/compiler-rt-%{version}.src.tar.xz
Source1000: llvm.rpmlintrc
# Versionize libclang.so (Anssi 08/2012):
Patch0: clang-soname.patch
# Adjust search paths to match the OS
Patch1: 0000-clang-mandriva.patch
# Claim compatibility with gcc 4.9.1 rather than 4.2.1, it's
# much much closer in terms of standards supported etc.
Patch7: clang-gcc-compat.patch
BuildRequires: bison
BuildRequires: binutils-devel
BuildRequires: chrpath
BuildRequires: flex
BuildRequires: graphviz
BuildRequires: groff
BuildRequires: libtool
%if %{with ocaml}
BuildRequires: ocaml
%endif
BuildRequires: sed
BuildRequires: tcl
BuildRequires: zip
BuildRequires: libstdc++-devel
#BuildRequires: pkgconfig(cloog-isl)
#BuildRequires: pkgconfig(isl) >= 0.13
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libtirpc)
%if %{compile_apidox}
BuildRequires: doxygen
%endif
Requires: libstdc++-devel
%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.
%files
%doc LICENSE.TXT
%{_bindir}/FileCheck
%{_bindir}/bugpoint
%{_bindir}/count
%{_bindir}/llc
%{_bindir}/lli
%{_bindir}/opt
%{_bindir}/lli-child-target
%{_bindir}/llvm-ar
%{_bindir}/llvm-as
%{_bindir}/llvm-bcanalyzer
%{_bindir}/llvm-diff
%{_bindir}/llvm-dis
%{_bindir}/llvm-extract
%{_bindir}/llvm-link
%{_bindir}/llvm-mc
%{_bindir}/llvm-nm
%{_bindir}/llvm-objdump
%{_bindir}/llvm-ranlib
%{_bindir}/llvm-readobj
%{_bindir}/llvm-cov
%{_bindir}/llvm-dwarfdump
%{_bindir}/llvm-mcmarkup
%{_bindir}/llvm-profdata
%{_bindir}/llvm-rtdyld
%{_bindir}/llvm-size
%{_bindir}/llvm-stress
%{_bindir}/llvm-symbolizer
%{_bindir}/llvm-tblgen
%{_bindir}/pp-trace
%{_bindir}/macho-dump
%{_bindir}/not
%{_bindir}/llvm-cxxdump
%{_bindir}/llvm-dsymutil
%{_bindir}/llvm-pdbdump
%{_bindir}/verify-uselistorder
%{_bindir}/obj2yaml
%{_bindir}/yaml2obj
%if %{with ocaml}
%{_libdir}/ocaml/*
%endif
#----------------------------------------------------------------------------
%define major %{major_ver}
%define libname %mklibname %{name} %{major}
%package -n %{libname}
Summary: LLVM shared libraries
Group: System/Libraries
Conflicts: llvm < 3.0-4
%description -n %{libname}
Shared libraries for the LLVM compiler infrastructure. This is needed by
programs that are dynamically linked against libLLVM.
%files -n %{libname}
%{_libdir}/libLLVM-%{major}.so
#----------------------------------------------------------------------------
%define devname %mklibname -d %{name}
%package -n %{devname}
Summary: Development files for LLVM
Group: Development/Other
Provides: llvm-devel = %{EVRD}
Requires: %{libname} = %{EVRD}
Requires: %{name} = %{EVRD}
Conflicts: llvm < 3.0-7
Conflicts: %{_lib}llvm3.0 < 3.0-9
%description -n %{devname}
This package contains the development files for LLVM.
%files -n %{devname}
%{_bindir}/%{name}-config
%{_libdir}/libLLVM.so
%{_includedir}/%{name}
%{_includedir}/%{name}-c
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/BugpointPasses.so
%{_libdir}/%{name}/libLLVM*.a
%{_libdir}/%{name}/libLLVM*.so
%{_libdir}/%{name}/libLTO.a
%{_libdir}/%{name}/libLTO.so
%{_libdir}/libLTO.so
%{_libdir}/%{name}/LLVMgold.so
%{_libdir}/LLVMgold.so
%if %{with ocaml}
%{_libdir}/%{name}/libllvm*.a
%endif
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/cmake
#----------------------------------------------------------------------------
%package doc
Summary: Documentation for LLVM
Group: Books/Computer books
Requires: %{name} = %{EVRD}
BuildArch: noarch
%description doc
Documentation for the LLVM compiler infrastructure.
%files doc
%doc README.txt
%doc docs/*.html
%doc docs/tutorial
%if %{with ocaml}
%doc docs/ocamldoc
%endif
%doc examples
%if %{compile_apidox}
%doc docs/doxygen
%endif
#----------------------------------------------------------------------------
%package polly
Summary: Polyhedral optimizations for LLVM
License: MIT
Group: Development/Other
%description polly
Polly is a polyhedral optimizer for LLVM.
Using an abstract mathematical representation it analyzes and optimizes
the memory access pattern of a program. This includes data-locality
optimizations for cache locality as well as automatic parallelization
for thread-level and SIMD parallelism.
Our overall goal is an integrated optimizer for data-locality and
parallelism that takes advantage of multi-cores, cache hierarchies,
short vector instructions as well as dedicated accelerators.
%files polly
%{_bindir}/pollycc
%{_bindir}/pollyc++
%{_libdir}/llvm/LLVMPolly.so
#----------------------------------------------------------------------------
%package polly-devel
Summary: Development files for Polly
License: MIT
Group: Development/Other
%description polly-devel
Development files for Polly.
Polly is a polyhedral optimizer for LLVM.
Using an abstract mathematical representation it analyzes and optimizes
the memory access pattern of a program. This includes data-locality
optimizations for cache locality as well as automatic parallelization
for thread-level and SIMD parallelism.
Our overall goal is an integrated optimizer for data-locality and
parallelism that takes advantage of multi-cores, cache hierarchies,
short vector instructions as well as dedicated accelerators.
%files polly-devel
%{_includedir}/polly
#----------------------------------------------------------------------------
%if %{with clang}
# TODO: %{_bindir}/clang is linked against static libclang.a, could it be
# linked against libclang.so instead, like llvm-* are against livLLVM.so?
%package -n clang
Summary: A C language family front-end for LLVM
License: NCSA
Group: Development/Other
# TODO: is this requires:llvm needed, or just legacy from fedora pkg layout?
Requires: llvm = %{EVRD}
# clang requires gcc, clang++ requires libstdc++-devel
Requires: gcc
Requires: libstdc++-devel >= %{gcc_version}
%description -n clang
clang: noun
1. A loud, resonant, metallic sound.
2. The strident call of a crane or goose.
3. C-language family front-end toolkit.
The goal of the Clang project is to create a new C, C++, Objective C
and Objective C++ front-end for the LLVM compiler. Its tools are built
as libraries and designed to be loosely-coupled and extensible.
%files -n clang
%doc clang-docs/*
%{_bindir}/clang*
%{_libdir}/llvm/libmodernizeCore.a
%{_bindir}/c-index-test
%{_prefix}/lib/clang
#doc _{_mandir}/man1/clang.1.*
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%define clang_major %{major_ver}
%define libclang %mklibname clang %{clang_major}
%package -n %{libclang}
Summary: Shared library for clang
Group: System/Libraries
%description -n %{libclang}
Shared libraries for the clang compiler. This is needed by
programs that are dynamically linked against libclang.
%files -n %{libclang}
%{_libdir}/libclang-%{clang_major}.so
%{_libdir}/libclang-%{clang_major}.%{minor_ver}.so
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%define devclang %mklibname -d clang
%package -n %{devclang}
Summary: Development files for clang
Group: Development/Other
Requires: %{libclang} = %{EVRD}
Provides: clang-devel = %{EVRD}
Conflicts: llvm-devel < 3.1
Obsoletes: clang-devel < 3.1
%description -n %{devclang}
This package contains header files and libraries needed for using
libclang.
%files -n %{devclang}
%{_includedir}/clang
%{_includedir}/clang-c
%{_libdir}/libclang.so
%dir %{_libdir}/%{name}
%{_libdir}/%{name}/libclang*.a
%{_libdir}/%{name}/libclang*.so
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%package -n clang-analyzer
Summary: A source code analysis framework
License: NCSA
Group: Development/Other
Requires: clang = %{EVRD}
# not picked up automatically since files are currently not instaled
# in standard Python hierarchies yet
Requires: python
%description -n clang-analyzer
The Clang Static Analyzer consists of both a source code analysis
framework and a standalone tool that finds bugs in C and Objective-C
programs. The standalone tool is invoked from the command-line, and is
intended to run in tandem with a build of a project or code base.
%files -n clang-analyzer
%{_bindir}/scan-build
%{_bindir}/scan-view
%{_libdir}/clang-analyzer
%endif
#----------------------------------------------------------------------------
%if %{with clang}
%package -n clang-doc
Summary: Documentation for Clang
Group: Books/Computer books
BuildArch: noarch
Requires: %{name} = %{EVRD}
%description -n clang-doc
Documentation for the Clang compiler front-end.
%files -n clang-doc
%doc clang-docs-full/*
%endif
#----------------------------------------------------------------------------
%prep
%setup -qn %{name}-%{version}.src %{?with_clang:-a1 -a2 -a3 -a4}
rm -rf tools/clang
%if %{with clang}
mv cfe-%{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
%patch0 -p0 -b .soname~
%patch1 -p1 -b .mandriva~
#patch8 -p3 -b .fuseLd~
cd -
#patch2 -p1 -b .armhf~
#patch3 -p1 -b .LLVMgold~
#patch4 -p1 -b .64bitLongs~
#patch5 -p1 -b .EnableGlobalMerge~
%endif
%patch7 -p1 -b .gcc49~
#patch6 -p1 -b .detectHardfloat~
#patch9 -p1 -b .enableShared~
%build
# Build with gcc/g++, not clang if it happens to be installed
export CC=gcc
export CXX=g++
# [From OMV]
# A couple more fixes from OMV + a workaround for
# 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} -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64"
export CXXFLAGS="%{optflags} -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -fno-devirtualize"
%else
export CXXFLAGS="%{optflags} -fno-devirtualize"
%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
# [/From OMV]
mkdir build
cd build
ln -s ../configure .
%configure2_5x \
--libdir=%{_libdir}/%{name} \
--datadir=%{_datadir}/%{name} \
--enable-shared \
--enable-polly \
--enable-cxx11 \
--enable-jit \
--enable-libffi \
--enable-optimized \
--enable-keep-symbols \
--enable-targets=all \
--disable-expensive-checks \
--enable-debug-runtime \
--disable-assertions \
--enable-threads \
--with-binutils-include=%{_includedir} \
%if %{with ocaml}
--enable-bindings=ocaml \
%else
--enable-bindings=none \
%endif
%if %{compile_apidox}
--enable-doxygen
%endif
# FIXME file this
# configure does not properly specify libdir
sed -i 's|(PROJ_prefix)/lib|(PROJ_prefix)/%{_lib}/%{name}|g' Makefile.config
# FIXME upstream need to fix this
# llvm-config.cpp hardcodes lib in it
cd ..
sed -i 's|ActiveLibDir = ActivePrefix + "/lib"|ActiveLibDir = ActivePrefix + "/%{_lib}/%{name}"|g' tools/llvm-config/llvm-config.cpp
# FIXME https://llvm.org/bugs/show_bug.cgi?id=22661
sed -ri "/ifeq.*CompilerTargetArch/s#i386#i586#g" projects/compiler-rt/make/platform/clang_linux.mk
cd build
%make
%install
%if %{with ocaml}
cp bindings/ocaml/llvm/META.llvm bindings/ocaml/llvm/Release/
%endif
pushd build
%makeinstall_std \
KEEP_SYMBOLS=1 \
PROJ_docsdir=%{_docdir}/%{name} \
PROJ_etcdir=%{_sysconfdir}/%{name} \
PROJ_libdir=%{_libdir}/%{name}
popd
# Invalid dir
rm -rf %{buildroot}%{_bindir}/.dir
# wrong rpath entries (Anssi 11/2011)
file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
file %{buildroot}/%{_libdir}/llvm/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
# move shared libraries to standard library path and add devel symlink (Anssi 11/2011)
mv %{buildroot}%{_libdir}/llvm/libLLVM-%{major}.so %{buildroot}%{_libdir}
ln -s libLLVM-%{major}.so %{buildroot}%{_libdir}/libLLVM.so
ln -s llvm/LLVMgold.so %{buildroot}%{_libdir}/
ln -s llvm/libLTO.so %{buildroot}%{_libdir}/
# Also, create shared library symlinks corresponding to all the static library
# names, so that using e.g. "-lLLVMBitReader" will cause the binary to be linked
# against the shared library instead of static library by default. (Anssi 08/2012)
for staticlib in %{buildroot}%{_libdir}/llvm/libLLVM*.a; do
sharedlib="${staticlib%.a}.so"
[ -e "$sharedlib" ] && exit 1
ln -s ../libLLVM.so "$sharedlib"
done
%if %{with clang}
# Versionize libclang.so (patch0 makes the same change to soname) and move it to standard path.
mv %{buildroot}%{_libdir}/llvm/libclang.so %{buildroot}%{_libdir}/libclang-%{clang_major}.so
ln -s libclang-%{clang_major}.so %{buildroot}%{_libdir}/libclang.so
ln -s ../libclang.so %{buildroot}%{_libdir}/llvm/libclang.so
# NOTE: We don't create devel symlinks for the libclang.so for libclang*.a libraries
# like for libLLVM above, because libclang.so actually exports much less symbols
# - some are not linked in (tools/libclang/Makefile) and others are restricted
# by tools/libclang/libclang.exports. - Anssi 09/2012
%endif
# Since the static libraries are very huge, strip them of debug symbols as well
# (Anssi 08/2012)
strip --strip-debug %{buildroot}%{_libdir}/llvm/*.a
%if %{with clang}
# Static analyzer not installed by default:
# http://clang-analyzer.llvm.org/installation#OtherPlatforms
mkdir -p %{buildroot}%{_libdir}/clang-analyzer
# create launchers
for f in scan-{build,view}; do
ln -s %{_libdir}/clang-analyzer/$f/$f %{buildroot}%{_bindir}/$f
done
(cd tools/clang/tools && cp -pr scan-{build,view} \
%{buildroot}%{_libdir}/clang-analyzer/)
# And prepare Clang documentation
#
rm -rf clang-docs
mkdir clang-docs
for f in LICENSE.TXT NOTES.txt README.txt; do # TODO.txt; do
ln tools/clang/$f clang-docs/
done
rm -rf clang-docs-full
cp -al tools/clang/docs clang-docs-full
rm -rf clang-docs-full/{doxygen*,Makefile*,*.graffle,tools}
# 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}/llvm/LLVMPolly.so "$@"
EOF
cat >%{buildroot}%{_bindir}/pollyc++ <<'EOF'
#!/bin/sh
exec %{_bindir}/clang++ -O3 -Xclang -load -Xclang %{_libdir}/llvm/LLVMPolly.so "$@"
EOF
chmod 0755 %{buildroot}%{_bindir}/pollycc %{buildroot}%{_bindir}/pollyc++
%endif
# Get rid of erroneously installed example files.
rm %{buildroot}%{_libdir}/%{name}/LLVMHello.so
# Fix bogus permissions
find %{buildroot} -name "*.a" -a -type f|xargs chmod 0644