From 687c13802d20f2ff1f155ac607f7936f44faeafb Mon Sep 17 00:00:00 2001 From: Michel Alexandre Salim Date: Mon, 1 Aug 2011 18:50:42 +0200 Subject: [PATCH] Depend on libffi to allow the LLVM interpreter to call external functions Build with RTTI enabled, needed by e.g. Rubinius (# 722714) Fix multilib installation --- clang-2.9-add_gcc_vers.patch | 12 ++++++ llvm-Config-config.h | 9 +++++ llvm-Config-llvm-config.h | 9 +++++ llvm.spec | 76 ++++++++++++++++++++++++++++++------ 4 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 clang-2.9-add_gcc_vers.patch create mode 100644 llvm-Config-config.h create mode 100644 llvm-Config-llvm-config.h diff --git a/clang-2.9-add_gcc_vers.patch b/clang-2.9-add_gcc_vers.patch new file mode 100644 index 0000000..03afe49 --- /dev/null +++ b/clang-2.9-add_gcc_vers.patch @@ -0,0 +1,12 @@ +--- clang-2.9/lib/Driver/ToolChains.cpp.add_gcc_vers 2011-03-21 22:29:27.000000000 +0100 ++++ clang-2.9/lib/Driver/ToolChains.cpp 2011-08-01 18:20:29.504194241 +0200 +@@ -1449,7 +1449,8 @@ + GccTriple = "i586-suse-linux"; + } + +- const char* GccVersions[] = {"4.5.2", "4.5.1", "4.5", "4.4.5", "4.4.4", ++ const char* GccVersions[] = {"4.6.1", "4.6.0", ++ "4.5.2", "4.5.1", "4.5", "4.4.5", "4.4.4", + "4.4.3", "4.4", "4.3.4", "4.3.3", "4.3.2", + "4.3", "4.2.4", "4.2.3", "4.2.2", "4.2.1", + "4.2"}; diff --git a/llvm-Config-config.h b/llvm-Config-config.h new file mode 100644 index 0000000..c369b45 --- /dev/null +++ b/llvm-Config-config.h @@ -0,0 +1,9 @@ +#include + +#if __WORDSIZE == 32 +#include "config-32.h" +#elif __WORDSIZE == 64 +#include "config-64.h" +#else +#error "Unknown word size" +#endif diff --git a/llvm-Config-llvm-config.h b/llvm-Config-llvm-config.h new file mode 100644 index 0000000..2fa08c9 --- /dev/null +++ b/llvm-Config-llvm-config.h @@ -0,0 +1,9 @@ +#include + +#if __WORDSIZE == 32 +#include "llvm-config-32.h" +#elif __WORDSIZE == 64 +#include "llvm-config-64.h" +#else +#error "Unknown word size" +#endif diff --git a/llvm.spec b/llvm.spec index 77ee964..ec62c8e 100644 --- a/llvm.spec +++ b/llvm.spec @@ -12,7 +12,7 @@ Name: llvm Version: 2.8 -Release: 11%{?dist} +Release: 12%{?dist} Summary: The Low Level Virtual Machine Group: Development/Languages @@ -20,19 +20,31 @@ License: NCSA URL: http://llvm.org/ Source0: http://llvm.org/releases/%{version}/llvm-%{version}.tgz Source1: http://llvm.org/releases/%{version}/clang-%{version}.tgz +# multilib fixes +Source2: llvm-Config-config.h +Source3: llvm-Config-llvm-config.h + # Data files should be installed with timestamps preserved Patch0: llvm-2.6-timestamp.patch # rename alignof -> alignOf for C++0x support # http://llvm.org/bugs/show_bug.cgi?id=8423 Patch1: llvm-2.8-alignOf.patch Patch2: clang-2.8-alignOf.patch +# Disable broken AVX code generation +# http://llvm.org/bugs/show_bug.cgi?id=9508 Patch3: llvm-2.8-disable-avx.patch +# clang link failure if system GCC version is unknown +# http://llvm.org/bugs/show_bug.cgi?id=8897 +# Patch4: clang-2.9-add_gcc_vers.patch + + BuildRequires: bison BuildRequires: chrpath BuildRequires: flex BuildRequires: gcc-c++ >= 3.4 BuildRequires: groff +BuildRequires: libffi-devel BuildRequires: libtool-ltdl-devel %if %{with ocaml} BuildRequires: ocaml-ocamldoc @@ -64,6 +76,8 @@ Requires: %{name} = %{version}-%{release} Requires: libstdc++-devel >= 3.4 Provides: llvm-static = %{version}-%{release} +Requires(posttrans): /usr/sbin/alternatives +Requires(postun): /usr/sbin/alternatives %description devel This package contains library and header files needed to develop new @@ -207,12 +221,16 @@ HTML documentation for LLVM's OCaml binding. %setup -q -n llvm-%{version} -a1 %{?_with_gcc:-a2} mv clang-%{version} tools/clang +# llvm patches %patch0 -p1 -b .timestamp %patch1 -p0 -b .alignOf +%patch3 -p1 -b .avx + +# clang patches pushd tools/clang %patch2 -p0 -b .alignOf +#patch3 -p1 -b .add_gcc_ver popd -%patch3 -p1 -b .avx # Encoding fix #(cd tools/clang/docs && \ @@ -233,6 +251,7 @@ popd --disable-assertions \ --enable-debug-runtime \ --enable-jit \ + --enable-libffi \ --enable-shared \ --with-c-include-dirs=%{_includedir}:$(find %{_prefix}/lib/gcc/*/* \ -maxdepth 0 -type d)/include \ @@ -244,7 +263,7 @@ popd # configure does not properly specify libdir sed -i 's|(PROJ_prefix)/lib|(PROJ_prefix)/%{_lib}/%{name}|g' Makefile.config -make %{_smp_mflags} \ +make %{_smp_mflags} REQUIRES_RTTI=1 \ %ifarch ppc OPTIMIZE_OPTION="%{optflags} -fno-var-tracking-assignments" %else @@ -252,17 +271,21 @@ make %{_smp_mflags} \ %endif -%check -# no current unexpected failures. Use || true if they recur to force ignore -make check 2>&1 | tee llvm-testlog.txt -(cd tools/clang && make test 2>&1) | tee clang-testlog.txt - - %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} \ PROJ_docsdir=/moredocs +# multilib fixes +mv %{buildroot}%{_bindir}/llvm-config{,-%{__isa_bits}} + +pushd %{buildroot}%{_includedir}/llvm/Config +mv config.h config-%{__isa_bits}.h +cp -p %{SOURCE2} config.h +mv llvm-config.h llvm-config-%{__isa_bits}.h +cp -p %{SOURCE3} llvm-config.h +popd + # Create ld.so.conf.d entry mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/llvm-%{_arch}.conf << EOF @@ -312,7 +335,7 @@ rm %{buildroot}%{_libdir}/%{name}/*LLVMHello.* # FIXME file this bug sed -i 's,ABS_RUN_DIR/lib",ABS_RUN_DIR/%{_lib}/%{name}",' \ - %{buildroot}%{_bindir}/llvm-config + %{buildroot}%{_bindir}/llvm-config-%{__isa_bits} chmod -x %{buildroot}%{_libdir}/%{name}/*.a @@ -321,6 +344,11 @@ chmod -x %{buildroot}%{_libdir}/%{name}/*.a find examples -name 'Makefile' | xargs -0r rm -f +%check +make check +(cd tools/clang && make test) + + %post libs -p /sbin/ldconfig %post -n clang -p /sbin/ldconfig @@ -329,13 +357,32 @@ find examples -name 'Makefile' | xargs -0r rm -f %postun -n clang -p /sbin/ldconfig +%posttrans devel +# link llvm-config to the platform-specific file; +# use ISA bits as priority so that 64-bit is preferred +# over 32-bit if both are installed +alternatives \ + --install \ + %{_bindir}/llvm-config \ + llvm-config \ + %{_bindir}/llvm-config-%{__isa_bits} \ + %{__isa_bits} + +%postun devel +if [ $1 -eq 0 ]; then + alternatives --remove llvm-config \ + %{_bindir}/llvm-config-%{__isa_bits} +fi +exit 0 + + %files %defattr(-,root,root,-) %doc CREDITS.TXT LICENSE.TXT README.txt %{_bindir}/bugpoint %{_bindir}/llc %{_bindir}/lli -%exclude %{_bindir}/llvm-config +%exclude %{_bindir}/llvm-config-%{__isa_bits} %{_bindir}/llvm* %{_bindir}/opt %exclude %{_mandir}/man1/clang.1.* @@ -344,7 +391,7 @@ find examples -name 'Makefile' | xargs -0r rm -f %files devel %defattr(-,root,root,-) -%{_bindir}/llvm-config +%{_bindir}/llvm-config-%{__isa_bits} %{_includedir}/%{name} %{_includedir}/%{name}-c %{_libdir}/%{name}/*.a @@ -414,6 +461,11 @@ find examples -name 'Makefile' | xargs -0r rm -f %changelog +* Tue Aug 2 2011 Michel Salim - 2.8-12 +- Depend on libffi to allow the LLVM interpreter to call external functions +- Build with RTTI enabled, needed by e.g. Rubinius (# 722714) +- Fix multilib installation + * Tue Apr 26 2011 Adam Jackson 2.8-11 - llvm-2.8-disable-avx.patch: Disable AVX code generation. (#699896)