From e9eca7e27360715cf2ac4661d0be89636c8f9965 Mon Sep 17 00:00:00 2001 From: Tulio Magno Quites Machado Filho Date: Thu, 16 Feb 2023 16:15:28 -0300 Subject: [PATCH] Add more fixes to clang 16.0 1. Remove patches that are not necessary. 2. Re-add a patch that generates DWARF4 by default. 3. Add a patch fixing IEEE 128-bit long double tests on ppc64le. 4. Include cmake code. 5. Other minor issues. Part of these changes are heavily based on or copied from the work from Konrad Kleine in branch upstream-snapshot. --- ...H-clang-Reorganize-gtest-integration.patch | 42 ------ ...t-Fedora-Specific-install-dir-for-li.patch | 45 ------- ...ATCH-clang-Produce-DWARF4-by-default.patch | 123 ++++++++++++++++++ clang.spec | 55 ++++---- fix-ieee128-cross.diff | 16 +++ 5 files changed, 167 insertions(+), 114 deletions(-) delete mode 100644 0001-PATCH-clang-Reorganize-gtest-integration.patch delete mode 100644 0001-Take-into-account-Fedora-Specific-install-dir-for-li.patch create mode 100644 0010-PATCH-clang-Produce-DWARF4-by-default.patch create mode 100644 fix-ieee128-cross.diff diff --git a/0001-PATCH-clang-Reorganize-gtest-integration.patch b/0001-PATCH-clang-Reorganize-gtest-integration.patch deleted file mode 100644 index c63aaf1..0000000 --- a/0001-PATCH-clang-Reorganize-gtest-integration.patch +++ /dev/null @@ -1,42 +0,0 @@ -From cfd535d718631c1266baa628904ddfa95284427d Mon Sep 17 00:00:00 2001 -From: serge-sans-paille -Date: Thu, 25 Feb 2021 14:04:52 +0100 -Subject: [PATCH] Reorganize gtest integration - ---- - clang/CMakeLists.txt | 12 +++++------- - 1 file changed, 5 insertions(+), 7 deletions(-) - -diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt -index be59c199f05f..3f882f7aca59 100644 ---- a/clang/CMakeLists.txt -+++ b/clang/CMakeLists.txt -@@ -118,12 +118,6 @@ if(CLANG_BUILT_STANDALONE) - set(LLVM_UTILS_PROVIDED ON) - set(CLANG_TEST_DEPS FileCheck count not) - endif() -- set(UNITTEST_DIR ${LLVM_THIRD_PARTY_DIR}/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} third-party/unittest) -- endif() - endif() - - if(LLVM_LIT) -@@ -506,7 +500,11 @@ endif() - - - if( CLANG_INCLUDE_TESTS ) -- if(EXISTS ${LLVM_THIRD_PARTY_DIR}/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} third-party/unittest) - add_subdirectory(unittests) - list(APPEND CLANG_TEST_DEPS ClangUnitTests) - list(APPEND CLANG_TEST_PARAMS --- -2.39.1 - diff --git a/0001-Take-into-account-Fedora-Specific-install-dir-for-li.patch b/0001-Take-into-account-Fedora-Specific-install-dir-for-li.patch deleted file mode 100644 index 4a8fda9..0000000 --- a/0001-Take-into-account-Fedora-Specific-install-dir-for-li.patch +++ /dev/null @@ -1,45 +0,0 @@ -From a85305a801c39720d7ec1c9441a88fef1ac19435 Mon Sep 17 00:00:00 2001 -From: serge-sans-paille -Date: Fri, 9 Sep 2022 10:17:01 +0200 -Subject: [PATCH] Take into account Fedora Specific install dir for libunwind - ---- - clang/lib/Driver/ToolChains/CommonArgs.cpp | 8 +++++++- - clang/test/Driver/linux-ld.c | 2 +- - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp -index 443725f..c1401a6 100644 ---- a/clang/lib/Driver/ToolChains/CommonArgs.cpp -+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp -@@ -1529,7 +1529,13 @@ static void AddUnwindLibrary(const ToolChain &TC, const Driver &D, - CmdArgs.push_back("-lgcc_s"); - break; - } -- case ToolChain::UNW_CompilerRT: -+ case ToolChain::UNW_CompilerRT: { -+ SmallString<256> DefaultLibPath = -+ llvm::sys::path::parent_path(TC.getDriver().Dir); -+ llvm::sys::path::append(DefaultLibPath, Twine("lib") + CLANG_LIBDIR_SUFFIX); -+ CmdArgs.push_back( -+ strdup(("-L" + DefaultLibPath + "/llvm-unwind").str().c_str())); -+ } - if (TC.getTriple().isOSAIX()) { - // AIX only has libunwind as a shared library. So do not pass - // anything in if -static is specified. -diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c -index e76b35d..dfb8eca 100644 ---- a/clang/test/Driver/linux-ld.c -+++ b/clang/test/Driver/linux-ld.c -@@ -299,7 +299,7 @@ - // RUN: --sysroot=%S/Inputs/basic_linux_tree \ - // RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-STATIC %s - // CHECK-CLANG-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" --// CHECK-CLANG-ANDROID-STATIC: "--start-group" "{{[^"]*}}{{/|\\\\}}libclang_rt.builtins-aarch64-android.a" "-l:libunwind.a" "-lc" "--end-group" -+// CHECK-CLANG-ANDROID-STATIC: "--start-group" "{{[^"]*}}{{/|\\\\}}libclang_rt.builtins-aarch64-android.a" "-L{{[^"]*}}{{/|\\\\}}llvm-unwind" "-l:libunwind.a" "-lc" "--end-group" - // - // RUN: %clang -### %s 2>&1 \ - // RUN: --target=x86_64-unknown-linux -rtlib=platform --unwindlib=platform \ --- -1.8.3.1 - diff --git a/0010-PATCH-clang-Produce-DWARF4-by-default.patch b/0010-PATCH-clang-Produce-DWARF4-by-default.patch new file mode 100644 index 0000000..ea81f74 --- /dev/null +++ b/0010-PATCH-clang-Produce-DWARF4-by-default.patch @@ -0,0 +1,123 @@ +From 4ea62faaaac1aad0fe496cabe9674c809c91c49a Mon Sep 17 00:00:00 2001 +From: Konrad Kleine +Date: Mon, 13 Feb 2023 17:11:00 -0300 +Subject: [PATCH] Produce DWARF4 by default + +Have a look at the following commit to see when the move from DWARF 4 to 5 first happened upstream: + +https://github.com/llvm/llvm-project/commit/d3b26dea16108c427b19b5480c9edc76edf8f5b4?diff=unified +--- + clang/include/clang/Driver/ToolChain.h | 2 +- + clang/test/CodeGen/dwarf-version.c | 4 ++-- + clang/test/Driver/as-options.s | 4 ++-- + clang/test/Driver/cl-options.c | 2 +- + clang/test/Driver/clang-g-opts.c | 2 +- + clang/test/Driver/ve-toolchain.c | 2 +- + clang/test/Driver/ve-toolchain.cpp | 2 +- + 7 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h +index f75f35dc9e65..a70ae2b17833 100644 +--- a/clang/include/clang/Driver/ToolChain.h ++++ b/clang/include/clang/Driver/ToolChain.h +@@ -547,7 +547,7 @@ public: + + // Return the DWARF version to emit, in the absence of arguments + // to the contrary. +- virtual unsigned GetDefaultDwarfVersion() const { return 5; } ++ virtual unsigned GetDefaultDwarfVersion() const { return 4; } + + // Some toolchains may have different restrictions on the DWARF version and + // may need to adjust it. E.g. NVPTX may need to enforce DWARF2 even when host +diff --git a/clang/test/CodeGen/dwarf-version.c b/clang/test/CodeGen/dwarf-version.c +index 0a6fa4768026..96f01749d0d8 100644 +--- a/clang/test/CodeGen/dwarf-version.c ++++ b/clang/test/CodeGen/dwarf-version.c +@@ -2,8 +2,8 @@ + // RUN: %clang -target x86_64-linux-gnu -gdwarf-3 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER3 + // RUN: %clang -target x86_64-linux-gnu -gdwarf-4 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4 + // RUN: %clang -target x86_64-linux-gnu -gdwarf-5 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5 +-// RUN: %clang -target x86_64-linux-gnu -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5 +-// RUN: %clang -target x86_64-linux-gnu -gdwarf -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5 ++// RUN: %clang -target x86_64-linux-gnu -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4 ++// RUN: %clang -target x86_64-linux-gnu -gdwarf -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4 + + // The -isysroot is used as a hack to avoid LIT messing with the SDKROOT + // environment variable which indirecty overrides the version in the target +diff --git a/clang/test/Driver/as-options.s b/clang/test/Driver/as-options.s +index 73d002c7ef7e..71d55f7fd537 100644 +--- a/clang/test/Driver/as-options.s ++++ b/clang/test/Driver/as-options.s +@@ -122,7 +122,7 @@ + // RUN: FileCheck --check-prefix=DEBUG %s + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g0 -g %s -### 2>&1 | \ + // RUN: FileCheck --check-prefix=DEBUG %s +-// DEBUG: "-g" "-gdwarf-5" ++// DEBUG: "-g" "-gdwarf-4" + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g -g0 %s -### 2>&1 | \ + // RUN: FileCheck --check-prefix=NODEBUG %s + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -gdwarf-5 -g0 %s -### 2>&1 | \ +@@ -141,7 +141,7 @@ + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -gdwarf-2 %s -### 2>&1 | \ + // RUN: FileCheck --check-prefix=GDWARF2 %s + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -gdwarf %s -### 2>&1 | \ +-// RUN: FileCheck --check-prefix=GDWARF5 %s ++// RUN: FileCheck --check-prefix=GDWARF4 %s + + // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -gdwarf-5 %s -### 2>&1 | \ + // RUN: FileCheck --check-prefix=GDWARF5 %s +diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c +index 1d588bdfc1b0..1ad57aedc3a4 100644 +--- a/clang/test/Driver/cl-options.c ++++ b/clang/test/Driver/cl-options.c +@@ -575,7 +575,7 @@ + // RUN: %clang_cl /Z7 -gdwarf /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7_gdwarf %s + // Z7_gdwarf: "-gcodeview" + // Z7_gdwarf: "-debug-info-kind=constructor" +-// Z7_gdwarf: "-dwarf-version= ++// Z7_gdwarf: "-dwarf-version=4 + + // RUN: %clang_cl /ZH:MD5 /c -### -- %s 2>&1 | FileCheck -check-prefix=ZH_MD5 %s + // ZH_MD5: "-gsrc-hash=md5" +diff --git a/clang/test/Driver/clang-g-opts.c b/clang/test/Driver/clang-g-opts.c +index d982b1070cae..bb129e75769c 100644 +--- a/clang/test/Driver/clang-g-opts.c ++++ b/clang/test/Driver/clang-g-opts.c +@@ -32,7 +32,7 @@ + + // CHECK-WITHOUT-G-NOT: -debug-info-kind + // CHECK-WITH-G: "-debug-info-kind=constructor" +-// CHECK-WITH-G: "-dwarf-version=5" ++// CHECK-WITH-G: "-dwarf-version=4" + // CHECK-WITH-G-DWARF2: "-dwarf-version=2" + + // CHECK-WITH-G-STANDALONE: "-debug-info-kind=standalone" +diff --git a/clang/test/Driver/ve-toolchain.c b/clang/test/Driver/ve-toolchain.c +index 32e25769b6da..b8a2852daba8 100644 +--- a/clang/test/Driver/ve-toolchain.c ++++ b/clang/test/Driver/ve-toolchain.c +@@ -6,7 +6,7 @@ + /// Checking dwarf-version + + // RUN: %clang -### -g --target=ve %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s +-// DWARF_VER: "-dwarf-version=5" ++// DWARF_VER: "-dwarf-version=4" + + ///----------------------------------------------------------------------------- + /// Checking include-path +diff --git a/clang/test/Driver/ve-toolchain.cpp b/clang/test/Driver/ve-toolchain.cpp +index 5a33d5eceb61..cedf895b36dc 100644 +--- a/clang/test/Driver/ve-toolchain.cpp ++++ b/clang/test/Driver/ve-toolchain.cpp +@@ -7,7 +7,7 @@ + + // RUN: %clangxx -### -g --target=ve-unknown-linux-gnu \ + // RUN: %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s +-// DWARF_VER: "-dwarf-version=5" ++// DWARF_VER: "-dwarf-version=4" + + ///----------------------------------------------------------------------------- + /// Checking include-path +-- +2.39.1 + diff --git a/clang.spec b/clang.spec index 99bf5f9..0d6ffa7 100644 --- a/clang.spec +++ b/clang.spec @@ -37,6 +37,7 @@ %endif %global clang_srcdir clang-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src +%global cmake_srcdir cmake-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src %global clang_tools_srcdir clang-tools-extra-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src Name: %pkg_name @@ -52,18 +53,21 @@ Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_ Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz.sig %endif -Source4: release-keys.asc +Source4: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{cmake_srcdir}.tar.xz +Source5: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{cmake_srcdir}.tar.xz.sig +Source6: release-keys.asc %if %{without compat_build} -Source5: macros.%{name} +Source7: macros.%{name} %endif # Patches for clang -Patch0: 0001-PATCH-clang-Reorganize-gtest-integration.patch Patch1: 0003-PATCH-Make-funwind-tables-the-default-on-all-archs.patch Patch2: 0003-PATCH-clang-Don-t-install-static-libraries.patch Patch3: 0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch Patch4: 0001-cmake-Allow-shared-libraries-to-customize-the-soname.patch -Patch6: 0001-Take-into-account-Fedora-Specific-install-dir-for-li.patch +# Drop the following patch after debugedit adds support to DWARF-5: +# https://sourceware.org/bugzilla/show_bug.cgi?id=28728 +Patch5: 0010-PATCH-clang-Produce-DWARF4-by-default.patch # Make clangBasic and clangDriver depend on LLVMTargetParser # See https://reviews.llvm.org/D141581 @@ -72,6 +76,8 @@ Patch7: D141581.diff # See https://reviews.llvm.org/D138472 Patch8: D138472.diff +Patch10: fix-ieee128-cross.diff + %if %{without compat_build} # Patches for clang-tools-extra # See https://reviews.llvm.org/D120301 @@ -254,13 +260,19 @@ Requires: python3 %prep -%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE3}' --data='%{SOURCE0}' +%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE3}' --data='%{SOURCE0}' +%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE5}' --data='%{SOURCE4}' +%setup -T -q -b 4 -n %{cmake_srcdir} +# TODO: It would be more elegant to set -DLLVM_COMMON_CMAKE_UTILS=%{_builddir}/%{cmake_srcdir}, +# but this is not a CACHED variable, so we can't actually set it externally :( +cd .. +mv %{cmake_srcdir} cmake %if %{with compat_build} %autosetup -n %{clang_srcdir} -p2 %else -%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE2}' --data='%{SOURCE1}' +%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE2}' --data='%{SOURCE1}' %setup -T -q -b 1 -n %{clang_tools_srcdir} %autopatch -m200 -p2 @@ -446,20 +458,11 @@ ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} # Fix permission chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* -# create a link to clang's resource directory that is "constant" across minor -# version bumps -# this is required for packages like ccls that hardcode the link to clang's -# resource directory to not require rebuilds on minor version bumps -# Fix for bugs like rhbz#1807574 -pushd %{buildroot}%{_libdir}/clang/ -ln -s %{version} %{maj_ver} -popd - %endif # Create sub-directories in the clang resource directory that will be # populated by other packages -mkdir -p %{buildroot}%{pkg_libdir}/clang/%{version}/{include,lib,share}/ +mkdir -p %{buildroot}%{pkg_libdir}/clang/%{maj_ver}/{include,lib,share}/ %if %{without compat_build} @@ -503,11 +506,11 @@ false %files libs %if %{without compat_build} -%{_libdir}/clang/%{version}/include/* +%{_libdir}/clang/%{maj_ver}/include/* %{_libdir}/*.so.* %else %{pkg_libdir}/*.so.* -%{pkg_libdir}/clang/%{version}/include/* +%{pkg_libdir}/clang/%{maj_ver}/include/* %endif %files devel @@ -528,13 +531,10 @@ false %files resource-filesystem %dir %{pkg_libdir}/clang/ -%dir %{pkg_libdir}/clang/%{version}/ -%dir %{pkg_libdir}/clang/%{version}/include/ -%dir %{pkg_libdir}/clang/%{version}/lib/ -%dir %{pkg_libdir}/clang/%{version}/share/ -%if %{without compat_build} -%{pkg_libdir}/clang/%{maj_ver} -%endif +%dir %{pkg_libdir}/clang/%{maj_ver}/ +%dir %{pkg_libdir}/clang/%{maj_ver}/include/ +%dir %{pkg_libdir}/clang/%{maj_ver}/lib/ +%dir %{pkg_libdir}/clang/%{maj_ver}/share/ %if %{without compat_build} %files analyzer @@ -557,19 +557,19 @@ false %files tools-extra +%{_bindir}/amdgpu-arch %{_bindir}/clang-apply-replacements %{_bindir}/clang-change-namespace %{_bindir}/clang-check %{_bindir}/clang-doc %{_bindir}/clang-extdef-mapping %{_bindir}/clang-format +%{_bindir}/clang-include-cleaner %{_bindir}/clang-include-fixer %{_bindir}/clang-move %{_bindir}/clang-offload-bundler %{_bindir}/clang-offload-packager -%{_bindir}/clang-offload-wrapper %{_bindir}/clang-linker-wrapper -%{_bindir}/clang-nvlink-wrapper %{_bindir}/clang-pseudo %{_bindir}/clang-query %{_bindir}/clang-refactor @@ -581,6 +581,7 @@ false %{_bindir}/clangd %{_bindir}/diagtool %{_bindir}/hmaptool +%{_bindir}/nvptx-arch %{_bindir}/pp-trace %{_bindir}/c-index-test %{_bindir}/find-all-symbols diff --git a/fix-ieee128-cross.diff b/fix-ieee128-cross.diff new file mode 100644 index 0000000..218c229 --- /dev/null +++ b/fix-ieee128-cross.diff @@ -0,0 +1,16 @@ +diff --git a/clang/test/Driver/ppc-float-abi-warning.cpp b/clang/test/Driver/ppc-float-abi-warning.cpp +index e3baa9f4c059..87d6d87a3b31 100644 +--- a/clang/test/Driver/ppc-float-abi-warning.cpp ++++ b/clang/test/Driver/ppc-float-abi-warning.cpp +@@ -17,10 +17,12 @@ + // RUN: -mabi=ieeelongdouble -stdlib=libc++ -Wno-unsupported-abi 2>&1 | \ + // RUN: FileCheck %s --check-prefix=NOWARN + // RUN: %clang -### --driver-mode=g++ -target powerpc64le-linux-gnu %s\ ++// RUN: --dyld-prefix=%S/Inputs/powerpc64le-linux-gnu-tree/gcc-12 \ + // RUN: -mabi=%if ppc_linux_default_ieeelongdouble %{ieeelongdouble%} \ + // RUN: %else %{ibmlongdouble%} -stdlib=libc++ 2>&1 | \ + // RUN: FileCheck %s --check-prefix=NOWARN + // RUN: %clang -### --driver-mode=g++ -target powerpc64le-linux-gnu %s\ ++// RUN: --dyld-prefix=%S/Inputs/powerpc64le-linux-gnu-tree/gcc-12 \ + // RUN: -mabi=%if ppc_linux_default_ieeelongdouble %{ibmlongdouble%} \ + // RUN: %else %{ieeelongdouble%} -stdlib=libc++ 2>&1 | FileCheck %s