llvm/llvm.spec

487 lines
13 KiB
RPMSpec

#
# spec file for package llvm
#
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# 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 http://bugs.opensuse.org/
#
%define _revision 195116
%define _release_version 3.4
Name: llvm
Version: 3.3.93
Release: 0
Summary: Low Level Virtual Machine
License: NCSA
Group: Development/Languages/Other
Url: http://www.llvm.org
Source0: %{name}-%{version}.tar.bz2
Source100: %{name}-rpmlintrc
# PATCH-FIX-OPENSUSE set-revision.patch idoenmez@suse.de -- Allow us to set revision
Patch1: set-revision.patch
# PATCH-FIX-OPENSUSE assume-opensuse.patch idoenmez@suse.de -- Always enable openSUSE/SUSE features
Patch2: assume-opensuse.patch
# PATCH-FIX-OPENSUSE clang-disable-ada-extension.patch idoenmez@suse.de -- Don't run gcc for ada files
Patch3: clang-disable-ada-extension.patch
# PATCH-FIX-OPENSUSE default-to-i586.patch -- Use i586 as default target for 32bit
Patch4: default-to-i586.patch
Patch5: llvm-config-lib64.patch
# PATCH-FIX-OPENSUSE arm_suse_support.diff --Enable ARM suse toolchain support
Patch6: arm_suse_support.diff
Patch8: cmake-host-triple.patch
# PATCH-FIX-OPENSUSE aarch64-suse-support.patch -- Enable AArch64 suse toolchain support
Patch9: aarch64-suse-support.patch
# PATCH-FIX-OPENSUSE llvm-no-visibility.patch -- Disable visibility
Patch10: llvm-no-visibility.patch
Patch12: arm-remove-xfails.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: cmake
%if 0%{?suse_version} >= 1220
BuildRequires: binutils-devel >= 2.21.90
%endif
BuildRequires: bison
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: groff
BuildRequires: libffi-devel
BuildRequires: libtool
BuildRequires: python-base
Requires: libLLVM = %{version}-%{release}
# llvm does not work on ppc, only ppc64
ExcludeArch: ppc
%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 -n libLLVM
Summary: Libraries for LLVM
Group: Development/Libraries/C and C++
%description -n libLLVM
This package contains the shared libraries needed for LLVM.
%package devel
Summary: Header Files for LLVM
Group: Development/Languages/Other
Requires: %{name} = %{version}
Requires: libffi-devel
Requires: libstdc++-devel >= 3.4
Obsoletes: llvm-doc < %{version}
Provides: llvm-doc = %{version}
%description devel
This package contains library and header files needed to develop
new native programs that use the LLVM infrastructure.
%package doc
Summary: Documentation for LLVM
Group: Documentation/HTML
Requires: %{name} = %{version}
%description doc
Documentation for the LLVM compiler infrastructure.
%package clang
Summary: CLANG frontend for LLVM
Group: Development/Languages/Other
Requires: %{name} = %{version}
Requires: binutils
Requires: libclang = %{version}-%{release}
Requires: libstdc++-devel
Provides: clang
%description clang
This package contains the clang (C language) frontend for LLVM.
%package -n libclang
Summary: Library files needed for clang
Group: Development/Libraries/C and C++
%description -n libclang
This package contains the shared libraries needed for clang.
%package clang-devel
Summary: CLANG frontend for LLVM (devel package)
Group: Development/Languages/Other
Requires: clang = %{version}
Requires: llvm-devel = %{version}
%description clang-devel
This package contains the clang (C language) frontend for LLVM.
(development files)
%package vim-plugins
Summary: Vim plugins for LLVM
Group: Productivity/Text/Editors
Requires: vim
%description vim-plugins
This package contains vim plugins for LLVM like syntax highlighting.
%prep
%setup -q -n %{name}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%if "%{_lib}" == "lib64"
%patch5 -p1
%endif
%patch6 -p1
%patch8 -p1
%patch9 -p1
%ifarch s390 s390x
%patch10 -p1
%endif
%patch12
# We hardcode i586
rm tools/clang/test/Driver/x86_features.c
# lib64 related problems on 64bit
%if "%{_lib}" == "lib64"
rm tools/clang/test/Driver/linux-ld.c
%endif
sed -i s,SVN_REVISION,\"%{_revision}\",g tools/clang/lib/Basic/Version.cpp
sed -i s,LLVM_REVISION,\"%{_revision}\",g tools/clang/lib/Basic/Version.cpp
%if "%{_lib}" == "lib64"
# Nasty hardcoded path
sed -i s,"/lib/","/lib64/",g tools/clang/lib/Driver/Tools.cpp \
tools/clang/test/Driver/dyld-prefix.c
sed -i s,"}lib{","}lib64{",g tools/clang/test/Preprocessor/iwithprefix.c
%endif
# Only enable target archs otherwise llvm-config is messed up
%ifnarch %arm ppc64 s390x
sed -i s,"subdirectories = .*","subdirectories = AArch64 ARM PowerPC R600 X86", lib/Target/LLVMBuild.txt
%endif
%ifarch %arm
sed -i s,"subdirectories = .*","subdirectories = ARM", lib/Target/LLVMBuild.txt
%endif
%ifarch ppc64
sed -i s,"subdirectories = .*","subdirectories = PowerPC", lib/Target/LLVMBuild.txt
%endif
%ifarch s390x
sed -i s,"subdirectories = .*","subdirectories = SystemZ", lib/Target/LLVMBuild.txt
%endif
sed -i s,"IntelJITEvents OProfileJIT","", lib/ExecutionEngine/LLVMBuild.txt
echo > utils/unittest/LLVMBuild.txt
%build
TOPLEVEL=$PWD
mkdir stage1 stage2
pushd stage1
# Define host-triple
%ifarch %{ix86}
%define host_triple i586-suse-linux
%endif
%ifarch x86_64
%define host_triple x86_64-suse-linux
%endif
%ifarch armv6hl
%define host_triple armv6hl-suse-linux-gnueabi
%endif
%ifarch armv7hl
%define host_triple armv7hl-suse-linux-gnueabi
%endif
%ifarch aarch64
%define host_triple aarch64-suse-linux
%endif
%ifarch ppc64
%define host_triple powerpc64-suse-linux
sed -i s,'${CMAKE_SYSTEM_PROCESSOR}','"PowerPC"',g ../cmake/modules/AddLLVM.cmake
rm -rf ../projects/compiler-rt
%endif
%ifarch s390x
%define host_triple s390x-suse-linux
sed -i s,'${CMAKE_SYSTEM_PROCESSOR}','"SystemZ"',g ../cmake/modules/AddLLVM.cmake
%endif
cmake -G "Unix Makefiles" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_TARGETS_TO_BUILD=host \
-DCMAKE_C_FLAGS="-O0" \
-DCMAKE_CXX_FLAGS="-O0" \
-DLLVM_HOST_TRIPLE=%{host_triple} \
..
make %{?_smp_mflags} VERBOSE=1 clang
popd
pushd stage2
export CC=$TOPLEVEL/stage1/bin/clang
export CXX=$TOPLEVEL/stage1/bin/clang++
cmake -G "Unix Makefiles" \
%ifnarch ppc64
-DBUILD_SHARED_LIBS=ON \
%endif
%ifarch %arm ppc64
-DCMAKE_BUILD_TYPE=Release \
%else
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DLLVM_HOST_TRIPLE=%{host_triple} \
%endif
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
%ifarch armv6hl
-DCMAKE_C_FLAGS="-mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp" \
-DCMAKE_CXX_FLAGS="-mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp" \
%endif
%ifarch armv7hl
-DCMAKE_C_FLAGS="-mfloat-abi=hard -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16" \
-DCMAKE_CXX_FLAGS="-mfloat-abi=hard -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16" \
%endif
%if "%{_lib}" == "lib64"
-DLLVM_LIBDIR_SUFFIX=64 \
-DCLANG_RESOURCE_DIR=../%{_lib}/clang/%{_release_version} \
%endif
-DLLVM_REQUIRES_RTTI=ON \
-DLLVM_ENABLE_TIMESTAMPS=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_PIC=ON \
%if 0%{?suse_version} >= 1220
-DLLVM_BINUTILS_INCDIR=/usr/include \
%endif
%ifarch %{ix86} x86_64
-DLLVM_TARGETS_TO_BUILD="host;R600" \
%else
-DLLVM_TARGETS_TO_BUILD=host \
%endif
..
make %{?_smp_mflags} VERBOSE=1
%check
cd stage2
%ifnarch armv7hl armv7l
%if 0%{!?qemu_user_space_build:1}
# we just do not have enough memory with qemu emulation
%if "%{_lib}" == "lib64"
ln -s lib lib64
%endif
# Due to http://llvm.org/bugs/show_bug.cgi?id=15242
for i in crash-narrowfunctiontest metadata remove_arguments_test; do
rm ../test/BugPoint/$i.ll;
done
%ifarch s390 s390x
for i in TestClassDecl.m TestClassForwardDecl.m c-index-getCursor-test.m; do
rm ../tools/clang/test/Index/$i;
done
%endif
make check
make clang-test
%endif
%endif
%install
cd stage2
make install DESTDIR=%{buildroot}
cd ..
# Build man/html pages
cd docs
# Docs are prebuilt due to sphinx dependency -- cartman
#make -f Makefile.sphinx html man
rm -rf %{buildroot}/usr/docs
mkdir -p %{buildroot}%{_docdir}/llvm/html
mkdir -p %{buildroot}/usr/share/man/man1
cp -r _build/man/* %{buildroot}/usr/share/man/man1
cp -r _build/html/* %{buildroot}%{_docdir}/llvm/html
cd ../tools/clang/docs
mkdir -p %{buildroot}%{_docdir}/llvm-clang/html
cp -r _build/man/* %{buildroot}/usr/share/man/man1
cp -r _build/html/* %{buildroot}%{_docdir}/llvm-clang/html
cd ../../..
# install scan-build et al
install -d %{buildroot}%{_datadir}/clang
install -d %{buildroot}%{py_sitedir}
pushd tools/clang/tools
for file in scan-build/ccc-analyzer scan-build/scan-build \
scan-view/scan-view; do
install $file %{buildroot}%{_bindir}
done
for file in scan-build/scanview.css scan-build/sorttable.js; do
install -m 644 $file %{buildroot}%{_datadir}/clang/
done
for file in scan-view/Reporter.py scan-view/ScanView.py \
scan-view/startfile.py; do
install -m 644 $file %{buildroot}%{py_sitedir}
done
install -d %{buildroot}%{py_sitedir}/Resources/
for file in scan-view/Resources/*; do
install -m 644 $file %{buildroot}%{py_sitedir}/Resources/
done
popd
pushd %{buildroot}%{_bindir}
ln -s ccc-analyzer c++-analyzer
popd
%if 0%{?suse_version} >= 1220
mkdir -p %{buildroot}%{_libdir}/bfd-plugins
ln -s %{_libdir}/LLVMgold.so %{buildroot}%{_libdir}/bfd-plugins/
%endif
sed -i 's,RealBin/bin/clang,RealBin/clang,' \
%{buildroot}%{_bindir}/scan-build
sed -i 's,RealBin/bin/ccc-analyzer,RealBin/ccc-analyzer,' \
%{buildroot}%{_bindir}/scan-build
sed -i 's,RealBin/bin/ccc-analyzer,RealBin/ccc-analyzer,' \
%{buildroot}%{_bindir}/scan-build
sed -i 's,$RealBin/sorttable.js,%{_datadir}/clang/sorttable.js,' \
%{buildroot}%{_bindir}/scan-build
sed -i 's,$RealBin/scanview.css,%{_datadir}/clang/scanview.css,' \
%{buildroot}%{_bindir}/scan-build
sed -i 's,RealBin/bin,RealBin,' \
%{buildroot}%{_bindir}/scan-build
install -m 755 -d %{buildroot}%{_datadir}/vim/site/syntax/
install -m 644 utils/vim/*.vim %{buildroot}%{_datadir}/vim/site/syntax/
mv utils/vim/README utils/vim/README.vim
# Stuff we don't want to include
rm %{buildroot}%{_libdir}/BugpointPasses.*
rm %{buildroot}%{_libdir}/LLVMHello.*
rm %{buildroot}%{_libdir}/libgtest*
rm %{buildroot}%{_mandir}/man1/lit.1
# Remove cmake files
rm -rf %{buildroot}/usr/share/llvm/cmake
%fdupes -s %{buildroot}%{_docdir}/%{name}
%fdupes -s %{buildroot}%{_docdir}/%{name}-doc
%post -n libLLVM -p /sbin/ldconfig
%postun -n libLLVM -p /sbin/ldconfig
%post -n libclang -p /sbin/ldconfig
%postun -n libclang -p /sbin/ldconfig
%post clang-devel -p /sbin/ldconfig
%postun clang-devel -p /sbin/ldconfig
%files
%defattr(-,root,root)
%{_bindir}/bugpoint
%{_bindir}/llc
%{_bindir}/lli
%{_bindir}/lli-child-target
%{_bindir}/macho-dump
%exclude %{_bindir}/%{name}-config
%{_bindir}/%{name}*
%{_bindir}/opt
%exclude %{_mandir}/man1/%{name}-config.1%{ext_man}
%{_mandir}/man1/bugpoint.1%{ext_man}
%{_mandir}/man1/tblgen.1%{ext_man}
%{_mandir}/man1/llc.1%{ext_man}
%{_mandir}/man1/lli.1%{ext_man}
%{_mandir}/man1/llvm*.1%{ext_man}
%{_mandir}/man1/FileCheck.1%{ext_man}
%{_mandir}/man1/opt.1%{ext_man}
%files -n libLLVM
%defattr(-,root,root,-)
%{_libdir}/libLLVM*
%files clang
%defattr(-,root,root)
%{_bindir}/clang
%{_bindir}/clang-*
%{_bindir}/clang++
%{_bindir}/clang-format
%{_bindir}/ccc-analyzer
%{_bindir}/c++-analyzer
%{_bindir}/git-clang-format
%{_bindir}/scan-build
%{_bindir}/scan-view
%{py_sitedir}/ScanView.py
%{py_sitedir}/Reporter.py
%{py_sitedir}/startfile.py
%{py_sitedir}/Resources
%{_datadir}/clang
%{_mandir}/man1/clang.1%{ext_man}
%{_libdir}/libLTO.*
%if 0%{?suse_version} >= 1220
%{_libdir}/LLVMgold.so
%{_libdir}/bfd-plugins/
%endif
%{_libdir}/clang
%ifnarch %arm aarch64 ppc64 s390 s390x
%{_libdir}/clang/%{_release_version}/lib/linux/
%endif
%files -n libclang
%defattr(-,root,root,-)
%exclude %{_libdir}/libclang.so
%{_libdir}/libclang*.so
%{_libdir}/libclang.so.*
%ifarch ppc64
%{_libdir}/libclang*.a
%endif
%files clang-devel
%defattr(-,root,root)
%{_libdir}/libclang.so
%{_includedir}/clang
%{_includedir}/clang-c
%doc %{_docdir}/llvm-clang
%files devel
%defattr(-,root,root,-)
%{_bindir}/%{name}-config
%doc %{_mandir}/man1/%{name}-config.1%{ext_man}
%{_includedir}/%{name}/
%{_includedir}/%{name}-c/
%doc %{_docdir}/%{name}
%files vim-plugins
%defattr(-,root,root,-)
%doc utils/vim/README.vim
%{_datadir}/vim/
%changelog