diff --git a/.clang.metadata b/.clang.metadata new file mode 100644 index 0000000..e0d29ab --- /dev/null +++ b/.clang.metadata @@ -0,0 +1,2 @@ +3cb1e10af3955174a3ca5e560f674f24fac2a02f SOURCES/cfe-8.0.0.src.tar.xz +f341ba17494ba756fd404b2744e6f5991b50389f SOURCES/clang-tools-extra-8.0.0.src.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c369156 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/cfe-8.0.0.src.tar.xz +SOURCES/clang-tools-extra-8.0.0.src.tar.xz diff --git a/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch b/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch new file mode 100644 index 0000000..66e623e --- /dev/null +++ b/SOURCES/0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch @@ -0,0 +1,120 @@ +From d84a971ba917569829b51fff6057e5fd0d85e402 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 18 Jan 2018 02:57:51 +0000 +Subject: [PATCH] Driver: Prefer vendor supplied gcc toolchain + +Summary: +This patch fixes an issue on Fedora where if you had the x86_64 cross +compiler installed on your x86_64 system, then clang would use that compiler +as the default toolchain. This was happening because the cross compiler +is installed to /usr/lib/gcc/x86_64-linux-gnu/ and this directory comes before +the default compiler directory (/usr/lib/gcc/x86_64-redhat-linux/) in the search +list. + +This patch re-orders the search list so that vendor supplied gcc toolchains +are selected before toolchains with a generic target, which should prevent +these kind of issues on other OSes too. + +Subscribers: srhines, cfe-commits + +Differential Revision: https://reviews.llvm.org/D42608 +--- + lib/Driver/ToolChains/Gnu.cpp | 47 ++++++++++++++++++++++--------------------- + 1 file changed, 24 insertions(+), 23 deletions(-) + +diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp +--- a/lib/Driver/ToolChains/Gnu.cpp ++++ b/lib/Driver/ToolChains/Gnu.cpp +@@ -1870,8 +1870,8 @@ + // lifetime or initialization issues. + static const char *const AArch64LibDirs[] = {"/lib64", "/lib"}; + static const char *const AArch64Triples[] = { +- "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", +- "aarch64-suse-linux", "aarch64-linux-android"}; ++ "aarch64-redhat-linux", "aarch64-suse-linux", "aarch64-linux-android", ++ "aarch64-none-linux-gnu", "aarch64-linux-gnu"}; + static const char *const AArch64beLibDirs[] = {"/lib"}; + static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu", + "aarch64_be-linux-gnu"}; +@@ -1879,31 +1879,34 @@ + static const char *const ARMLibDirs[] = {"/lib"}; + static const char *const ARMTriples[] = {"arm-linux-gnueabi", + "arm-linux-androideabi"}; +- static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf", +- "armv7hl-redhat-linux-gnueabi", ++ static const char *const ARMHFTriples[] = {"armv7hl-redhat-linux-gnueabi", + "armv6hl-suse-linux-gnueabi", +- "armv7hl-suse-linux-gnueabi"}; ++ "armv7hl-suse-linux-gnueabi", ++ "arm-linux-gnueabihf"}; + static const char *const ARMebLibDirs[] = {"/lib"}; + static const char *const ARMebTriples[] = {"armeb-linux-gnueabi", + "armeb-linux-androideabi"}; + static const char *const ARMebHFTriples[] = { +- "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi"}; ++ "armebv7hl-redhat-linux-gnueabi", "armeb-linux-gnueabihf"}; + + static const char *const X86_64LibDirs[] = {"/lib64", "/lib"}; + static const char *const X86_64Triples[] = { +- "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", +- "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", ++ "x86_64-redhat-linux6E", + "x86_64-redhat-linux", "x86_64-suse-linux", + "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", + "x86_64-slackware-linux", "x86_64-unknown-linux", +- "x86_64-amazon-linux", "x86_64-linux-android"}; ++ "x86_64-amazon-linux", "x86_64-linux-android", ++ "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", ++ "x86_64-pc-linux-gnu" ++ }; + static const char *const X32LibDirs[] = {"/libx32"}; + static const char *const X86LibDirs[] = {"/lib32", "/lib"}; + static const char *const X86Triples[] = { +- "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", +- "i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux", ++ "i386-redhat-linux6E", "i686-redhat-linux", + "i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux", +- "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu", ++ "i486-slackware-linux", "i686-montavista-linux", ++ "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", ++ "i386-linux-gnu", "i586-linux-gnu", + "i686-linux-android", "i386-gnu", "i486-gnu", + "i586-gnu", "i686-gnu"}; + +@@ -1940,16 +1943,16 @@ + + static const char *const PPCLibDirs[] = {"/lib32", "/lib"}; + static const char *const PPCTriples[] = { +- "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe", +- "powerpc-suse-linux", "powerpc-montavista-linuxspe"}; ++ "powerpc-suse-linux", "powerpc-montavista-linuxspe", ++ "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe"}; + static const char *const PPC64LibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64Triples[] = { +- "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu", +- "powerpc64-suse-linux", "ppc64-redhat-linux"}; ++ "powerpc64-suse-linux", "ppc64-redhat-linux", ++ "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu"}; + static const char *const PPC64LELibDirs[] = {"/lib64", "/lib"}; + static const char *const PPC64LETriples[] = { +- "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu", +- "powerpc64le-suse-linux", "ppc64le-redhat-linux"}; ++ "powerpc64le-suse-linux", "ppc64le-redhat-linux", ++ "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu"}; + + static const char *const RISCV32LibDirs[] = {"/lib", "/lib32"}; + static const char *const RISCVTriples[] = {"riscv32-unknown-linux-gnu", +@@ -1965,8 +1968,8 @@ + + static const char *const SystemZLibDirs[] = {"/lib64", "/lib"}; + static const char *const SystemZTriples[] = { +- "s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu", +- "s390x-suse-linux", "s390x-redhat-linux"}; ++ "s390x-ibm-linux-gnu", "s390x-suse-linux", "s390x-redhat-linux", ++ "s390x-linux-gnu", "s390x-unknown-linux-gnu"}; + + + using std::begin; +-- +1.8.3.1 + diff --git a/SOURCES/0001-Fix-uninitialized-value-in-ABIArgInfo.patch b/SOURCES/0001-Fix-uninitialized-value-in-ABIArgInfo.patch new file mode 100644 index 0000000..9755200 --- /dev/null +++ b/SOURCES/0001-Fix-uninitialized-value-in-ABIArgInfo.patch @@ -0,0 +1,38 @@ +From 565b9633ee68b311c1a954022869d9e99fee7286 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Fri, 1 Feb 2019 06:39:13 +0000 +Subject: [PATCH] Fix uninitialized value in ABIArgInfo + +GCC-9 takes advantage of this uninitialized values to optimize stuff, +which ends up in failing validation when compiling clang. +--- + include/clang/CodeGen/CGFunctionInfo.h | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/include/clang/CodeGen/CGFunctionInfo.h b/include/clang/CodeGen/CGFunctionInfo.h +index cf64e9f3ee..131eb38393 100644 +--- a/include/clang/CodeGen/CGFunctionInfo.h ++++ b/include/clang/CodeGen/CGFunctionInfo.h +@@ -112,14 +112,13 @@ private: + } + + ABIArgInfo(Kind K) +- : TheKind(K), PaddingInReg(false), InReg(false), SuppressSRet(false) { +- } ++ : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0), ++ TheKind(K), PaddingInReg(false), InAllocaSRet(false), IndirectByVal(false), ++ IndirectRealign(false), SRetAfterThis(false), InReg(false), ++ CanBeFlattened(false), SignExt(false), SuppressSRet(false) {} + + public: +- ABIArgInfo() +- : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0), +- TheKind(Direct), PaddingInReg(false), InReg(false), +- SuppressSRet(false) {} ++ ABIArgInfo() : ABIArgInfo(Direct) {} + + static ABIArgInfo getDirect(llvm::Type *T = nullptr, unsigned Offset = 0, + llvm::Type *Padding = nullptr, +-- +2.19.2 + diff --git a/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch b/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch new file mode 100644 index 0000000..f4f0fa3 --- /dev/null +++ b/SOURCES/0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch @@ -0,0 +1,50 @@ +From 09ae3ef5710a89505318ec721c65b6c838147276 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 7 Feb 2019 21:05:37 -0800 +Subject: [PATCH] ToolChain: Add -lgcc_s to the linker flags when using libc++ + +The libc++ build for Fedora does not include an implementation of +libunwind, so we need to explicitly link against something that +provides this implementation. +--- + clang/lib/Driver/ToolChain.cpp | 1 + + clang/test/Driver/netbsd.cpp | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp +index 88a627e..cb99844 100644 +--- a/lib/Driver/ToolChain.cpp ++++ b/lib/Driver/ToolChain.cpp +@@ -767,6 +767,7 @@ void ToolChain::AddCXXStdlibLibArgs(const ArgList &Args, + switch (Type) { + case ToolChain::CST_Libcxx: + CmdArgs.push_back("-lc++"); ++ CmdArgs.push_back("-lgcc_s"); + break; + + case ToolChain::CST_Libstdcxx: +diff --git a/test/Driver/netbsd.cpp b/test/Driver/netbsd.cpp +index 4af7d83..ff18c62 100644 +--- a/test/Driver/netbsd.cpp ++++ b/test/Driver/netbsd.cpp +@@ -131,7 +131,7 @@ + // ARM-7: clang{{.*}}" "-cc1" "-triple" "armv5e-unknown-netbsd7.0.0-eabi" + // ARM-7: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so" + // ARM-7: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}eabi{{/|\\\\}}crti.o" +-// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lm" "-lc" ++// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lgcc_s" "-lm" "-lc" + // ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + + // AARCH64: clang{{.*}}" "-cc1" "-triple" "aarch64-unknown-netbsd" +@@ -250,7 +250,7 @@ + // S-ARM-7: clang{{.*}}" "-cc1" "-triple" "armv5e-unknown-netbsd7.0.0-eabi" + // S-ARM-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" + // S-ARM-7: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}eabi{{/|\\\\}}crti.o" +-// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lm" "-lc" ++// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" "-lgcc_s" "-lm" "-lc" + // S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + + // S-AARCH64: clang{{.*}}" "-cc1" "-triple" "aarch64-unknown-netbsd" +-- +1.8.3.1 + diff --git a/SOURCES/0002-gtest-reorg.patch b/SOURCES/0002-gtest-reorg.patch new file mode 100644 index 0000000..121ac46 --- /dev/null +++ b/SOURCES/0002-gtest-reorg.patch @@ -0,0 +1,42 @@ +From 1f26a0284925859b72ee520ce74452d77d822409 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Mon, 28 Jan 2019 19:12:27 +0000 +Subject: [PATCH 2/2] [PATCH] gtest reorg + +--- + CMakeLists.txt | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c2016a45ca..48ea3c3bb9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -157,12 +157,6 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.") + set(LLVM_UTILS_PROVIDED ON) + set(CLANG_TEST_DEPS FileCheck count not) + endif() +- set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) +- if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h +- AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} +- AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) +- add_subdirectory(${UNITTEST_DIR} utils/unittest) +- endif() + else() + # Seek installed Lit. + find_program(LLVM_LIT +@@ -507,7 +501,11 @@ endif() + + + if( CLANG_INCLUDE_TESTS ) +- if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include/gtest/gtest.h) ++ set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) ++ if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h ++ AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} ++ AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) ++ add_subdirectory(${UNITTEST_DIR} utils/unittest) + add_subdirectory(unittests) + list(APPEND CLANG_TEST_DEPS ClangUnitTests) + list(APPEND CLANG_TEST_PARAMS +-- +2.19.2 + diff --git a/SPECS/clang.spec b/SPECS/clang.spec new file mode 100644 index 0000000..ab2e453 --- /dev/null +++ b/SPECS/clang.spec @@ -0,0 +1,540 @@ +%global maj_ver 8 +%global min_ver 0 +%global patch_ver 0 +#%%global rc_ver 4 + +#i686 disabled because llvm-test is not built for this target +# other targets disables because of failing tests +%ifnarch s390x i686 ppc64le %{arm} +%global enable_test_pkg 1 +%endif + +%global clang_tools_binaries \ + %{_bindir}/clangd \ + %{_bindir}/clang-apply-replacements \ + %{_bindir}/clang-change-namespace \ + %{_bindir}/clang-include-fixer \ + %{_bindir}/clang-query \ + %{_bindir}/clang-refactor \ + %{_bindir}/clang-reorder-fields \ + %{_bindir}/clang-rename \ + %{_bindir}/clang-tidy + +%global clang_binaries \ + %{_bindir}/clang \ + %{_bindir}/clang++ \ + %{_bindir}/clang-%{maj_ver} \ + %{_bindir}/clang++-%{maj_ver} \ + %{_bindir}/clang-check \ + %{_bindir}/clang-cl \ + %{_bindir}/clang-cpp \ + %{_bindir}/clang-extdef-mapping \ + %{_bindir}/clang-format \ + %{_bindir}/clang-import-test \ + %{_bindir}/clang-offload-bundler \ + %{_bindir}/diagtool \ + %{_bindir}/hmaptool + +%global pkg_name clang +%global install_prefix /usr + +%if 0%{?fedora} || 0%{?rhel} > 7 +%bcond_without python3 +%else +%bcond_with python3 +%endif + +%global build_install_prefix %{buildroot}%{install_prefix} +%ifarch ppc64le +# Too many threads on 32 core ppc64 systems causes OOM errors. +%global _smp_mflags -j8 +%endif + +%global clang_srcdir cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src +%global clang_tools_srcdir clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src + +Name: %pkg_name +Version: %{maj_ver}.%{min_ver}.%{patch_ver} +Release: 1%{?rc_ver:.rc%{rc_ver}}%{?dist} +Summary: A C language family front-end for LLVM + +License: NCSA +URL: http://llvm.org +Source0: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}}/%{clang_srcdir}.tar.xz +%if !0%{?compat_build} +Source1: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz +%endif + +Patch3: 0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch +Patch4: 0002-gtest-reorg.patch +Patch9: 0001-Fix-uninitialized-value-in-ABIArgInfo.patch +Patch11: 0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: ninja-build +BuildRequires: llvm-devel = %{version} +# llvm-static is required, because clang-tablegen needs libLLVMTableGen, which +# is not included in libLLVM.so. +BuildRequires: llvm-static = %{version} +# Required for make check +%if 0%{?enable_test_pkg} +BuildRequires: llvm-test = %{version} +BuildRequires: llvm-googletest = %{version} +%endif +BuildRequires: libxml2-devel +BuildRequires: perl-generators +BuildRequires: ncurses-devel +# According to https://fedoraproject.org/wiki/Packaging:Emacs a package +# should BuildRequires: emacs if it packages emacs integration files. +BuildRequires: emacs + +# These build dependencies are required for the test suite. +%if %with python3 +# The testsuite uses /usr/bin/lit which is part of the python3-lit package. +BuildRequires: python3-lit +%endif + +BuildRequires: python3-sphinx +BuildRequires: libatomic + +# We need python3-devel for pathfix.py. +BuildRequires: python3-devel + +# Needed for %%multilib_fix_c_header +BuildRequires: multilib-rpm-config +BuildRequires: chrpath + +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +# clang requires gcc, clang++ requires libstdc++-devel +# - https://bugzilla.redhat.com/show_bug.cgi?id=1021645 +# - https://bugzilla.redhat.com/show_bug.cgi?id=1158594 +Requires: libstdc++-devel +Requires: gcc-c++ + +Requires: emacs-filesystem + +Provides: clang(major) = %{maj_ver} + +%description +clang: noun + 1. A loud, resonant, metallic sound. + 2. The strident call of a crane or goose. + 3. C-language family front-end toolkit. + +The goal of the Clang project is to create a new C, C++, Objective C +and Objective C++ front-end for the LLVM compiler. Its tools are built +as libraries and designed to be loosely-coupled and extensible. + +%package libs +Summary: Runtime library for clang +Recommends: compiler-rt%{?_isa} = %{version} +Recommends: libomp%{_isa} = %{version} + +%description libs +Runtime library for clang. + +%package devel +Summary: Development header files for clang +Requires: %{name}%{?_isa} = %{version}-%{release} +# The clang CMake files reference tools from clang-tools-extra. +Requires: %{name}-tools-extra%{?_isa} = %{version}-%{release} + +%description devel +Development header files for clang. + +%package analyzer +Summary: A source code analysis framework +License: NCSA and MIT +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description analyzer +The Clang Static Analyzer consists of both a source code analysis +framework and a standalone tool that finds bugs in C and Objective-C +programs. The standalone tool is invoked from the command-line, and is +intended to run in tandem with a build of a project or code base. + +%package tools-extra +Summary: Extra tools for clang +Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: emacs-filesystem + +%description tools-extra +A set of extra tools built using Clang's tooling API. + +# Put git-clang-format in its own package, because it Requires git +# and we don't want to force users to install all those dependenices if they +# just want clang. +%package -n git-clang-format +Summary: Integration of clang-format for git +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: git +Requires: python3 + +%description -n git-clang-format +clang-format integration for git. + + +%package -n python3-clang +Summary: Python3 bindings for clang +Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: python3 +%description -n python3-clang +%{summary}. + + + + +%prep +%setup -T -q -b 1 -n clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src + +pathfix.py -i %{__python3} -pn \ + clang-tidy/tool/*.py \ + include-fixer/find-all-symbols/tool/run-find-all-symbols.py + +%setup -q -n cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src + +%patch3 -p1 -b .rhel +%patch4 -p1 -b .gtest +%patch9 -p1 -b .abi-arginfo +%patch11 -p1 -b .libcxx-fix + +mv ../%{clang_tools_srcdir} tools/extra + +%if 0%{?__isa_bits} == 64 +sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@/64/g' test/lit.cfg.py +%else +sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@//g' test/lit.cfg.py +%endif + +pathfix.py -i %{__python3} -pn \ + tools/clang-format/*.py \ + tools/clang-format/git-clang-format \ + utils/hmaptool/hmaptool \ + tools/scan-view/bin/scan-view + + + +%build + +mkdir -p _build +cd _build + +%ifarch s390 s390x %{arm} %ix86 +# Decrease debuginfo verbosity to reduce memory consumption during final library linking +%global optflags %(echo %{optflags} | sed 's/-g /-g1 /') +%endif + +%cmake .. -G Ninja \ + -DLLVM_PARALLEL_LINK_JOBS=1 \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DPYTHON_EXECUTABLE=%{__python3} \ + -DCMAKE_SKIP_RPATH:BOOL=ON \ + -DCMAKE_INSTALL_RPATH:BOOL=OFF \ + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ +%if 0%{?__isa_bits} == 64 + -DLLVM_LIBDIR_SUFFIX=64 \ +%else + -DLLVM_LIBDIR_SUFFIX= \ +%endif + \ + -DLLVM_TABLEGEN_EXE:FILEPATH=%{_bindir}/llvm-tblgen \ + -DCLANG_ENABLE_ARCMT:BOOL=ON \ + -DCLANG_ENABLE_STATIC_ANALYZER:BOOL=ON \ + -DCLANG_INCLUDE_DOCS:BOOL=ON \ + -DCLANG_PLUGIN_SUPPORT:BOOL=ON \ + -DENABLE_LINKER_BUILD_ID:BOOL=ON \ + -DLLVM_ENABLE_EH=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_BUILD_DOCS=ON \ + -DLLVM_ENABLE_SPHINX=ON \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + \ + -DCLANG_BUILD_EXAMPLES:BOOL=OFF \ + -DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}" + +ninja -v -j2 + +%install +DESTDIR=%{buildroot} ninja install -C _build + + +# install clang python bindings +mkdir -p %{buildroot}%{python3_sitelib}/clang/ +install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/ +%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/clang + +# multilib fix +%multilib_fix_c_header --file %{_includedir}/clang/Config/config.h + +# Move emacs integration files to the correct directory +mkdir -p %{buildroot}%{_emacs_sitestartdir} +for f in clang-format.el clang-rename.el clang-include-fixer.el; do +mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/$f +done + +# remove editor integrations (bbedit, sublime, emacs, vim) +rm -vf %{buildroot}%{_datadir}/clang/clang-format-bbedit.applescript +rm -vf %{buildroot}%{_datadir}/clang/clang-format-sublime.py* + +# TODO: Package html docs +rm -Rvf %{buildroot}%{_pkgdocdir} + +# TODO: What are the Fedora guidelines for packaging bash autocomplete files? +rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh + +# Create Manpage symlinks +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++.1.gz +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz +ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz + +# Add clang++-{version} sylink +ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} + + +# Fix permission +chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* + + +%check +# requires lit.py from LLVM utilities + +%if 0%{?enable_test_pkg} +LD_LIBRARY_PATH=%{buildroot}%{_libdir} ninja check-all -j2 -C _build +%endif + + + +%files +%{clang_binaries} +%{_bindir}/c-index-test +%{_mandir}/man1/clang.1.gz +%{_mandir}/man1/clang++.1.gz +%{_mandir}/man1/clang-%{maj_ver}.1.gz +%{_mandir}/man1/clang++-%{maj_ver}.1.gz +%{_mandir}/man1/diagtool.1.gz +%{_emacs_sitestartdir}/clang-format.el +%{_datadir}/clang/clang-format.py* +%{_datadir}/clang/clang-format-diff.py* + +%files libs +%{_libdir}/clang/ +%{_libdir}/*.so.* + +%files devel +%{_libdir}/*.so +%{_includedir}/clang/ +%{_includedir}/clang-c/ +%{_libdir}/cmake/* +%dir %{_datadir}/clang/ + +%files analyzer +%{_bindir}/scan-view +%{_bindir}/scan-build +%{_libexecdir}/ccc-analyzer +%{_libexecdir}/c++-analyzer +%{_datadir}/scan-view/ +%{_datadir}/scan-build/ +%{_mandir}/man1/scan-build.1.* + +%files tools-extra +%{clang_tools_binaries} +%{_bindir}/find-all-symbols +%{_bindir}/modularize +%{_emacs_sitestartdir}/clang-rename.el +%{_emacs_sitestartdir}/clang-include-fixer.el +%{_datadir}/clang/clang-include-fixer.py* +%{_datadir}/clang/clang-tidy-diff.py* +%{_datadir}/clang/run-clang-tidy.py* +%{_datadir}/clang/run-find-all-symbols.py* +%{_datadir}/clang/clang-rename.py* + +%files -n git-clang-format +%{_bindir}/git-clang-format + +%files -n python3-clang +%{python3_sitelib}/clang/ + + +%changelog +* Thu Apr 11 2019 sguelton@redhat.com - 8.0.0-1 +- 8.0.0 Release + +* Fri Dec 14 2018 Tom Stellard - 7.0.1-1 +- 7.0.1-1 Release + +* Mon Dec 10 2018 Tom Stellard - 7.0.1-0.1.rc3 +- 7.0.1-rc3 Release + +* Mon Nov 05 2018 Tom Stellard - 6.0.1-12 +- User helper macro to fixup config.h for multilib + +* Sat Oct 27 2018 Tom Stellard - 6.0.1-11 +- Enable make check + +* Mon Oct 15 2018 Tom Stellard - 6.0.1-10 +- Remove Provides: llvm-toolset-6.0-clang-libs + +* Fri Oct 12 2018 Tom Stellard - 6.0.1-9 +- Add Provides: llvm-toolset-6.0-clang-libs + +* Tue Oct 02 2018 Tom Stellard - 6.0.1-8 +- Don't use python2 for the build + +* Mon Oct 01 2018 Tom Stellard - 6.0.1-7 +- Drop scl macros + +* Tue Sep 25 2018 Tomas Orsava - 6.0.1-6 +- Change Requires from python3 to platform-python +- The python3 package was renamed to platform-python +- Related: rhbz#1619153 + +* Fri Sep 14 2018 Tom Stellard - 6.0.1-5 +- Use python3 for git-clang-format + +* Thu Sep 13 2018 Tom Stellard - 6.0.1-4 +- Fix python dependencies + +* Tue Aug 07 2018 Tom Stellard - 6.0.1-3 +- Install ld.so.conf file in the root filesystem + +* Thu Aug 02 2018 Tom Stellard - 6.0.1-2 +- Remove annobin work-around + +* Wed Jul 11 2018 Tom Stellard - 6.0.1-1 +- 6.0.1 Release + +* Wed Apr 11 2018 Tom Stellard - 5.0.1-7 +- Add conditionals to enable building only the clang-libs package + +* Fri Apr 06 2018 Tom Stellard - 5.0.1-6 +- Use cmake from base RHEL + +* Mon Mar 19 2018 Tom Stellard - 5.0.1-5 +- Backport r310435 from clang trunk. rhbz#1558223 + +* Mon Mar 19 2018 Tom Stellard - 5.0.1-4 +- Use system gcc instead of dts. + +* Tue Feb 06 2018 Tom Stellard - 5.0.1-3 +- Backport retpoline support + +* Sat Jan 20 2018 Tom Stellard - 5.0.1-2 +- Limit number of build threads on ppc64le to avoid OOM errors + +* Tue Jan 09 2018 Tom Stellard - 5.0.1-1 +- 5.0.1 Release + +* Wed Jun 21 2017 Tom Stellard - 4.0.1-1 +- 4.0.1 Release. + +* Wed Jun 21 2017 Tom Stellard - 4.0.0-15 +- Fix Requires for clang-tools-extra + +* Wed Jun 21 2017 Tom Stellard - 4.0.0-13 +- Drop libomp dependency on s390x + +* Thu Jun 15 2017 Tom Stellard - 4.0.0-12 +- Use libstdc++ from devtoolset-7 + +* Wed Jun 07 2017 Tom Stellard - 4.0.0-11 +- Fix libomp requires + +* Wed Jun 07 2017 Tom Stellard - 4.0.0-10 +- Build for llvm-toolset-7 rename + +* Tue May 30 2017 Tom Stellard - 4.0.0-9 +- Use ld from devtoolset in clang toolchain + +* Mon May 29 2017 Tom Stellard - 4.0.0-8 +- Add dependency on libopenmp + +* Thu May 25 2017 Tom Stellard - 4.0.0-7 +- Fix check for gcc install + +* Wed May 24 2017 Tom Stellard - 4.0.0-6 +- Add devtoolset-6 dependency for newer libstdc++ + +* Fri May 12 2017 Tom Stellard - 4.0.0-5 +- Add dependency on compiler-rt + +* Tue May 02 2017 Tom Stellard +- Fix dependencies with scl + +* Mon May 01 2017 Tom Stellard - 4.0.0-4 +- Build with llvm-toolset-4 + +* Mon Mar 27 2017 Tom Stellard - 4.0.0-3 +- Enable eh/rtti, which are required by lldb. + +* Fri Mar 24 2017 Tom Stellard - 4.0.0-2 +- Fix clang-tools-extra build +- Fix install + +* Thu Mar 23 2017 Tom Stellard - 4.0.0-1 +- clang 4.0.0 final release + +* Mon Mar 20 2017 David Goerger - 3.9.1-3 +- add clang-tools-extra rhbz#1328091 + +* Thu Mar 16 2017 Tom Stellard - 3.9.1-2 +- Enable build-id by default rhbz#1432403 + +* Thu Mar 02 2017 Dave Airlie - 3.9.1-1 +- clang 3.9.1 final release + +* Fri Feb 10 2017 Fedora Release Engineering - 3.9.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Nov 14 2016 Nathaniel McCallum - 3.9.0-3 +- Add Requires: compiler-rt to clang-libs. +- Without this, compiling with certain CFLAGS breaks. + +* Tue Nov 1 2016 Peter Robinson 3.9.0-2 +- Rebuild for new arches + +* Fri Oct 14 2016 Dave Airlie - 3.9.0-1 +- clang 3.9.0 final release + +* Fri Jul 01 2016 Stephan Bergmann - 3.8.0-2 +- Resolves: rhbz#1282645 add GCC abi_tag support + +* Thu Mar 10 2016 Dave Airlie 3.8.0-1 +- clang 3.8.0 final release + +* Thu Mar 03 2016 Dave Airlie 3.8.0-0.4 +- clang 3.8.0rc3 + +* Wed Feb 24 2016 Dave Airlie - 3.8.0-0.3 +- package all libs into clang-libs. + +* Wed Feb 24 2016 Dave Airlie 3.8.0-0.2 +- enable dynamic linking of clang against llvm + +* Thu Feb 18 2016 Dave Airlie - 3.8.0-0.1 +- clang 3.8.0rc2 + +* Fri Feb 12 2016 Dave Airlie 3.7.1-4 +- rebuild against latest llvm packages +- add BuildRequires llvm-static + +* Wed Feb 03 2016 Fedora Release Engineering - 3.7.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 28 2016 Dave Airlie 3.7.1-2 +- just accept clang includes moving to /usr/lib64, upstream don't let much else happen + +* Thu Jan 28 2016 Dave Airlie 3.7.1-1 +- initial build in Fedora. + +* Tue Oct 06 2015 Jan Vcelak 3.7.0-100 +- initial version using cmake build system