From 0b5e480781493c31af13665d7f5c14f0db4dee9e586f603917806f88e8c29b15 Mon Sep 17 00:00:00 2001 From: Aaron Puchert Date: Sat, 11 Mar 2023 14:10:21 +0000 Subject: [PATCH] - Add llvm-suse-implicit-gnu.patch to recognize -suse-linux as implicitly GNU. Without this we would get library calls for fused-multiply-add even if it's available in hardware. - Add openmp-drop-rpath.patch: backport revert of adding RUNPATH to openmp executables. (boo#1206837) OBS-URL: https://build.opensuse.org/package/show/devel:tools:compiler/llvm15?expand=0&rev=22 --- llvm-suse-implicit-gnu.patch | 14 +++++ llvm15.changes | 9 ++++ llvm15.spec | 6 +++ openmp-drop-rpath.patch | 100 +++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 llvm-suse-implicit-gnu.patch create mode 100644 openmp-drop-rpath.patch diff --git a/llvm-suse-implicit-gnu.patch b/llvm-suse-implicit-gnu.patch new file mode 100644 index 0000000..21c9614 --- /dev/null +++ b/llvm-suse-implicit-gnu.patch @@ -0,0 +1,14 @@ +diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h +index ba4584d..eec01eb 100644 +--- a/llvm/include/llvm/ADT/Triple.h ++++ b/llvm/include/llvm/ADT/Triple.h +@@ -555,7 +555,8 @@ public: + EnvironmentType Env = getEnvironment(); + return Env == Triple::GNU || Env == Triple::GNUABIN32 || + Env == Triple::GNUABI64 || Env == Triple::GNUEABI || +- Env == Triple::GNUEABIHF || Env == Triple::GNUX32; ++ Env == Triple::GNUEABIHF || Env == Triple::GNUX32 || ++ (Env == Triple::UnknownEnvironment && getVendor() == Triple::SUSE); + } + + bool isOSContiki() const { diff --git a/llvm15.changes b/llvm15.changes index 0f89518..9787433 100644 --- a/llvm15.changes +++ b/llvm15.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Sat Mar 11 14:09:34 UTC 2023 - Aaron Puchert + +- Add llvm-suse-implicit-gnu.patch to recognize -suse-linux + as implicitly GNU. Without this we would get library calls for + fused-multiply-add even if it's available in hardware. +- Add openmp-drop-rpath.patch: backport revert of adding RUNPATH + to openmp executables. (boo#1206837) + ------------------------------------------------------------------- Thu Mar 9 17:17:40 UTC 2023 - Dirk Müller diff --git a/llvm15.spec b/llvm15.spec index bc219da..241e24e 100644 --- a/llvm15.spec +++ b/llvm15.spec @@ -369,6 +369,10 @@ Patch14: llvm-do-not-install-static-libraries.patch Patch15: libcxx-test-library-path.patch # PATCH-FIX-UPSTREAM (?): Work around gh#llvm/llvm-project#28804 by hinting with __builtin_assume. Patch16: llvm-workaround-superfluous-branches.patch +# PATCH-FIX-UPSTREAM: Recognize -suse-linux as implicitly GNU. Discussion at https://reviews.llvm.org/D110900. +Patch17: llvm-suse-implicit-gnu.patch +# PATCH-FIX-UPSTREAM: Don't implicitly add RUNPATHs to openmp executable. (boo#1206837) +Patch18: openmp-drop-rpath.patch Patch20: llvm_build_tablegen_component_as_shared_library.patch Patch21: tests-use-python3.patch Patch22: llvm-better-detect-64bit-atomics-support.patch @@ -810,6 +814,7 @@ This package contains the development files for Polly. %patch13 -p1 %patch14 -p1 %patch16 -p2 +%patch17 -p2 %patch20 -p1 %patch21 -p1 %patch22 -p1 @@ -825,6 +830,7 @@ pushd clang-%{_version}.src %patch4 -p1 %patch6 -p1 %patch9 -p2 +%patch18 -p2 %patch36 -p2 # We hardcode openSUSE diff --git a/openmp-drop-rpath.patch b/openmp-drop-rpath.patch new file mode 100644 index 0000000..af620b2 --- /dev/null +++ b/openmp-drop-rpath.patch @@ -0,0 +1,100 @@ +Backport of upstream commit 555b572e3f407ac48b5f30fc06760cc4d0549977 +From: Fangrui Song +Date: Wed, 8 Mar 2023 10:18:40 -0800 +Subject: [PATCH] Revert D118493 "Set rpath on openmp executables" + +This reverts commit 9b9d08111b618d74574ba03e5cc3d752ecc56f55. +(Accepted by Jon https://reviews.llvm.org/D118493#4178250) + +libc++, libc++abi, libunwind, and compiler-rt don't add the extra DT_RUNPATH, +it's strange for OpenMP to diverge. +Some build systems want to handle DT_RUNPATH themselves (e.g. +CMAKE_INSTALL_RPATH). Some distributions (e.g. Fedora) have policies against +DT_RUNPATH and the default DT_RUNPATH for OpenMP is causing trouble. + +For users who don't want to specify rpath by themselves, +https://clang.llvm.org/docs/UsersManual.html#configuration-files +can be used to specify the default rpath, e.g. +specify -frtlib-add-rpath or -Wl,-rpath in bin/clang.cfg +--- + clang/include/clang/Driver/Options.td | 6 ------ + clang/lib/Driver/ToolChains/CommonArgs.cpp | 19 ------------------- + clang/lib/Driver/ToolChains/CommonArgs.h | 3 --- + clang/test/OpenMP/Inputs/libomp.a | 1 - + 4 files changed, 29 deletions(-) + delete mode 100644 clang/test/OpenMP/Inputs/libomp.a + +diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td +index 3cab37b..b8bc969 100644 +--- a/clang/include/clang/Driver/Options.td ++++ b/clang/include/clang/Driver/Options.td +@@ -4112,11 +4112,6 @@ def frtlib_add_rpath: Flag<["-"], "frtlib-add-rpath">, Flags<[NoArgumentUnused]> + HelpText<"Add -rpath with architecture-specific resource directory to the linker flags">; + def fno_rtlib_add_rpath: Flag<["-"], "fno-rtlib-add-rpath">, Flags<[NoArgumentUnused]>, + HelpText<"Do not add -rpath with architecture-specific resource directory to the linker flags">; +-defm openmp_implicit_rpath: BoolFOption<"openmp-implicit-rpath", +- LangOpts<"OpenMP">, +- DefaultTrue, +- PosFlag, +- NegFlag>; + def r : Flag<["-"], "r">, Flags<[LinkerInput,NoArgumentUnused]>, + Group; + def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[CC1Option, FlangOption, NoXarchOption]>, +diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp +index 443725f..19ac699 100644 +--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp ++++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp +@@ -646,22 +646,6 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, + /*IsLTO=*/true); + } + +-void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC, +- const ArgList &Args, +- ArgStringList &CmdArgs) { +- +- if (Args.hasFlag(options::OPT_fopenmp_implicit_rpath, +- options::OPT_fno_openmp_implicit_rpath, true)) { +- // Default to clang lib / lib64 folder, i.e. the same location as device +- // runtime +- SmallString<256> DefaultLibPath = +- llvm::sys::path::parent_path(TC.getDriver().Dir); +- llvm::sys::path::append(DefaultLibPath, Twine("lib") + CLANG_LIBDIR_SUFFIX); +- CmdArgs.push_back("-rpath"); +- CmdArgs.push_back(Args.MakeArgString(DefaultLibPath)); +- } +-} +- + void tools::addOpenMPRuntimeLibraryPath(const ToolChain &TC, + const ArgList &Args, + ArgStringList &CmdArgs) { +@@ -733,9 +717,6 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC, + CmdArgs.push_back("-lomptarget.devicertl"); + + addArchSpecificRPath(TC, Args, CmdArgs); +- +- if (RTKind == Driver::OMPRT_OMP) +- addOpenMPRuntimeSpecificRPath(TC, Args, CmdArgs); + addOpenMPRuntimeLibraryPath(TC, Args, CmdArgs); + + return true; +diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h +index d44d9214c08b..e64e9524601d 100644 +--- a/clang/lib/Driver/ToolChains/CommonArgs.h ++++ b/clang/lib/Driver/ToolChains/CommonArgs.h +@@ -117,9 +117,6 @@ void AddAssemblerKPIC(const ToolChain &ToolChain, + const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs); + +-void addOpenMPRuntimeSpecificRPath(const ToolChain &TC, +- const llvm::opt::ArgList &Args, +- llvm::opt::ArgStringList &CmdArgs); + void addArchSpecificRPath(const ToolChain &TC, const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs); + void addOpenMPRuntimeLibraryPath(const ToolChain &TC, +diff --git a/clang/test/OpenMP/Inputs/libomp.a b/clang/test/OpenMP/Inputs/libomp.a +deleted file mode 100644 +index 8b277f0dd5dc..000000000000 +--- a/clang/test/OpenMP/Inputs/libomp.a ++++ /dev/null +@@ -1 +0,0 @@ +-!