diff --git a/.clang.metadata b/.clang.metadata new file mode 100644 index 0000000..0ea63d6 --- /dev/null +++ b/.clang.metadata @@ -0,0 +1,2 @@ +427e12762836d808583fb4149c033d02de0a8db2 SOURCES/cfe-7.0.1.src.tar.xz +6f4048482c4cf1818133120565c2dcd1d3a62747 SOURCES/clang-tools-extra-7.0.1.src.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..061149c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/cfe-7.0.1.src.tar.xz +SOURCES/clang-tools-extra-7.0.1.src.tar.xz diff --git a/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch b/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch new file mode 100644 index 0000000..2c15ece --- /dev/null +++ b/SOURCES/0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch @@ -0,0 +1,52 @@ +From a1bccf89a02accab69b359ef004faa95257333c0 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 7 Sep 2018 18:27:16 +0000 +Subject: [PATCH] Convert clang-format-diff.py to python3 using 2to3 + +--- + tools/clang-format/clang-format-diff.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/tools/clang-format/clang-format-diff.py b/tools/clang-format/clang-format-diff.py +index ffa30e70dd..1525a3815c 100755 +--- a/tools/clang-format/clang-format-diff.py ++++ b/tools/clang-format/clang-format-diff.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/python3 + # + #===- clang-format-diff.py - ClangFormat Diff Reformatter ----*- python -*--===# + # +@@ -27,7 +27,7 @@ import difflib + import re + import string + import subprocess +-import StringIO ++import io + import sys + + +@@ -89,9 +89,9 @@ def main(): + ['-lines', str(start_line) + ':' + str(end_line)]) + + # Reformat files containing changes in place. +- for filename, lines in lines_by_file.iteritems(): ++ for filename, lines in lines_by_file.items(): + if args.i and args.verbose: +- print 'Formatting', filename ++ print('Formatting', filename) + command = [args.binary, filename] + if args.i: + command.append('-i') +@@ -109,7 +109,7 @@ def main(): + if not args.i: + with open(filename) as f: + code = f.readlines() +- formatted_code = StringIO.StringIO(stdout).readlines() ++ formatted_code = io.StringIO(stdout).readlines() + diff = difflib.unified_diff(code, formatted_code, + filename, filename, + '(before formatting)', '(after formatting)') +-- +2.14.3 + diff --git a/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch b/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch new file mode 100644 index 0000000..620f80d --- /dev/null +++ b/SOURCES/0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch @@ -0,0 +1,61 @@ +From 6430ef09aecb30bce588c2d7f35b2294d219c835 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Mon, 26 Nov 2018 19:18:12 -0800 +Subject: [PATCH] Convert run-find-all-symbols.py to python3 using 2to3 + +--- + include-fixer/find-all-symbols/tool/run-find-all-symbols.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/include-fixer/find-all-symbols/tool/run-find-all-symbols.py b/include-fixer/find-all-symbols/tool/run-find-all-symbols.py +index 461d959..89a6cf5 100755 +--- a/include-fixer/find-all-symbols/tool/run-find-all-symbols.py ++++ b/include-fixer/find-all-symbols/tool/run-find-all-symbols.py +@@ -27,7 +27,7 @@ import argparse + import json + import multiprocessing + import os +-import Queue ++import queue + import shutil + import subprocess + import sys +@@ -40,7 +40,7 @@ def find_compilation_database(path): + result = './' + while not os.path.isfile(os.path.join(result, path)): + if os.path.realpath(result) == '/': +- print 'Error: could not find compilation database.' ++ print('Error: could not find compilation database.') + sys.exit(1) + result += '../' + return os.path.realpath(result) +@@ -50,7 +50,7 @@ def MergeSymbols(directory, args): + """Merge all symbol files (yaml) in a given directaory into a single file.""" + invocation = [args.binary, '-merge-dir='+directory, args.saving_path] + subprocess.call(invocation) +- print 'Merge is finished. Saving results in ' + args.saving_path ++ print('Merge is finished. Saving results in ' + args.saving_path) + + + def run_find_all_symbols(args, tmpdir, build_path, queue): +@@ -96,7 +96,7 @@ def main(): + + try: + # Spin up a bunch of tidy-launching threads. +- queue = Queue.Queue(max_task) ++ queue = queue.Queue(max_task) + for _ in range(max_task): + t = threading.Thread(target=run_find_all_symbols, + args=(args, tmpdir, build_path, queue)) +@@ -116,7 +116,7 @@ def main(): + except KeyboardInterrupt: + # This is a sad hack. Unfortunately subprocess goes + # bonkers with ctrl-c and we start forking merrily. +- print '\nCtrl-C detected, goodbye.' ++ print('\nCtrl-C detected, goodbye.') + os.kill(0, 9) + + +-- +1.8.3.1 + diff --git a/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch b/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch new file mode 100644 index 0000000..2534c6e --- /dev/null +++ b/SOURCES/0001-Convert-scan-view-to-python3-using-2to3.patch @@ -0,0 +1,93 @@ +From c760f8d703af0c67774681b5a259d5dd3a1e5a77 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 19 Sep 2018 08:53:10 -0700 +Subject: [PATCH] Convert scan-view to python3 using 2to3 + +--- + tools/scan-view/bin/scan-view | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/tools/scan-view/bin/scan-view b/tools/scan-view/bin/scan-view +index 1b6e8ba..ca3dac5 100755 +--- a/tools/scan-view/bin/scan-view ++++ b/tools/scan-view/bin/scan-view +@@ -7,9 +7,9 @@ import sys + import imp + import os + import posixpath +-import thread ++import _thread + import time +-import urllib ++import urllib.request, urllib.parse, urllib.error + import webbrowser + + # How long to wait for server to start. +@@ -27,7 +27,7 @@ kMaxPortsToTry = 100 + + def url_is_up(url): + try: +- o = urllib.urlopen(url) ++ o = urllib.request.urlopen(url) + except IOError: + return False + o.close() +@@ -35,7 +35,7 @@ def url_is_up(url): + + + def start_browser(port, options): +- import urllib ++ import urllib.request, urllib.parse, urllib.error + import webbrowser + + url = 'http://%s:%d' % (options.host, port) +@@ -52,10 +52,10 @@ def start_browser(port, options): + sys.stderr.flush() + time.sleep(kSleepTimeout) + else: +- print >> sys.stderr, 'WARNING: Unable to detect that server started.' ++ print('WARNING: Unable to detect that server started.', file=sys.stderr) + + if options.debug: +- print >> sys.stderr, '%s: Starting webbrowser...' % sys.argv[0] ++ print('%s: Starting webbrowser...' % sys.argv[0], file=sys.stderr) + webbrowser.open(url) + + +@@ -69,9 +69,9 @@ def run(port, options, root): + + import ScanView + try: +- print 'Starting scan-view at: http://%s:%d' % (options.host, +- port) +- print ' Use Ctrl-C to exit.' ++ print('Starting scan-view at: http://%s:%d' % (options.host, ++ port)) ++ print(' Use Ctrl-C to exit.') + httpd = ScanView.create_server((options.host, port), + options, root) + httpd.serve_forever() +@@ -80,9 +80,9 @@ def run(port, options, root): + + + def port_is_open(port): +- import SocketServer ++ import socketserver + try: +- t = SocketServer.TCPServer((kDefaultHost, port), None) ++ t = socketserver.TCPServer((kDefaultHost, port), None) + except: + return False + t.server_close() +@@ -135,7 +135,7 @@ def main(): + # Kick off thread to wait for server and start web browser, if + # requested. + if args.startBrowser: +- t = thread.start_new_thread(start_browser, (port, args)) ++ t = _thread.start_new_thread(start_browser, (port, args)) + + run(port, args, args.root) + +-- +1.8.3.1 + diff --git a/SOURCES/0001-Don-t-prefer-python2.7.patch b/SOURCES/0001-Don-t-prefer-python2.7.patch new file mode 100644 index 0000000..fb9963d --- /dev/null +++ b/SOURCES/0001-Don-t-prefer-python2.7.patch @@ -0,0 +1,24 @@ +From 3f9cebe235dac01f22c8edd84a2d5d075cb90a17 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 5 Sep 2018 21:43:42 -0700 +Subject: [PATCH] Don't prefer python2.7 + +--- + CMakeLists.txt | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d4f67f1..f82de1e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -109,7 +109,6 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) + set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) + + if(LLVM_INCLUDE_TESTS) +- set(Python_ADDITIONAL_VERSIONS 2.7) + include(FindPythonInterp) + if(NOT PYTHONINTERP_FOUND) + message(FATAL_ERROR +-- +1.8.3.1 + 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..b9d0aee --- /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 +index 3755673..5a49a6e 100644 +--- a/lib/Driver/ToolChains/Gnu.cpp ++++ b/lib/Driver/ToolChains/Gnu.cpp +@@ -1811,18 +1811,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + // 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-redhat-linux", "aarch64-suse-linux", ++ "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"}; + + static const char *const ARMLibDirs[] = {"/lib"}; + static const char *const ARMTriples[] = {"arm-linux-gnueabi"}; +- 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"}; + static const char *const ARMebHFTriples[] = { +@@ -1830,19 +1831,19 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + 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-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-redhat-linux6E", "x86_64-redhat-linux", ++ "x86_64-suse-linux", "x86_64-slackware-linux", ++ "x86_64-manbo-linux-gnu", "x86_64-amazon-linux", ++ "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", ++ "x86_64-pc-linux-gnu", "x86_64-linux-gnu", ++ "x86_64-unknown-linux"}; + 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", +- "i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux", +- "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu"}; ++ "i386-redhat-linux6E", "i686-redhat-linux", "i586-redhat-linux", ++ "i386-redhat-linux", "i586-suse-linux", "i486-slackware-linux", ++ "i686-montavista-linux", "i686-linux-gnu", "i686-pc-linux-gnu", ++ "i486-linux-gnu", "i386-linux-gnu", "i586-linux-gnu"}; + + static const char *const MIPSLibDirs[] = {"/lib"}; + static const char *const MIPSTriples[] = {"mips-linux-gnu", "mips-mti-linux", +@@ -1864,16 +1865,16 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + 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", +@@ -1889,8 +1890,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + + 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-GCC-compatibility-Ignore-fstack-clash-protection.patch b/SOURCES/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch new file mode 100644 index 0000000..5683b71 --- /dev/null +++ b/SOURCES/0001-GCC-compatibility-Ignore-fstack-clash-protection.patch @@ -0,0 +1,42 @@ +From 428ca4520a79ec5a6df9c6adc8b8069623868cdb Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Fri, 26 Jan 2018 11:38:04 -0800 +Subject: [PATCH] GCC compatibility: Ignore -fstack-clash-protection + +Reviewers: sylvestre.ledru + +Subscribers: cfe-commits + +Differential Revision: https://reviews.llvm.org/D42593 +--- + include/clang/Driver/Options.td | 1 + + test/Driver/clang_f_opts.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td +index 41f31cf..e9078a2 100644 +--- a/include/clang/Driver/Options.td ++++ b/include/clang/Driver/Options.td +@@ -2705,6 +2705,7 @@ defm single_precision_constant : BooleanFFlag<"single-precision-constant">, + Group; + defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group; + defm stack_check : BooleanFFlag<"stack-check">, Group; ++defm stack_clash_protection : BooleanFFlag<"stack-clash-protection">, Group; + defm strength_reduce : + BooleanFFlag<"strength-reduce">, Group; + defm tls_model : BooleanFFlag<"tls-model">, Group; +diff --git a/test/Driver/clang_f_opts.c b/test/Driver/clang_f_opts.c +index 5755c5d..8710ff4 100644 +--- a/test/Driver/clang_f_opts.c ++++ b/test/Driver/clang_f_opts.c +@@ -284,6 +284,7 @@ + // RUN: -ffriend-injection \ + // RUN: -fno-implement-inlines -fimplement-inlines \ + // RUN: -fstack-check \ ++// RUN: -fstack-clash-protection \ + // RUN: -fforce-addr \ + // RUN: -malign-functions=100 \ + // RUN: -malign-loops=100 \ +-- +1.8.3.1 + diff --git a/SOURCES/0001-gtest-reorg.patch b/SOURCES/0001-gtest-reorg.patch new file mode 100644 index 0000000..4d8693a --- /dev/null +++ b/SOURCES/0001-gtest-reorg.patch @@ -0,0 +1,42 @@ +From 3b2afecc227d652f84f883d4018d43971de6a311 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Wed, 21 Mar 2018 07:17:00 -0700 +Subject: [PATCH] gtest reorg + +--- + CMakeLists.txt | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 2eee8e6..01d290f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -142,12 +142,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 +@@ -477,7 +471,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 +-- +1.8.3.1 + diff --git a/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch b/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch new file mode 100644 index 0000000..508434d --- /dev/null +++ b/SOURCES/0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch @@ -0,0 +1,27 @@ +From 06cde370a44393d65bae7f61279900b5838b4a2c Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Tue, 23 Jan 2018 18:59:20 -0800 +Subject: [PATCH] lit.cfg: Add hack so lit can find not and FileCheck + +--- + test/lit.cfg.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/test/lit.cfg.py b/test/lit.cfg.py +index 5323cfe..5b4184e 100644 +--- a/test/lit.cfg.py ++++ b/test/lit.cfg.py +@@ -39,7 +39,10 @@ config.test_source_root = os.path.dirname(__file__) + # test_exec_root: The root path where tests should be run. + config.test_exec_root = os.path.join(config.clang_obj_root, 'test') + ++old_llvm_tools_dir = llvm_config.config.llvm_tools_dir ++llvm_config.config.llvm_tools_dir = '/usr/lib@FEDORA_LLVM_LIB_SUFFIX@/llvm' + llvm_config.use_default_substitutions() ++llvm_config.config.llvm_tools_dir = old_llvm_tools_dir + + llvm_config.use_clang() + +-- +1.8.3.1 + diff --git a/SPECS/clang.spec b/SPECS/clang.spec new file mode 100644 index 0000000..9757973 --- /dev/null +++ b/SPECS/clang.spec @@ -0,0 +1,470 @@ +%global maj_ver 7 +%global min_ver 0 +%global patch_ver 1 + +%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-check \ + %{_bindir}/clang-cl \ + %{_bindir}/clang-cpp \ + %{_bindir}/clang-format \ + %{_bindir}/clang-func-mapping \ + %{_bindir}/clang-import-test \ + %{_bindir}/clang-offload-bundler \ + %{_bindir}/diagtool \ + %{_bindir}/hmaptool + +%if 0%{?fedora} || 0%{?rhel} > 7 +%bcond_without python3 +%else +%bcond_with python3 +%endif + +%ifarch ppc64le +# Too many threads on 32 core ppc64 systems causes OOM errors. +%global _smp_mflags -j8 +%endif + +Name: clang +Version: %{maj_ver}.%{min_ver}.%{patch_ver} +Release: 1%{?dist} +Summary: A C language family front-end for LLVM + +License: NCSA +URL: http://llvm.org +Source0: http://llvm.org/releases/%{version}/cfe-%{version}%{?rc_ver:rc%{rc_ver}}.src.tar.xz +Source1: http://llvm.org/releases/%{version}/clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src.tar.xz + +Patch0: 0001-lit.cfg-Add-hack-so-lit-can-find-not-and-FileCheck.patch +Patch1: 0001-GCC-compatibility-Ignore-fstack-clash-protection.patch +Patch2: 0001-Driver-Prefer-vendor-supplied-gcc-toolchain.patch +Patch4: 0001-gtest-reorg.patch +Patch5: 0001-Don-t-prefer-python2.7.patch +Patch6: 0001-Convert-clang-format-diff.py-to-python3-using-2to3.patch +Patch7: 0001-Convert-scan-view-to-python3-using-2to3.patch + +# clang-tools-extra patches +Patch100: 0001-Convert-run-find-all-symbols.py-to-python3-using-2to.patch + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: llvm-devel = %{version} +BuildRequires: libxml2-devel +# llvm-static is required, because clang-tablegen needs libLLVMTableGen, which +# is not included in libLLVM.so. +BuildRequires: llvm-static = %{version} +# Required for make check +BuildRequires: llvm-googletest = %{version} +BuildRequires: libxml2-devel +BuildRequires: ncurses-devel +BuildRequires: python3-lit +BuildRequires: python3-sphinx +BuildRequires: libatomic +BuildRequires: %{_bindir}/pathfix.py +BuildRequires: /usr/bin/python3 + +# Needed for %%multilib_fix_c_header +BuildRequires: multilib-rpm-config + +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%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} + +# libomp does not support s390x. +%ifnarch s390x +Recommends: libomp%{?_isa} >= %{version} +%endif + +# 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 + +# Making these BuildRequires because they are needed by tests +BuildRequires: libstdc++-devel +BuildRequires: gcc-c++ +Requires: libstdc++-devel +Requires: gcc-c++ + + +%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} +Requires: llvm-libs%{?_isa} = %{version} + + +%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} +# not picked up automatically since files are currently not installed in +# standard Python hierarchies yet +Requires: platform-python + +%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: llvm-libs%{?_isa} = %{version} +Requires: clang-libs%{?_isa} = %{version}-%{release} + +%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 python2 +# and we don't want to force users to install all those dependenices if they +# just want clang. +%package -n git-clang-format +Summary: clang-format integration for git +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: git + +%description -n git-clang-format +clang-format integration for git. + +%prep + +%setup -T -q -b 1 -n clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src + +%patch100 -p1 -b .find-all-symbols-py3 + +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 +%patch0 -p1 -b .lit-search-path +%patch1 -p1 -b .fstack-clash-protection +%patch2 -p1 -b .vendor-gcc +%patch4 -p1 -b .gtest +%patch5 -p1 -b .no-python2 +%patch6 -p1 -b .clang-format-diff-py3 +%patch7 -p1 -b .scan-view-py3 + +mv ../clang-tools-extra-%{version}%{?rc_ver:rc%{rc_ver}}.src 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 + +%cmake .. \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DLLVM_CONFIG:FILEPATH=%{_bindir}/llvm-config-%{__isa_bits} \ + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ + \ + -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 \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ +%if 0%{?__isa_bits} == 64 + -DLLVM_LIBDIR_SUFFIX=64 \ +%else + -DLLVM_LIBDIR_SUFFIX= \ +%endif + -DLIB_SUFFIX= + +make %{?_smp_mflags} + +%install +make install DESTDIR=%{buildroot} -C _build + +# multilib fix +%multilib_fix_c_header --file %{_includedir}/clang/Config/config.h + +# 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* +rm -vf %{buildroot}%{_datadir}/clang/clang-format.el +rm -vf %{buildroot}%{_datadir}/clang/clang-format.py* +rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh +# clang-tools-extra +rm -vf %{buildroot}%{_datadir}/clang/clang-include-fixer.py +rm -vf %{buildroot}%{_datadir}/clang/clang-tidy-diff.py +rm -vf %{buildroot}%{_datadir}/clang/run-clang-tidy.py +rm -vf %{buildroot}%{_datadir}/clang/run-find-all-symbols.py +rm -vf %{buildroot}%{_datadir}/clang/clang-include-fixer.el +rm -vf %{buildroot}%{_datadir}/clang/clang-rename.el +rm -vf %{buildroot}%{_datadir}/clang/clang-rename.py +# remove diff reformatter +rm -vf %{buildroot}%{_datadir}/clang/clang-format-diff.py* + +# Remove html docs +rm -vRf %{buildroot}%{_docdir}/clang/html + +%check +cd _build +PATH=%{_libdir}/llvm:$PATH make %{?_smp_mflags} check-all + +%files libs +%{_libdir}/*.so.* +%{_libdir}/*.so + +%files +%{_libdir}/clang/ +%{clang_binaries} +%{_bindir}/c-index-test +%{_mandir}/man1/clang.1.gz +%{_mandir}/man1/diagtool.1.gz + + +%files devel +%{_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 + +%files -n git-clang-format +%{_bindir}/git-clang-format + +%changelog +* 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