# # spec file for package llvm # # Copyright (c) 2011 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 145598 %define _release_version 3.0 %define _supported_archs "ARM;X86" Name: llvm Version: 3.0 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 set-revision.patch idoenmez@suse.de -- Use correct lib prefix Patch2: clang-cmake-lib.patch # PATCH-FIX-OPENSUSE assume-opensuse.patch idoenmez@suse.de -- Always enable openSUSE/SUSE features Patch3: assume-opensuse.patch # PATCH-FIX-UPSTREAM clang-glibc2.14.patch idoenmez@suse.de -- Support glibc 2.14 headers Patch4: clang-glibc2.14.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autoconf BuildRequires: automake %if 0%{?suse_version} >= 1220 BuildRequires: binutils-devel >= 2.21.90 %endif BuildRequires: bison BuildRequires: chrpath BuildRequires: cmake BuildRequires: dejagnu BuildRequires: fdupes BuildRequires: flex BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: libtool BuildRequires: python-devel BuildRequires: tcl-devel BuildRequires: tk-devel # Code10 does not have libffi %if 0%{?suse_version} > 1100 BuildRequires: libffi-devel %endif # LLVM is not supported on PPC64 # http://llvm.org/bugs/show_bug.cgi?id=3729 ExcludeArch: ppc64 %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 devel Summary: Libraries and Header Files for LLVM Group: Development/Languages/Other Requires: %{name} = %{version} Requires: libffi-devel Requires: libstdc++-devel >= 3.4 %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} Provides: clang %{py_requires} %description clang This package contains the clang (C language) frontend for LLVM. %package clang-devel Summary: CLANG frontend for LLVM (devel package) Group: Development/Languages/Other Requires: llvm-devel = %{version} Requires: clang = %{version} %{py_requires} %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 %patch1 %patch2 %patch3 cd tools/clang %patch4 cd ../.. sed -i s,SVN_REVISION,\"%{_revision}\",g tools/clang/lib/Basic/Version.cpp # Nasty hardcoded path sed -i s,/lib/,/%{_lib}/,g tools/clang/lib/Driver/Tools.cpp %build TOPLEVEL=$PWD mkdir stage1 stage2 stage3 pushd stage1 # Idiot cmake doesn't let me select my own optimization level here # hence we use configure, this needed to workaround a gcc 4.5 bug ../configure \ --enable-optimized \ --disable-assertions \ --with-optimize-option="-O0" \ --enable-targets=host make %{?_smp_mflags} popd pushd stage2 export CC=$TOPLEVEL/stage1/Release/bin/clang export CXX=$TOPLEVEL/stage1/Release/bin/clang++ cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD=%{_supported_archs} \ .. make %{?_smp_mflags} popd pushd stage3 # Needed to make clang resource dir working inside build tree ln -s lib lib64 export CC=$TOPLEVEL/stage2/bin/clang export CXX=$TOPLEVEL/stage2/bin/clang++ cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=FALSE \ -DLLVM_ENABLE_PIC=TRUE \ -DLLVM_ENABLE_TIMESTAMPS=FALSE \ -DLLVM_TARGETS_TO_BUILD=%{_supported_archs} \ -DCLANG_VENDOR="SUSE Linux" \ %if "%{_lib}" == "lib64" -DLLVM_LIBDIR_SUFFIX=64 \ %endif %if 0%{?suse_version} >= 1220 -DLLVM_BINUTILS_INCDIR=/usr/include \ %endif -DCLANG_RESOURCE_DIR="../%{_lib}/clang/%{_release_version}" \ .. make %{?_smp_mflags} %check cd stage3 make check make clang-test %install cd stage3 %makeinstall cd .. # Fixup libdir %if "%{_lib}" == "lib64" sed -i s,ABS_RUN_DIR/lib,ABS_RUN_DIR/lib64, %{buildroot}/%{_bindir}/llvm-config %endif # cleanup file %{buildroot}/%{_bindir}/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d file %{buildroot}/%{_libdir}/%{name}/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d find %{buildroot}%{_includedir}/clang -name '*.tmp' -exec rm {} + for file in `find examples -type f`; do install -d %{buildroot}%{_docdir}/%{name}-doc/`dirname $file` install -m 644 $file %{buildroot}%{_docdir}/%{name}-doc/$file done find %{buildroot}%{_docdir}/%{name}-doc/ -name '*.tar.gz' -exec rm {} \; # 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 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 # Create man pages because cmake buildsystem doesn't do for us install -m 755 -d %{buildroot}%{_mandir}/man1 # tblgen is not installed anymore. rm docs/CommandGuide/tblgen.pod for i in docs/CommandGuide/*.pod tools/clang/docs/tools/*.pod; do page=`echo $i|awk -F"/" '{print $(NF)}'|sed s,.pod,,` && pod2man -s1 $i %{buildroot}%{_mandir}/man1/$page.1; done # Remove gtest library rm -f %{buildroot}%{_libdir}/*gtest* # Wrong lib name + static rm -f %{buildroot}%{_libdir}/liblibclang.a # Stuff we don't want to include rm -f %{buildroot}%{_libdir}/BugpointPasses.* rm -f %{buildroot}%{_libdir}/LLVMHello.* rm -f %{buildroot}%{_libdir}/libCompilerDriver.* rm -f %{buildroot}%{_libdir}/libEnhancedDisassembly.* %fdupes -s %{buildroot}%{_docdir}/%{name} %fdupes -s %{buildroot}%{_docdir}/%{name}-doc %post clang -p /sbin/ldconfig %postun clang -p /sbin/ldconfig %post clang-devel -p /sbin/ldconfig %postun clang-devel -p /sbin/ldconfig %files %defattr(-,root,root) %doc *.TXT *.txt %{_bindir}/bugpoint %{_bindir}/diagtool %{_bindir}/llc %{_bindir}/lli %{_bindir}/macho-dump %exclude %{_bindir}/%{name}-config %{_bindir}/%{name}* %{_bindir}/opt %{_mandir}/man1/bugpoint.1%{ext_man} %exclude %{_mandir}/man1/lit.1%{ext_man} %{_mandir}/man1/llc.1%{ext_man} %{_mandir}/man1/lli.1%{ext_man} %exclude %{_mandir}/man1/%{name}-config.1%{ext_man} %{_mandir}/man1/llvm*.1%{ext_man} %{_mandir}/man1/opt.1%{ext_man} %{_mandir}/man1/FileCheck.1%{ext_man} %files clang %defattr(-,root,root) %{_bindir}/clang %{_bindir}/clang-* %{_bindir}/clang++ %{_bindir}/c-index-test %{_bindir}/ccc-analyzer %{_bindir}/c++-analyzer %{_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.gz %{_libdir}/libclang.so.* %{_libdir}/libLTO.a %{_libdir}/*profile*.a %if 0%{?suse_version} >= 1220 %{_libdir}/LLVMgold.so %endif %dir %{_libdir}/clang %dir %{_libdir}/clang/* %dir %{_libdir}/clang/*/include %{_libdir}/clang/*/include/altivec.h %{_libdir}/clang/*/include/arm_neon.h %{_libdir}/clang/*/include/avxintrin.h %{_libdir}/clang/*/include/emmintrin.h %{_libdir}/clang/*/include/float.h %{_libdir}/clang/*/include/immintrin.h %{_libdir}/clang/*/include/iso646.h %{_libdir}/clang/*/include/limits.h %{_libdir}/clang/*/include/mm_malloc.h %{_libdir}/clang/*/include/mmintrin.h %{_libdir}/clang/*/include/nmmintrin.h %{_libdir}/clang/*/include/pmmintrin.h %{_libdir}/clang/*/include/smmintrin.h %{_libdir}/clang/*/include/stdalign.h %{_libdir}/clang/*/include/stdarg.h %{_libdir}/clang/*/include/stdbool.h %{_libdir}/clang/*/include/stddef.h %{_libdir}/clang/*/include/stdint.h %{_libdir}/clang/*/include/tgmath.h %{_libdir}/clang/*/include/tmmintrin.h %{_libdir}/clang/*/include/varargs.h %{_libdir}/clang/*/include/wmmintrin.h %{_libdir}/clang/*/include/x86intrin.h %{_libdir}/clang/*/include/xmmintrin.h %{_libdir}/clang/*/include/mm3dnow.h %files clang-devel %defattr(-,root,root) %{_includedir}/clang %{_includedir}/clang-c %{_libdir}/libclang.so %{_libdir}/libLTO.so %{_libdir}/libclang*.a %{_libdir}/*profile*.so %files devel %defattr(-,root,root,-) %{_bindir}/%{name}-config %dir %{_datadir}/llvm/ %{_datadir}/llvm/* %doc %{_mandir}/man1/%{name}-config.1%{ext_man} %{_includedir}/%{name}/ %{_includedir}/%{name}-c/ %{_libdir}/libLLVM* %files doc %defattr(-,root,root,-) %{_docdir}/%{name}-doc %files vim-plugins %defattr(-,root,root,-) %doc utils/vim/README.vim %{_datadir}/vim/ %changelog