From 43d505d4e9775d5b1e7777a03e429892cd9f7864 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Dec 12 2017 21:12:31 +0000 Subject: Update package structure to match llvm4.0 --- diff --git a/0001-Fix-llvm-config-paths-on-Fedora.patch b/0001-Fix-llvm-config-paths-on-Fedora.patch index e0243d2..d219b13 100644 --- a/0001-Fix-llvm-config-paths-on-Fedora.patch +++ b/0001-Fix-llvm-config-paths-on-Fedora.patch @@ -1,57 +1,17 @@ -From c33b570fe85518e2a4119c65635a75c53007214e Mon Sep 17 00:00:00 2001 +From f5602d2183ce07a2e1b6acd9211553bf4e1423c7 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 18 May 2017 12:10:20 -0400 Subject: [PATCH] Fix llvm-config paths on Fedora --- - .../0001-Fix-llvm-config-paths-on-Fedora.patch | 32 ++++++++++++++++++++++ - tools/llvm-config/llvm-config.cpp | 10 +++---- - 2 files changed, 36 insertions(+), 6 deletions(-) - create mode 100644 tools/llvm-config/0001-Fix-llvm-config-paths-on-Fedora.patch + tools/llvm-config/llvm-config.cpp | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) -diff --git a/tools/llvm-config/0001-Fix-llvm-config-paths-on-Fedora.patch b/tools/llvm-config/0001-Fix-llvm-config-paths-on-Fedora.patch -new file mode 100644 -index 0000000..07ecaba ---- /dev/null -+++ b/tools/llvm-config/0001-Fix-llvm-config-paths-on-Fedora.patch -@@ -0,0 +1,32 @@ -+From 57e09a7c656fa29dfe474d6921fcc050bf6ee921 Mon Sep 17 00:00:00 2001 -+From: Tom Stellard -+Date: Thu, 18 May 2017 12:10:20 -0400 -+Subject: [PATCH] Fix llvm-config paths on Fedora -+ -+--- -+ tools/llvm-config/llvm-config.cpp | 8 ++++---- -+ 1 file changed, 4 insertions(+), 4 deletions(-) -+ -+diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp -+index 25344e4..ccc9617 100644 -+--- a/tools/llvm-config/llvm-config.cpp -++++ b/tools/llvm-config/llvm-config.cpp -+@@ -331,11 +331,11 @@ int main(int argc, char **argv) { -+ ActiveIncludeOption = -+ ("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot + "/include"); -+ } else { -+- ActivePrefix = CurrentExecPrefix; -+- ActiveIncludeDir = ActivePrefix + "/include"; -+- ActiveBinDir = ActivePrefix + "/bin"; -++ ActivePrefix = CurrentExecPrefix + "/../../../"; -++ ActiveIncludeDir = ActivePrefix + "/include/llvm-4.0"; -++ ActiveBinDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX + "/llvm-4.0/bin"; -+ ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX; -+- ActiveCMakeDir = ActiveLibDir + "/cmake/llvm"; -++ ActiveCMakeDir = ActiveLibDir + "/cmake/llvm-4.0"; -+ ActiveIncludeOption = "-I" + ActiveIncludeDir; -+ } -+ -+-- -+1.8.3.1 -+ diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp -index 08b096a..7dcd8c9 100644 +index 08b096a..fde29d4 100644 --- a/tools/llvm-config/llvm-config.cpp +++ b/tools/llvm-config/llvm-config.cpp -@@ -331,13 +331,11 @@ int main(int argc, char **argv) { +@@ -331,11 +331,9 @@ int main(int argc, char **argv) { ActiveIncludeOption = ("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot + "/include"); } else { @@ -60,15 +20,12 @@ index 08b096a..7dcd8c9 100644 - SmallString<256> path(StringRef(LLVM_TOOLS_INSTALL_DIR)); - sys::fs::make_absolute(ActivePrefix, path); - ActiveBinDir = path.str(); -+ ActivePrefix = CurrentExecPrefix + "/../../"; -+ ActiveIncludeDir = ActivePrefix + "/include/llvm-5.0"; -+ ActiveBinDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX + "/llvm-5.0/bin"; ++ ActivePrefix = CurrentExecPrefix + ""; ++ ActiveIncludeDir = ActivePrefix + "/../../include/llvm5.0"; ++ ActiveBinDir = ActivePrefix + "/bin"; ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX; -- ActiveCMakeDir = ActiveLibDir + "/cmake/llvm"; -+ ActiveCMakeDir = ActiveLibDir + "/cmake/llvm-5.0"; + ActiveCMakeDir = ActiveLibDir + "/cmake/llvm"; ActiveIncludeOption = "-I" + ActiveIncludeDir; - } - -- 1.8.3.1 diff --git a/llvm5.0.spec b/llvm5.0.spec index f55ddca..0540db9 100644 --- a/llvm5.0.spec +++ b/llvm5.0.spec @@ -5,17 +5,20 @@ %bcond_with gold %endif -%global git_hash 7913836381e3f3984b711f921a1cf9da5d37e107 %global ver_major_minor 5.0 %global exec_suffix -%{ver_major_minor} %global install_prefix %{_libdir}/%{name} -%global llvm_bindir %{_libdir}/llvm-%{ver_major_minor}/bin -%global llvm_includedir %{_includedir}/llvm-%{ver_major_minor} -%global llvm_libdir %{_libdir} +%global install_bindir %{install_prefix}/bin +%global install_includedir %{install_prefix}/include +%global install_libdir %{install_prefix}/lib + +%global pkg_bindir %{install_bindir} +%global pkg_includedir %{_includedir}/%{name} +%global pkg_libdir %{install_libdir} Name: llvm%{ver_major_minor} Version: %ver_major_minor.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: The Low Level Virtual Machine License: NCSA @@ -42,6 +45,10 @@ BuildRequires: multilib-rpm-config BuildRequires: binutils-devel %endif BuildRequires: libstdc++-static +# Enable extra functionality when run the LLVM JIT under valgrind. +BuildRequires: valgrind-devel +# LLVM's LineEditor library will use libedit if it is available. +BuildRequires: libedit-devel Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -54,6 +61,10 @@ tools as well as libraries with equivalent functionality. %package devel Summary: Libraries and header files for LLVM Requires: %{name}%{?_isa} = %{version}-%{release} +# The installed LLVM cmake files will add -ledit to the linker flags for any +# app that requires the libLLVMLineEditor, so we need to make sure +# libedit-devel is available. +Requires: libedit-devel Requires(post): %{_sbindir}/alternatives Requires(postun): %{_sbindir}/alternatives @@ -71,40 +82,21 @@ Documentation for the LLVM compiler infrastructure. %package libs Summary: LLVM shared libraries -Obsoletes: llvm-libs < %{version}-%{release} %description libs Shared libraries for the LLVM compiler infrastructure. -%package -n llvm-devel -Summary: Meta package for llvm development files. -Requires: llvm = %{version}-%{release} -Requires: %{name}-devel = %{version}-%{release} -Obsoletes: llvm-devel < %{version}-%{release} - -%description -n llvm-devel -Meta package for llvm development files. - -%package -n llvm-libs -Summary: Meta package for llvm shared libraries. -Requires: %{name}-libs = %{version}-%{release} -%description -n llvm-libs -Meta package fro llvm shared libraries. +%package static +Summary: LLVM %{ver_major_minor} static libraries +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: ncurses-devel%{?_isa} -%package -n llvm-static -Summary: LLVM static libraries. -Obsoletes: llvm-static < %{version}-%{release} - -%description -n llvm-static +%description static Static libraries for the LLVM compiler infrastructure. -%package -n llvm -Summary: Meta package for llvm -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description -n llvm -Meta package for llvm +This package contains LLVM %{ver_major_minor} and can be installed +in parallel with other LLVM versions. %prep %autosetup -n llvm-%{version}.src -p1 @@ -134,18 +126,13 @@ cd _build -DCMAKE_C_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \ %endif -%if 0%{?__isa_bits} == 64 - -DLLVM_LIBDIR_SUFFIX=64 \ -%else - -DLLVM_LIBDIR_SUFFIX= \ -%endif \ + -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ -DLLVM_TARGETS_TO_BUILD="X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;ARM;Mips;BPF" \ -DLLVM_ENABLE_LIBCXX:BOOL=OFF \ -DLLVM_ENABLE_ZLIB:BOOL=ON \ -DLLVM_ENABLE_FFI:BOOL=ON \ -DLLVM_ENABLE_RTTI:BOOL=ON \ - -DLLVM_TOOLS_INSTALL_DIR=%{_libdir}/llvm-%{ver_major_minor}/bin \ %if %{with gold} -DLLVM_BINUTILS_INCDIR=%{_includedir} \ %endif @@ -187,98 +174,90 @@ make install DESTDIR=%{buildroot} # Add version suffix to binaries mkdir -p %{buildroot}/%{_bindir} -for f in `ls %{buildroot}/%{_libdir}/llvm-%{ver_major_minor}/bin/*`; do +for f in `ls %{buildroot}/%{install_bindir}/*`; do filename=`basename $f` - ln -s %{_libdir}/llvm-%{ver_major_minor}/bin/$filename %{buildroot}/%{_bindir}/$filename%{exec_suffix} - ln -s %{_libdir}/llvm-%{ver_major_minor}/bin/$filename %{buildroot}/%{_bindir}/$filename + ln -s %{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename%{exec_suffix} done -rm %{buildroot}%{_bindir}/llvm-config -ln -s %{_libdir}/llvm-%{ver_major_minor}/bin/llvm-config %{buildroot}/%{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} - # Move header files -mkdir -p %{buildroot}/%{_includedir}/llvm-%{ver_major_minor}/ -mv %{buildroot}/%{_includedir}/llvm %{buildroot}/%{_includedir}/llvm-%{ver_major_minor}/ -mv %{buildroot}/%{_includedir}/llvm-c %{buildroot}/%{_includedir}/llvm-%{ver_major_minor}/ - -# Move cmake files -mv %{buildroot}/%{_libdir}/cmake/{llvm,llvm-%{ver_major_minor}} - -# Add symlink to headers and cmake files -ln -s %{_includedir}/llvm-%{ver_major_minor}/llvm %{buildroot}/%{_includedir}/llvm -ln -s %{_includedir}/llvm-%{ver_major_minor}/llvm-c %{buildroot}/%{_includedir}/llvm-c -ln -s %{_libdir}/cmake/llvm-%{ver_major_minor} %{buildroot}/%{_libdir}/cmake/llvm +mkdir -p %{buildroot}/%{pkg_includedir} +mv %{buildroot}/%{install_includedir}/llvm %{buildroot}/%{pkg_includedir}/ +mv %{buildroot}/%{install_includedir}/llvm-c %{buildroot}/%{pkg_includedir}/ + +# Fix multi-lib +mv %{buildroot}%{_bindir}/llvm-config{%{exec_suffix},%{exec_suffix}-%{__isa_bits}} +%multilib_fix_c_header --file %{pkg_includedir}/llvm/Config/llvm-config.h + +# Create ld.so.conf.d entry +mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d +cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf << EOF +%{pkg_libdir} +EOF + +# Add version suffix to man pages and move them to mandir. +mkdir -p %{buildroot}/%{_mandir}/man1 +for f in `ls %{buildroot}%{install_prefix}/share/man/man1/*`; do + filename=`basename $f | cut -f 1 -d '.'` + mv $f %{buildroot}%{_mandir}/man1/$filename%{exec_suffix}.1 +done # Remove opt-viewer, since this is just a compatibility package. -rm -Rf %{buildroot}%{_datadir}/opt-viewer +rm -Rf %{buildroot}%{install_prefix}/share/opt-viewer %check cd _build #make check-all || : -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{buildroot}/%{_libdir} -test "`%{buildroot}/%{llvm_bindir}/llvm-config --bindir`" -ef "%{buildroot}/%{llvm_bindir}" -test "`%{buildroot}/%{llvm_bindir}/llvm-config --libdir`" -ef "%{buildroot}/%{llvm_libdir}" -test "`%{buildroot}/%{llvm_bindir}/llvm-config --includedir`" -ef "%{buildroot}/%{llvm_includedir}" -test "`%{buildroot}/%{llvm_bindir}/llvm-config --cmakedir`" -ef "%{buildroot}/%{_libdir}/cmake/llvm-%{ver_major_minor}" +#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{buildroot}/%{_libdir} +test "`%{buildroot}/%{install_bindir}/llvm-config --bindir`" -ef "%{buildroot}/%{pkg_bindir}" +test "`%{buildroot}/%{install_bindir}/llvm-config --libdir`" -ef "%{buildroot}/%{pkg_libdir}" +test "`%{buildroot}/%{install_bindir}/llvm-config --includedir`" -ef "%{buildroot}/%{pkg_includedir}" +test "`%{buildroot}/%{install_bindir}/llvm-config --cmakedir`" -ef "%{buildroot}/%{pkg_libdir}/cmake/llvm" %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig -%post -n llvm-devel -%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config llvm-config %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} - -%postun -n llvm-devel -if [ $1 -eq 0 ]; then - %{_sbindir}/update-alternatives --remove llvm-config %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} -fi - %files -%{_bindir}/*-%{ver_major_minor} -%exclude %{_bindir}/* -%{_libdir}/llvm-%{ver_major_minor}/bin/* -%exclude %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} -%exclude %{_mandir}/man1/llvm-config.1.gz - -%files -n llvm -%exclude %{_bindir}/*-%{ver_major_minor} -%exclude %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{_bindir}/* -%{_mandir}/man1/*.1.gz +%{pkg_bindir} +%exclude %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} +%exclude %{pkg_bindir}/llvm-config +%{_mandir}/man1/*.1.* +%exclude %{_mandir}/man1/llvm-config%{exec_suffix}.1.gz +%license LICENSE.TXT %files libs -%{_libdir}/libLLVM-%{ver_major_minor}*.so -%{_libdir}/libLTO.so* -%exclude %{_libdir}/libLTO.so - -%files -n llvm-libs -%{_libdir}/BugpointPasses.so -%{_libdir}/LLVMHello.so +%config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf +%{pkg_libdir}/BugpointPasses.so +%{pkg_libdir}/LLVMHello.so %if %{with gold} -%{_libdir}/LLVMgold.so +%{_libdir}/%{name}/lib/LLVMgold.so %endif +%{pkg_libdir}/libLLVM-%{ver_major_minor}*.so +%{pkg_libdir}/libLTO.so* +%exclude %{pkg_libdir}/libLTO.so +%license LICENSE.TXT %files devel %{_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} -%{_includedir}/llvm-%{ver_major_minor}/llvm -%{_includedir}/llvm-%{ver_major_minor}/llvm-c -%{_libdir}/cmake/llvm-%{ver_major_minor} - -%files -n llvm-devel -%{_includedir}/llvm -%{_includedir}/llvm-c -%{_libdir}/cmake/llvm -%{_libdir}/libLLVM.so -%{_libdir}/libLTO.so -%{_mandir}/man1/llvm-config.1.gz +%{pkg_bindir}/llvm-config +%{_mandir}/man1/llvm-config%{exec_suffix}.1.gz +%{pkg_includedir}/llvm +%{pkg_includedir}/llvm-c +%{pkg_libdir}/libLTO.so +%{pkg_libdir}/libLLVM.so +%{pkg_libdir}/cmake/llvm + +%files static +%{_libdir}/%{name}/lib/*.a %files doc %doc %{_pkgdocdir}/html -%files -n llvm-static -%{_libdir}/*.a - %changelog +* Tue Dec 12 2017 Tom Stellard - 5.0.0-3 +- Update package structure to match llvm4.0. + * Fri Dec 08 2017 Tom Stellard - 5.0.0-2 - Reduce debuginfo size on ARM