diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..758cf35 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/llvm-7.0.1.src.tar.xz diff --git a/.llvm.metadata b/.llvm.metadata new file mode 100644 index 0000000..4022003 --- /dev/null +++ b/.llvm.metadata @@ -0,0 +1 @@ +f97632fcc3186eb0d396492ef8acfc807648580f SOURCES/llvm-7.0.1.src.tar.xz diff --git a/SOURCES/0001-CMake-Don-t-prefer-python2.7.patch b/SOURCES/0001-CMake-Don-t-prefer-python2.7.patch new file mode 100644 index 0000000..ddea299 --- /dev/null +++ b/SOURCES/0001-CMake-Don-t-prefer-python2.7.patch @@ -0,0 +1,27 @@ +From 1e0f1c5481a96d760f7840d4dde103353a0131f8 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 30 Aug 2018 11:38:51 -0700 +Subject: [PATCH] CMake: Don't prefer python2.7 + +--- + CMakeLists.txt | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 31df640..2603f1c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -613,10 +613,6 @@ message(STATUS "LLVM default target triple: ${LLVM_DEFAULT_TARGET_TRIPLE}") + + include(HandleLLVMOptions) + +-# Verify that we can find a Python 2 interpreter. Python 3 is unsupported. +-# FIXME: We should support systems with only Python 3, but that requires work +-# on LLDB. +-set(Python_ADDITIONAL_VERSIONS 2.7) + include(FindPythonInterp) + if( NOT PYTHONINTERP_FOUND ) + message(FATAL_ERROR +-- +1.8.3.1 + diff --git a/SOURCES/0001-CMake-Split-static-library-exports-into-their-own-ex.patch b/SOURCES/0001-CMake-Split-static-library-exports-into-their-own-ex.patch new file mode 100644 index 0000000..903821e --- /dev/null +++ b/SOURCES/0001-CMake-Split-static-library-exports-into-their-own-ex.patch @@ -0,0 +1,86 @@ +From f9e66a883e1fb748e6ac826fde188efaae249361 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Sat, 29 Apr 2017 02:03:23 +0000 +Subject: [PATCH] CMake: Split static library exports into their own export + file + +Summary: +This is to better support distros which split the static libraries into +their own package. + +The current problem is that any project the includes LLVMConfig.cmake +will fail to configure unless the static libraries are installed. This +is because LLVMConfig.cmake includes LLVMExports.cmake, which throws an +error if it can't find files linked to one of the exported targets. + +This patch resolves the problem by putting the static library targets +into their own export file, LLVMStaticExports.cmake. This file +is optionally included by LLVMConfig.cmake, so distros can put this +new file in their static library package to make LLVMConfig.cmake +no longer depend on these libraries when they are not installed. + +Reviewers: beanz, mgorny, chapuni + +Subscribers: llvm-commits + +Differential Revision: https://reviews.llvm.org/D32668 +--- + cmake/modules/AddLLVM.cmake | 6 +++++- + cmake/modules/CMakeLists.txt | 3 +++ + cmake/modules/LLVMConfig.cmake.in | 2 ++ + 3 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake +index fd5627e..78f106f 100644 +--- a/cmake/modules/AddLLVM.cmake ++++ b/cmake/modules/AddLLVM.cmake +@@ -635,7 +635,11 @@ macro(add_llvm_library name) + + if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR + NOT LLVM_DISTRIBUTION_COMPONENTS) +- set(export_to_llvmexports EXPORT LLVMExports) ++ if (ARG_SHARED) ++ set(export_to_llvmexports EXPORT LLVMExports) ++ else() ++ set(export_to_llvmexports EXPORT LLVMStaticExports) ++ endif() + set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) + endif() + +diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt +index 6074e83..e9fcb11 100644 +--- a/cmake/modules/CMakeLists.txt ++++ b/cmake/modules/CMakeLists.txt +@@ -91,6 +91,7 @@ set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}") + set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin") + set(LLVM_CONFIG_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMExports.cmake") + set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}") ++set(LLVM_CONFIG_STATIC_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMStaticExports.cmake") + configure_file( + LLVMConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake +@@ -107,6 +108,8 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + if(llvm_has_exports) + install(EXPORT LLVMExports DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} + COMPONENT cmake-exports) ++ install(EXPORT LLVMStaticExports DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} ++ COMPONENT cmake-exports) + endif() + + install(FILES +diff --git a/cmake/modules/LLVMConfig.cmake.in b/cmake/modules/LLVMConfig.cmake.in +index 0772016..f471625 100644 +--- a/cmake/modules/LLVMConfig.cmake.in ++++ b/cmake/modules/LLVMConfig.cmake.in +@@ -78,6 +78,8 @@ if(NOT TARGET LLVMSupport) + set(LLVM_EXPORTED_TARGETS "@LLVM_CONFIG_EXPORTS@") + include("@LLVM_CONFIG_EXPORTS_FILE@") + @llvm_config_include_buildtree_only_exports@ ++ ++ include("@LLVM_CONFIG_STATIC_EXPORTS_FILE@" OPTIONAL) + endif() + + # By creating intrinsics_gen here, subprojects that depend on LLVM's +-- +1.8.3.1 + diff --git a/SOURCES/0001-Disable-threading-in-thinLTO.patch b/SOURCES/0001-Disable-threading-in-thinLTO.patch new file mode 100644 index 0000000..73c1e31 --- /dev/null +++ b/SOURCES/0001-Disable-threading-in-thinLTO.patch @@ -0,0 +1,83 @@ +From 7f29c6fcd31ea7fdba8be602cc6fee2d2016fcd3 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Tue, 11 Dec 2018 16:34:40 -0500 +Subject: [PATCH] Disable threading in thinLTO + +/usr/bin/ld.gold does not support threaded plugins if gold itself has +not been linked against pthread. + +https://bugzilla.redhat.com/show_bug.cgi?id=1636479#c16 +--- + lib/LTO/LTO.cpp | 26 +------------------------- + tools/gold/CMakeLists.txt | 1 + + 2 files changed, 2 insertions(+), 25 deletions(-) + +diff --git a/lib/LTO/LTO.cpp b/lib/LTO/LTO.cpp +index 68d210cb..e4369c7f 100644 +--- a/lib/LTO/LTO.cpp ++++ b/lib/LTO/LTO.cpp +@@ -914,7 +914,6 @@ public: + + namespace { + class InProcessThinBackend : public ThinBackendProc { +- ThreadPool BackendThreadPool; + AddStreamFn AddStream; + NativeObjectCache Cache; + TypeIdSummariesByGuidTy TypeIdSummariesByGuid; +@@ -931,7 +930,6 @@ public: + const StringMap &ModuleToDefinedGVSummaries, + AddStreamFn AddStream, NativeObjectCache Cache) + : ThinBackendProc(Conf, CombinedIndex, ModuleToDefinedGVSummaries), +- BackendThreadPool(ThinLTOParallelismLevel), + AddStream(std::move(AddStream)), Cache(std::move(Cache)) { + // Create a mapping from type identifier GUIDs to type identifier summaries. + // This allows backends to use the type identifier GUIDs stored in the +@@ -996,34 +994,12 @@ public: + assert(ModuleToDefinedGVSummaries.count(ModulePath)); + const GVSummaryMapTy &DefinedGlobals = + ModuleToDefinedGVSummaries.find(ModulePath)->second; +- BackendThreadPool.async( +- [=](BitcodeModule BM, ModuleSummaryIndex &CombinedIndex, +- const FunctionImporter::ImportMapTy &ImportList, +- const FunctionImporter::ExportSetTy &ExportList, +- const std::map +- &ResolvedODR, +- const GVSummaryMapTy &DefinedGlobals, +- MapVector &ModuleMap, +- const TypeIdSummariesByGuidTy &TypeIdSummariesByGuid) { +- Error E = runThinLTOBackendThread( ++ return runThinLTOBackendThread( + AddStream, Cache, Task, BM, CombinedIndex, ImportList, ExportList, + ResolvedODR, DefinedGlobals, ModuleMap, TypeIdSummariesByGuid); +- if (E) { +- std::unique_lock L(ErrMu); +- if (Err) +- Err = joinErrors(std::move(*Err), std::move(E)); +- else +- Err = std::move(E); +- } +- }, +- BM, std::ref(CombinedIndex), std::ref(ImportList), std::ref(ExportList), +- std::ref(ResolvedODR), std::ref(DefinedGlobals), std::ref(ModuleMap), +- std::ref(TypeIdSummariesByGuid)); +- return Error::success(); + } + + Error wait() override { +- BackendThreadPool.wait(); + if (Err) + return std::move(*Err); + else +diff --git a/tools/gold/CMakeLists.txt b/tools/gold/CMakeLists.txt +index d2580329..c3bf1b72 100644 +--- a/tools/gold/CMakeLists.txt ++++ b/tools/gold/CMakeLists.txt +@@ -15,4 +15,5 @@ if( LLVM_ENABLE_PIC AND LLVM_BINUTILS_INCDIR ) + gold-plugin.cpp + ) + ++ + endif() +-- +2.18.1 + diff --git a/SOURCES/0001-Don-t-set-rpath-when-installing.patch b/SOURCES/0001-Don-t-set-rpath-when-installing.patch new file mode 100644 index 0000000..d92a387 --- /dev/null +++ b/SOURCES/0001-Don-t-set-rpath-when-installing.patch @@ -0,0 +1,24 @@ +From e67ace2ecb42c24e124f1738dc67b22055a22500 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 13 Sep 2018 10:10:08 -0700 +Subject: [PATCH] Don't set rpath when installing + +--- + cmake/modules/AddLLVM.cmake | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake +index ce2057f..de309b5 100644 +--- a/cmake/modules/AddLLVM.cmake ++++ b/cmake/modules/AddLLVM.cmake +@@ -1621,6 +1621,7 @@ function(llvm_codesign name) + endfunction() + + function(llvm_setup_rpath name) ++ return() + if(CMAKE_INSTALL_RPATH) + return() + endif() +-- +1.8.3.1 + diff --git a/SOURCES/0001-Filter-out-cxxflags-not-supported-by-clang.patch b/SOURCES/0001-Filter-out-cxxflags-not-supported-by-clang.patch new file mode 100644 index 0000000..31b819b --- /dev/null +++ b/SOURCES/0001-Filter-out-cxxflags-not-supported-by-clang.patch @@ -0,0 +1,28 @@ +From 5f7fd92155db77c7608e3a07e5dcfad1ec7bd4e4 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 16 Mar 2018 07:52:33 -0700 +Subject: [PATCH] Filter out cxxflags not supported by clang + +--- + tools/llvm-config/CMakeLists.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tools/llvm-config/CMakeLists.txt b/tools/llvm-config/CMakeLists.txt +index a0bd36c..4193b0e 100644 +--- a/tools/llvm-config/CMakeLists.txt ++++ b/tools/llvm-config/CMakeLists.txt +@@ -34,7 +34,11 @@ set(LLVM_SRC_ROOT ${LLVM_MAIN_SRC_DIR}) + set(LLVM_OBJ_ROOT ${LLVM_BINARY_DIR}) + set(LLVM_CPPFLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") + set(LLVM_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") ++STRING(REGEX REPLACE "-mcet" "" LLVM_CFLAGS ${LLVM_CFLAGS}) ++STRING(REGEX REPLACE "-fcf-protection" "" LLVM_CFLAGS ${LLVM_CFLAGS}) + set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${COMPILE_FLAGS} ${LLVM_DEFINITIONS}") ++STRING(REGEX REPLACE "-mcet" "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS}) ++STRING(REGEX REPLACE "-fcf-protection" "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS}) + set(LLVM_BUILD_SYSTEM cmake) + set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI}) + set(LLVM_DYLIB_VERSION "${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}") +-- +1.8.3.1 + diff --git a/SOURCES/0001-Re-apply-r346985-ADT-Drop-llvm-Optional-clang-specif.patch b/SOURCES/0001-Re-apply-r346985-ADT-Drop-llvm-Optional-clang-specif.patch new file mode 100644 index 0000000..4f85931 --- /dev/null +++ b/SOURCES/0001-Re-apply-r346985-ADT-Drop-llvm-Optional-clang-specif.patch @@ -0,0 +1,65 @@ +From 93d58f71134cb97e79c417e540d12940960b529e Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 16 Nov 2018 00:47:24 +0000 +Subject: [PATCH] Re-apply r346985: [ADT] Drop llvm::Optional clang-specific + optimization for trivially copyable types + +Remove a test case that was added with the optimization we are now +removing. + +git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@347004 91177308-0d34-0410-b5e6-96231b3b80d8 +--- + include/llvm/ADT/Optional.h | 18 ------------------ + unittests/ADT/OptionalTest.cpp | 8 -------- + 2 files changed, 26 deletions(-) + +diff --git a/include/llvm/ADT/Optional.h b/include/llvm/ADT/Optional.h +index 353e5d0..9fe9b28 100644 +--- a/include/llvm/ADT/Optional.h ++++ b/include/llvm/ADT/Optional.h +@@ -108,24 +108,6 @@ template struct OptionalStorage { + } + }; + +-#if !defined(__GNUC__) || defined(__clang__) // GCC up to GCC7 miscompiles this. +-/// Storage for trivially copyable types only. +-template struct OptionalStorage { +- AlignedCharArrayUnion storage; +- bool hasVal = false; +- +- OptionalStorage() = default; +- +- OptionalStorage(const T &y) : hasVal(true) { new (storage.buffer) T(y); } +- OptionalStorage &operator=(const T &y) { +- *reinterpret_cast(storage.buffer) = y; +- hasVal = true; +- return *this; +- } +- +- void reset() { hasVal = false; } +-}; +-#endif + } // namespace optional_detail + + template class Optional { +diff --git a/unittests/ADT/OptionalTest.cpp b/unittests/ADT/OptionalTest.cpp +index 2e09c53..20bc9da 100644 +--- a/unittests/ADT/OptionalTest.cpp ++++ b/unittests/ADT/OptionalTest.cpp +@@ -518,13 +518,5 @@ TEST_F(OptionalTest, OperatorGreaterEqual) { + CheckRelation(InequalityLhs, InequalityRhs, !IsLess); + } + +-#if __has_feature(is_trivially_copyable) && defined(_LIBCPP_VERSION) +-static_assert(std::is_trivially_copyable>::value, +- "Should be trivially copyable"); +-static_assert( +- !std::is_trivially_copyable>::value, +- "Shouldn't be trivially copyable"); +-#endif +- + } // end anonymous namespace + +-- +1.8.3.1 + diff --git a/SOURCES/0001-unittests-Don-t-install-TestPlugin.so.patch b/SOURCES/0001-unittests-Don-t-install-TestPlugin.so.patch new file mode 100644 index 0000000..f614036 --- /dev/null +++ b/SOURCES/0001-unittests-Don-t-install-TestPlugin.so.patch @@ -0,0 +1,62 @@ +From cf1fb43186fd4d97ee2de0b222d44ecc500f82c7 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Mon, 13 Aug 2018 12:22:28 -0700 +Subject: [PATCH] unittests: Don't install TestPlugin.so + +add_llvm_loadable_module adds an install target by default, but this +module is only used for a unit test, so we don't need to instal it. + +This patch adds a NO_INSTALL option to add_llvm_loadable_module that +can be used to disable installation of modules. +--- + cmake/modules/AddLLVM.cmake | 13 ++++++++----- + unittests/Passes/CMakeLists.txt | 2 +- + 2 files changed, 9 insertions(+), 6 deletions(-) + +diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake +index 24ef5e4..1637ba6 100644 +--- a/cmake/modules/AddLLVM.cmake ++++ b/cmake/modules/AddLLVM.cmake +@@ -671,7 +671,8 @@ macro(add_llvm_library name) + endmacro(add_llvm_library name) + + macro(add_llvm_loadable_module name) +- llvm_add_library(${name} MODULE ${ARGN}) ++ cmake_parse_arguments(ARG "NO_INSTALL" "" "" ${ARGN}) ++ llvm_add_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) + if(NOT TARGET ${name}) + # Add empty "phony" target + add_custom_target(${name}) +@@ -693,10 +694,12 @@ macro(add_llvm_loadable_module name) + set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) + endif() + +- install(TARGETS ${name} +- ${export_to_llvmexports} +- LIBRARY DESTINATION ${dlldir} +- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) ++ if (NOT ARG_NO_INSTALL) ++ install(TARGETS ${name} ++ ${export_to_llvmexports} ++ LIBRARY DESTINATION ${dlldir} ++ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) ++ endif() + endif() + set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) + endif() +diff --git a/unittests/Passes/CMakeLists.txt b/unittests/Passes/CMakeLists.txt +index d90df20..99390e6 100644 +--- a/unittests/Passes/CMakeLists.txt ++++ b/unittests/Passes/CMakeLists.txt +@@ -14,7 +14,7 @@ add_llvm_unittest(PluginsTests + export_executable_symbols(PluginsTests) + + set(LLVM_LINK_COMPONENTS) +-add_llvm_loadable_module(TestPlugin ++add_llvm_loadable_module(TestPlugin NO_INSTALL + TestPlugin.cpp + ) + +-- +1.8.3.1 + diff --git a/SOURCES/run-lit-tests b/SOURCES/run-lit-tests new file mode 100755 index 0000000..a0a5d5b --- /dev/null +++ b/SOURCES/run-lit-tests @@ -0,0 +1,39 @@ +#!/bin/bash + +usage() { + echo "usage: `basename $0` [OPTIONS]" + echo " --threads NUM The number of threads to use for running tests." +} + +threads_arg='' + +while [ $# -gt 0 ]; do + case $1 in + --threads) + shift + threads_arg="--threads $1" + ;; + * ) + echo "unknown option: $1" + echo "" + usage + exit 1 + ;; + esac + shift +done + +set -xe + +TOOLS_DIR=@TOOLS_DIR@ +cd $(mktemp -d) +ln -s /usr/include include +tar -xzf /usr/share/llvm/src/test.tar.gz +PATH=$PATH:$TOOLS_DIR lit -v -s $threads_arg test \ + -DFileCheck=$TOOLS_DIR/FileCheck \ + -Dcount=$TOOLS_DIR/count \ + -Dnot=$TOOLS_DIR/not \ + -Dlli-child-target=$TOOLS_DIR/lli-child-target \ + -Dllvm-isel-fuzzer=$TOOLS_DIR/llvm-isel-fuzzer \ + -Dllvm-opt-fuzzer=$TOOLS_DIR/llvm-opt-fuzzer \ + -Dyaml-bench=$TOOLS_DIR/yaml-bench diff --git a/SPECS/llvm.spec b/SPECS/llvm.spec new file mode 100644 index 0000000..bcae797 --- /dev/null +++ b/SPECS/llvm.spec @@ -0,0 +1,608 @@ +# Components enabled if supported by target architecture: +%ifarch %ix86 x86_64 + %bcond_without gold +%else + %bcond_with gold +%endif + +%global llvm_bindir %{_libdir}/%{name} +%global maj_ver 7 +%global min_ver 0 +%global patch_ver 1 + +%ifarch ppc64 ppc64le +%global host_target PowerPC +# Limit build jobs on ppc64 systems to avoid running out of memory. +%global _smp_mflags -j8 +%endif + +%ifnarch i686 +%global enable_test_pkg 1 +%endif + +Name: llvm +Version: %{maj_ver}.%{min_ver}.%{patch_ver} +Release: 1%{?dist} +Summary: The Low Level Virtual Machine + +License: NCSA +URL: http://llvm.org +Source0: http://llvm.org/releases/%{version}/%{name}-%{version}%{?rc_ver:rc%{rc_ver}}.src.tar.xz +Source1: run-lit-tests +%if %{defined compat_version} +Source100: http://llvm.org/releases/%{compat_version}/%{name}-%{compat_version}.src.tar.xz +%endif + +Patch3: 0001-CMake-Split-static-library-exports-into-their-own-ex.patch +Patch7: 0001-Filter-out-cxxflags-not-supported-by-clang.patch + +Patch12: 0001-unittests-Don-t-install-TestPlugin.so.patch +# If python2 is available on the system, llvm will try to use it. This patch +# removes the preferences for python2, so we can make sure we always use +# python3. +Patch14: 0001-CMake-Don-t-prefer-python2.7.patch +Patch15: 0001-Don-t-set-rpath-when-installing.patch +Patch16: 0001-Re-apply-r346985-ADT-Drop-llvm-Optional-clang-specif.patch +#rhbz#1636479 +Patch17: 0001-Disable-threading-in-thinLTO.patch + +%if %{defined compat_version} +# Compat patches +# rhbz#1595996 +Patch1000: 0001-Don-t-run-BV-DAG-Combine-before-legalization-if-it-a.patch +# rhbz#161005 +Patch1001: 0001-SystemZ-TableGen-Fix-shift-count-handling.patch +# rhbz#1562196 +Patch1002: 0001-PowerPC-Do-not-round-values-prior-to-converting-to-i.patch +Patch1003: 0001-CMake-Don-t-prefer-python2.7.patch +%endif + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: zlib-devel +BuildRequires: libffi-devel +BuildRequires: ncurses-devel +BuildRequires: python3-sphinx +BuildRequires: multilib-rpm-config +# This pulls in /usr/bin/python3 +BuildRequires: python3-devel + +%if %{with gold} +BuildRequires: binutils-devel +%endif + +%ifarch %{valgrind_arches} +# Enable extra functionality when run the LLVM JIT under valgrind. +BuildRequires: valgrind-devel +%endif + +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%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 +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires(post): %{_sbindir}/alternatives +Requires(postun): %{_sbindir}/alternatives + +%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 +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description doc +Documentation for the LLVM compiler infrastructure. + +%package libs +Summary: LLVM shared libraries + +%description libs +Shared libraries for the LLVM compiler infrastructure. + +%package static +Summary: LLVM static libraries + +%description static +Static libraries for the LLVM compiler infrastructure. + +%if 0%{?enable_test_pkg} + +%package test +Summary: LLVM regression tests. +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python3-lit +# The regression tests need gold. +Requires: binutils +# This is for llvm-config +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +# Bugpoint tests require gcc +Requires: gcc +Requires: diffutils +Requires: findutils + +%description test +LLVM regression tests. + +%endif + +%package googletest +Summary: LLVM's modified googletest sources. + +%description googletest +LLVM's modified googletest sources. + +%prep +%if %{defined compat_version} +%setup -T -q -b 100 -n llvm-%{compat_version}.src +%patch1000 -p1 +%patch1001 -p1 +%patch1002 -p1 +%patch1003 -p1 + +%setup -q -n llvm-%{version}%{?rc_ver:rc%{rc_ver}}.src +%patch3 -p1 +%patch7 -p1 +%patch12 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 + +%else +%autosetup -n %{name}-%{version}%{?rc_ver:rc%{rc_ver}}.src -p1 +%endif + +pathfix.py -i %{__python3} -pn \ + test/BugPoint/compile-custom.ll.py \ + tools/opt-viewer/*.py + +sed -i 's~@TOOLS_DIR@~%{llvm_bindir}~' %{SOURCE1} + +%build +mkdir -p _build +cd _build + +%ifarch s390 %ix86 +# Decrease debuginfo verbosity to reduce memory consumption during final library linking +%global optflags %(echo %{optflags} | sed 's/-g /-g1 /') +%endif + +# force off shared libs as cmake macros turns it on. +%cmake .. \ + -DBUILD_SHARED_LIBS:BOOL=OFF \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ +%ifarch s390 %ix86 + -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 + \ + -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 \ +%if %{with gold} + -DLLVM_BINUTILS_INCDIR=%{_includedir} \ +%endif + \ + -DLLVM_BUILD_RUNTIME:BOOL=ON \ + \ + -DLLVM_INCLUDE_TOOLS:BOOL=ON \ + -DLLVM_BUILD_TOOLS:BOOL=ON \ + \ + -DLLVM_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_BUILD_TESTS:BOOL=ON \ + \ + -DLLVM_INCLUDE_EXAMPLES:BOOL=ON \ + -DLLVM_BUILD_EXAMPLES:BOOL=OFF \ + \ + -DLLVM_INCLUDE_UTILS:BOOL=ON \ + -DLLVM_INSTALL_UTILS:BOOL=ON \ + -DLLVM_UTILS_INSTALL_DIR:PATH=%{llvm_bindir} \ + \ + -DLLVM_INCLUDE_DOCS:BOOL=ON \ + -DLLVM_BUILD_DOCS:BOOL=ON \ + -DLLVM_ENABLE_SPHINX:BOOL=ON \ + -DLLVM_ENABLE_DOXYGEN:BOOL=OFF \ + \ + -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON \ + -DLLVM_DYLIB_EXPORT_ALL:BOOL=ON \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON \ + -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF \ + \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF + +make -O %{?_smp_mflags} + +%if %{defined compat_version} +mkdir ../compat-build +cd ../compat-build +%cmake ../../%{name}-%{compat_version}.src \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGETS_TO_BUILD="X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;ARM;Mips;BPF" \ + -DLLVM_ENABLE_RTTI:BOOL=ON \ + -DLLVM_ENABLE_ZLIB:BOOL=ON \ + -DLLVM_ENABLE_FFI:BOOL=ON \ + -DLLVM_BUILD_LLVM_DYLIB=ON +make -O %{?_smp_mflags} LLVM + +# Remove files we don't need to save disk space +mv lib/libLLVM-`echo %{compat_version} | cut -f1,2 -d .`.so .. +rm -Rf * +%endif + + +%install +cd _build +make -O %{?_smp_mflags} install DESTDIR=%{buildroot} + +# fix multi-lib +mv -v %{buildroot}%{_bindir}/llvm-config{,-%{__isa_bits}} + +%multilib_fix_c_header --file %{_includedir}/llvm/Config/llvm-config.h + +# Install libraries needed for unittests +%if 0%{?__isa_bits} == 64 +%global build_libdir lib64 +%else +%global build_libdir lib +%endif + +install %{build_libdir}/libLLVMTestingSupport.a %{buildroot}%{_libdir} + +%global install_srcdir %{buildroot}%{_datadir}/llvm/src +%if 0%{?enable_test_pkg} +# Install binaries needed for lit tests +%global test_binaries lli-child-target llvm-isel-fuzzer llvm-opt-fuzzer yaml-bench +for f in %{test_binaries}; do +install -m 0755 ./bin/$f %{buildroot}%{llvm_bindir}/ +done + +%global install_srcdir %{buildroot}%{_datadir}/llvm/src +%global lit_cfg test/lit.site.cfg.py +%global lit_unit_cfg test/Unit/lit.site.cfg.py + +%endif +cd .. + +# Install gtest sources so clang can use them for gtest +install -d %{install_srcdir} +install -d %{install_srcdir}/utils/ +cp -R utils/unittest %{install_srcdir}/utils/ + +%if 0%{?enable_test_pkg} + +# Generate lit config files. +cat _build/test/lit.site.cfg.py >> %{lit_cfg} + +# Unit tests write output to this directory, so it can't be in /usr. +sed -i 's~\(config.llvm_obj_root = \)"[^"]\+"~\1"."~' %{lit_cfg} + +cat _build/test/Unit/lit.site.cfg.py >> %{lit_unit_cfg} +sed -i -e s~`pwd`/_build~%{_prefix}~g -e s~`pwd`~.~g %{lit_cfg} %{lit_cfg} %{lit_unit_cfg} + +# obj_root needs to be set to the directory containing the unit test binaries. +sed -i 's~\(config.llvm_obj_root = \)"[^"]\+"~\1"%{llvm_bindir}"~' %{lit_unit_cfg} + +install -d %{buildroot}%{_libexecdir}/tests/llvm +install -m 0755 %{SOURCE1} %{buildroot}%{_libexecdir}/tests/llvm + +# Install lit tests. We need to put these in a tarball otherwise rpm will complain +# about some of the test inputs having the wrong object file format. +install -d %{buildroot}%{_datadir}/llvm/ +tar -czf %{install_srcdir}/test.tar.gz test/ + +# Install the unit test binaries +cp -R _build/unittests %{buildroot}%{llvm_bindir}/ +# FIXME: Can't figure out how to make the find command succeed. +find %{buildroot}%{llvm_bindir} -ignore_readdir_race -iname 'cmake*' -exec rm -Rf '{}' ';' || true + +%endif + +%if %{defined compat_version} +cd compat-build +install ../libLLVM-`echo %{compat_version} | cut -f1,2 -d .`.so %{buildroot}%{_libdir} +%endif + +%check +cd _build +make check-all || : + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%post devel +%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config llvm-config %{_bindir}/llvm-config-%{__isa_bits} %{__isa_bits} + +%postun devel +if [ $1 -eq 0 ]; then + %{_sbindir}/update-alternatives --remove llvm-config %{_bindir}/llvm-config-%{__isa_bits} +fi + +%files +%{_bindir}/* +%{_mandir}/man1/*.1.* +%{llvm_bindir} +%exclude %{_bindir}/llvm-config-%{__isa_bits} +%exclude %{_mandir}/man1/llvm-config.1.* +%{_datadir}/opt-viewer +%exclude %{llvm_bindir}/unittests + +%files libs +%{_libdir}/BugpointPasses.so +%{_libdir}/LLVMHello.so +%if %{with gold} +%{_libdir}/LLVMgold.so +%endif +%{_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so +%{_libdir}/libLLVM-%{maj_ver}.so +%{_libdir}/libLTO.so* +%if %{defined compat_version} +%{_libdir}/libLLVM-6.0.so +%endif + +%files devel +%{_bindir}/llvm-config-%{__isa_bits} +%{_mandir}/man1/llvm-config.1.* +%{_includedir}/llvm +%{_includedir}/llvm-c +%{_libdir}/libLLVM.so +%{_libdir}/cmake/llvm + +%files doc +%doc %{_docdir}/llvm/html + +%files static +%{_libdir}/*.a +%exclude %{_libdir}/libLLVMTestingSupport.a +%{_libdir}/cmake/llvm/LLVMStaticExports.cmake + +%if 0%{?enable_test_pkg} +%files test +%{_libexecdir}/tests/llvm/ +%{llvm_bindir}/unittests/ +%{_datadir}/llvm/src/test.tar.gz +%{llvm_bindir}/yaml-bench +%{llvm_bindir}/lli-child-target +%{llvm_bindir}/llvm-isel-fuzzer +%{llvm_bindir}/llvm-opt-fuzzer +%endif + +%files googletest +%{_datadir}/llvm/src/utils +%{_libdir}/libLLVMTestingSupport.a + +%changelog +* Fri Dec 14 2018 Tom Stellard - 7.0.1-1 +- 7.0.1 Release + +* Thu Dec 13 2018 Tom Stellard - 7.0.1-0.5.rc3 +- Drop compat libs + +* Wed Dec 12 2018 Tom Stellard - 7.0.1-0.4.rc3 +- Fix ambiguous python shebangs + +* Tue Dec 11 2018 Tom Stellard - 7.0.1-0.3.rc3 +- Disable threading in thinLTO + +* Tue Dec 11 2018 Tom Stellard - 7.0.1-0.2.rc3 +- Update cmake options for compat build + +* Mon Dec 10 2018 Tom Stellard - 7.0.1-0.1.rc3 +- 7.0.1-rc3 Release + +* Fri Dec 07 2018 Tom Stellard - 6.0.1-14 +- Don't build llvm-test on i686 + +* Thu Dec 06 2018 Tom Stellard - 6.0.1-13 +- Fix build when python2 is not present on system + +* Tue Nov 06 2018 Tom Stellard - 6.0.1-12 +- Fix multi-lib installation of llvm-devel + +* Tue Oct 23 2018 Tom Stellard - 6.0.1-11 +- Add sub-packages for testing + +* Mon Oct 01 2018 Tom Stellard - 6.0.1-10 +- Drop scl macros + +* Tue Aug 28 2018 Tom Stellard - 6.0.1-9 +- Drop libedit dependency + +* Tue Aug 14 2018 Tom Stellard - 6.0.1-8 +- Only enabled valgrind functionality on arches that support it + +* Mon Aug 13 2018 Tom Stellard - 6.0.1-7 +- BuildRequires: python3-devel + +* Mon Aug 06 2018 Tom Stellard - 6.0.1-6 +- Backport fixes for rhbz#1610053, rhbz#1562196, rhbz#1595996 + +* Mon Aug 06 2018 Tom Stellard - 6.0.1-5 +- Fix ld.so.conf.d path in files list + +* Sat Aug 04 2018 Tom Stellard - 6.0.1-4 +- Fix ld.so.conf.d path + +* Fri Aug 03 2018 Tom Stellard - 6.0.1-3 +- Install ld.so.conf so llvm libs are in the library search path + +* Wed Jul 25 2018 Tom Stellard - 6.0.1-2 +- Re-enable doc package now that BREW-2381 is fixed + +* Tue Jul 10 2018 Tom Stellard - 6.0.1-1 +- 6.0.1 Release + +* Mon Jun 04 2018 Tom Stellard - 5.0.1-13 +- Limit build jobs on ppc64 to avoid OOM errors + +* Sat Jun 02 2018 Tom Stellard - 5.0.1-12 +- Switch to python3-sphinx + +* Thu May 31 2018 Tom Stellard - 5.0.1-11 +- Remove conditionals to enable building only the llvm-libs package, we don't + needs these for module builds. + +* Wed May 23 2018 Tom Stellard - 5.0.1-10 +- Add BuildRequires: libstdc++-static +- Resolves: #1580785 + +* Wed Apr 04 2018 Tom Stellard - 5.0.1-9 +- Add conditionals to enable building only the llvm-libs package + +* Tue Apr 03 2018 Tom Stellard - 5.0.1-8 +- Drop BuildRequires: libstdc++-static this package does not exist in RHEL8 + +* Tue Mar 20 2018 Tilmann Scheller - 5.0.1-7 +- Backport fix for rhbz#1558226 from trunk + +* Tue Mar 06 2018 Tilmann Scheller - 5.0.1-6 +- Backport fix for rhbz#1550469 from trunk + +* Thu Feb 22 2018 Tom Stellard - 5.0.1-5 +- Backport some retpoline fixes + +* Tue Feb 06 2018 Tom Stellard - 5.0.1-4 +- Backport retpoline support + +* Mon Jan 29 2018 Tom Stellard - 5.0.1-3 +- Backport r315279 to fix an issue with rust + +* Mon Jan 15 2018 Tom Stellard - 5.0.1-2 +- Drop ExculdeArch: ppc64 + +* Mon Jan 08 2018 Tom Stellard - 5.0.1-1 +- 5.0.1 Release + +* Thu Jun 22 2017 Tom Stellard - 4.0.1-3 +- Fix Requires for devel package again. + +* Thu Jun 22 2017 Tom Stellard - 4.0.1-2 +- Fix Requires for llvm-devel + +* Tue Jun 20 2017 Tom Stellard - 4.0.1-1 +- 4.0.1 Release + +* Mon Jun 05 2017 Tom Stellard - 4.0.0-5 +- Build for llvm-toolset-7 rename + +* Mon May 01 2017 Tom Stellard - 4.0.0-4 +- Remove multi-lib workarounds + +* Fri Apr 28 2017 Tom Stellard - 4.0.0-3 +- Fix build with llvm-toolset-4 scl + +* Mon Apr 03 2017 Tom Stellard - 4.0.0-2 +- Simplify spec with rpm macros. + +* Thu Mar 23 2017 Tom Stellard - 4.0.0-1 +- LLVM 4.0.0 Final Release + +* Wed Mar 22 2017 tstellar@redhat.com - 3.9.1-6 +- Fix %%postun sep for -devel package. + +* Mon Mar 13 2017 Tom Stellard - 3.9.1-5 +- Disable failing tests on ARM. + +* Sun Mar 12 2017 Peter Robinson 3.9.1-4 +- Fix missing mask on relocation for aarch64 (rhbz 1429050) + +* Wed Mar 01 2017 Dave Airlie - 3.9.1-3 +- revert upstream radeonsi breaking change. + +* Thu Feb 23 2017 Josh Stone - 3.9.1-2 +- disable sphinx warnings-as-errors + +* Fri Feb 10 2017 Orion Poplawski - 3.9.1-1 +- llvm 3.9.1 + +* Fri Feb 10 2017 Fedora Release Engineering - 3.9.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Nov 29 2016 Josh Stone - 3.9.0-7 +- Apply backports from rust-lang/llvm#55, #57 + +* Tue Nov 01 2016 Dave Airlie - 3.9.0-5 +- apply the patch from -4 + +* Wed Oct 26 2016 Dave Airlie - 3.9.0-4 +- add fix for lldb out-of-tree build + +* Mon Oct 17 2016 Josh Stone - 3.9.0-3 +- Apply backports from rust-lang/llvm#47, #48, #53, #54 + +* Sat Oct 15 2016 Josh Stone - 3.9.0-2 +- Apply an InstCombine backport via rust-lang/llvm#51 + +* Wed Sep 07 2016 Dave Airlie - 3.9.0-1 +- llvm 3.9.0 +- upstream moved where cmake files are packaged. +- upstream dropped CppBackend + +* Wed Jul 13 2016 Adam Jackson - 3.8.1-1 +- llvm 3.8.1 +- Add mips target +- Fix some shared library mispackaging + +* Tue Jun 07 2016 Jan Vcelak - 3.8.0-2 +- fix color support detection on terminal + +* Thu Mar 10 2016 Dave Airlie 3.8.0-1 +- llvm 3.8.0 release + +* Wed Mar 09 2016 Dan Horák 3.8.0-0.3 +- install back memory consumption workaround for s390 + +* Thu Mar 03 2016 Dave Airlie 3.8.0-0.2 +- llvm 3.8.0 rc3 release + +* Fri Feb 19 2016 Dave Airlie 3.8.0-0.1 +- llvm 3.8.0 rc2 release + +* Tue Feb 16 2016 Dan Horák 3.7.1-7 +- recognize s390 as SystemZ when configuring build + +* Sat Feb 13 2016 Dave Airlie 3.7.1-6 +- export C++ API for mesa. + +* Sat Feb 13 2016 Dave Airlie 3.7.1-5 +- reintroduce llvm-static, clang needs it currently. + +* Fri Feb 12 2016 Dave Airlie 3.7.1-4 +- jump back to single llvm library, the split libs aren't working very well. + +* Fri Feb 05 2016 Dave Airlie 3.7.1-3 +- add missing obsoletes (#1303497) + +* Thu Feb 04 2016 Fedora Release Engineering - 3.7.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 07 2016 Jan Vcelak 3.7.1-1 +- new upstream release +- enable gold linker + +* Wed Nov 04 2015 Jan Vcelak 3.7.0-100 +- fix Requires for subpackages on the main package + +* Tue Oct 06 2015 Jan Vcelak 3.7.0-100 +- initial version using cmake build system