mirror of
https://abf.rosa.ru/djam/llvm13.git
synced 2025-02-24 00:42:46 +00:00
208 lines
11 KiB
Diff
208 lines
11 KiB
Diff
![]() |
diff -up llvm-project-release-10.x/clang/include/clang/Driver/Distro.h.1~ llvm-project-release-10.x/clang/include/clang/Driver/Distro.h
|
||
|
--- llvm-project-release-10.x/clang/include/clang/Driver/Distro.h.1~ 2020-02-03 15:05:29.000000000 +0100
|
||
|
+++ llvm-project-release-10.x/clang/include/clang/Driver/Distro.h 2020-02-03 15:55:08.167087633 +0100
|
||
|
@@ -67,6 +67,8 @@ public:
|
||
|
UbuntuDisco,
|
||
|
UbuntuEoan,
|
||
|
UbuntuFocal,
|
||
|
+ OpenMandriva,
|
||
|
+ ROSA,
|
||
|
UnknownDistro
|
||
|
};
|
||
|
|
||
|
@@ -131,6 +133,10 @@ public:
|
||
|
return DistroVal == Gentoo;
|
||
|
}
|
||
|
|
||
|
+ bool IsMandriva() const {
|
||
|
+ return DistroVal == OpenMandriva || DistroVal == ROSA;
|
||
|
+ }
|
||
|
+
|
||
|
/// @}
|
||
|
};
|
||
|
|
||
|
diff -up llvm-project-release-10.x/clang/lib/Driver/Distro.cpp.1~ llvm-project-release-10.x/clang/lib/Driver/Distro.cpp
|
||
|
--- llvm-project-release-10.x/clang/lib/Driver/Distro.cpp.1~ 2020-02-03 15:05:29.000000000 +0100
|
||
|
+++ llvm-project-release-10.x/clang/lib/Driver/Distro.cpp 2020-02-03 15:56:38.882091633 +0100
|
||
|
@@ -42,7 +42,7 @@ static Distro::DistroType DetectDistro(l
|
||
|
SmallVector<StringRef, 16> Lines;
|
||
|
Data.split(Lines, "\n");
|
||
|
Distro::DistroType Version = Distro::UnknownDistro;
|
||
|
- for (StringRef Line : Lines)
|
||
|
+ for (StringRef Line : Lines) {
|
||
|
if (Version == Distro::UnknownDistro && Line.startswith("DISTRIB_CODENAME="))
|
||
|
Version = llvm::StringSwitch<Distro::DistroType>(Line.substr(17))
|
||
|
.Case("hardy", Distro::UbuntuHardy)
|
||
|
@@ -71,6 +71,18 @@ static Distro::DistroType DetectDistro(l
|
||
|
.Case("eoan", Distro::UbuntuEoan)
|
||
|
.Case("focal", Distro::UbuntuFocal)
|
||
|
.Default(Distro::UnknownDistro);
|
||
|
+
|
||
|
+ else if (Version == Distro::UnknownDistro && Line.startswith("DISTRIB_ID=MandrivaLinux"))
|
||
|
+ // It's a Mandriva derivate -- will get details
|
||
|
+ // from DISTRIB_DESCRIPTION
|
||
|
+ Version = Distro::OpenMandriva;
|
||
|
+ else if (Version == Distro::OpenMandriva && Line.startswith("DISTRIB_DESCRIPTION=")) {
|
||
|
+ if (Line.substr(20).find("ROSA") != StringRef::npos)
|
||
|
+ Version = Distro::ROSA;
|
||
|
+ else
|
||
|
+ Version = Distro::OpenMandriva;
|
||
|
+ }
|
||
|
+ }
|
||
|
if (Version != Distro::UnknownDistro)
|
||
|
return Version;
|
||
|
}
|
||
|
diff -up llvm-project-release-10.x/clang/lib/Driver/ToolChains/Gnu.cpp.1~ llvm-project-release-10.x/clang/lib/Driver/ToolChains/Gnu.cpp
|
||
|
--- llvm-project-release-10.x/clang/lib/Driver/ToolChains/Gnu.cpp.1~ 2020-02-03 15:05:29.000000000 +0100
|
||
|
+++ llvm-project-release-10.x/clang/lib/Driver/ToolChains/Gnu.cpp 2020-02-03 15:52:26.515080505 +0100
|
||
|
@@ -1997,7 +1997,10 @@ void Generic_GCC::GCCInstallationDetecto
|
||
|
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-suse-linux", "aarch64-linux-android", "aarch64-mandriva-linux-gnu",
|
||
|
+ "aarch64-openmandriva-linux-gnu", "aarch64-openmandriva-linux-musl"
|
||
|
+ "aarch64-rosa-linux-gnu", "aarch64-rosa-linux-musl"
|
||
|
+ };
|
||
|
static const char *const AArch64beLibDirs[] = {"/lib"};
|
||
|
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu",
|
||
|
"aarch64_be-linux-gnu"};
|
||
|
@@ -2008,7 +2011,40 @@ void Generic_GCC::GCCInstallationDetecto
|
||
|
static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
|
||
|
"armv7hl-redhat-linux-gnueabi",
|
||
|
"armv6hl-suse-linux-gnueabi",
|
||
|
- "armv7hl-suse-linux-gnueabi"};
|
||
|
+ "armv7hl-suse-linux-gnueabi"
|
||
|
+ "arm-mandriva-linux-gnueabihf",
|
||
|
+ "armv7l-mandriva-linux-gnueabihf",
|
||
|
+ "armv7hl-mandriva-linux-gnueabihf",
|
||
|
+ "armv7hnl-mandriva-linux-gnueabihf",
|
||
|
+ "armv8l-mandriva-linux-gnueabihf",
|
||
|
+ "armv8hl-mandriva-linux-gnueabihf",
|
||
|
+ "armv8hnl-mandriva-linux-gnueabihf",
|
||
|
+ "armv8hcnl-mandriva-linux-gnueabihf",
|
||
|
+ "arm-mandriva-linux-musleabihf",
|
||
|
+ "armv7l-mandriva-linux-musleabihf",
|
||
|
+ "armv7hl-mandriva-linux-musleabihf",
|
||
|
+ "armv7hnl-mandriva-linux-musleabihf",
|
||
|
+ "armv8l-mandriva-linux-musleabihf",
|
||
|
+ "armv8hl-mandriva-linux-musleabihf",
|
||
|
+ "armv8hnl-mandriva-linux-musleabihf",
|
||
|
+ "armv8hcnl-mandriva-linux-musleabihf",
|
||
|
+ "arm-openmandriva-linux-gnueabihf",
|
||
|
+ "armv7l-openmandriva-linux-gnueabihf",
|
||
|
+ "armv7hl-openmandriva-linux-gnueabihf",
|
||
|
+ "armv7hnl-openmandriva-linux-gnueabihf",
|
||
|
+ "armv8l-openmandriva-linux-gnueabihf",
|
||
|
+ "armv8hl-openmandriva-linux-gnueabihf",
|
||
|
+ "armv8hnl-openmandriva-linux-gnueabihf",
|
||
|
+ "armv8hcnl-openmandriva-linux-gnueabihf",
|
||
|
+ "arm-openmandriva-linux-musleabihf",
|
||
|
+ "armv7l-openmandriva-linux-musleabihf",
|
||
|
+ "armv7hl-openmandriva-linux-musleabihf",
|
||
|
+ "armv7hnl-openmandriva-linux-musleabihf",
|
||
|
+ "armv8l-openmandriva-linux-musleabihf",
|
||
|
+ "armv8hl-openmandriva-linux-musleabihf",
|
||
|
+ "armv8hnl-openmandriva-linux-musleabihf",
|
||
|
+ "armv8hcnl-openmandriva-linux-musleabihf",
|
||
|
+ };
|
||
|
static const char *const ARMebLibDirs[] = {"/lib"};
|
||
|
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
|
||
|
"armeb-linux-androideabi"};
|
||
|
@@ -2025,7 +2061,11 @@ void Generic_GCC::GCCInstallationDetecto
|
||
|
"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-mandriva-linux-gnu", "x86_64-mandriva-linux-musl",
|
||
|
+ "x86_64-openmandriva-linux-gnu", "x86_64-openmandriva-linux-musl",
|
||
|
+ "x86_64-openmandriva-linux-gnux32", "x86_64-openmandriva-linux-muslx32"
|
||
|
+ };
|
||
|
static const char *const X32LibDirs[] = {"/libx32"};
|
||
|
static const char *const X86LibDirs[] = {"/lib32", "/lib"};
|
||
|
static const char *const X86Triples[] = {
|
||
|
@@ -2034,7 +2074,12 @@ void Generic_GCC::GCCInstallationDetecto
|
||
|
"i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux",
|
||
|
"i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu",
|
||
|
"i686-linux-android", "i386-gnu", "i486-gnu",
|
||
|
- "i586-gnu", "i686-gnu"};
|
||
|
+ "i586-gnu", "i686-gnu"
|
||
|
+ "i586-mandriva-linux-gnu", "i586-openmandriva-linux-gnu",
|
||
|
+ "i586-mandriva-linux-musl", "i586-openmandriva-linux-musl",
|
||
|
+ "i686-mandriva-linux-gnu", "i686-openmandriva-linux-gnu",
|
||
|
+ "i686-mandriva-linux-musl", "i686-openmandriva-linux-musl"
|
||
|
+ };
|
||
|
|
||
|
static const char *const MIPSLibDirs[] = {"/lib"};
|
||
|
static const char *const MIPSTriples[] = {
|
||
|
diff -up llvm-project-release-10.x/clang/lib/Driver/ToolChains/Linux.cpp.1~ llvm-project-release-10.x/clang/lib/Driver/ToolChains/Linux.cpp
|
||
|
--- llvm-project-release-10.x/clang/lib/Driver/ToolChains/Linux.cpp.1~ 2020-02-03 15:05:29.000000000 +0100
|
||
|
+++ llvm-project-release-10.x/clang/lib/Driver/ToolChains/Linux.cpp 2020-02-03 15:52:26.515080505 +0100
|
||
|
@@ -166,7 +166,7 @@ std::string Linux::getMultiarchTriple(co
|
||
|
return TargetTriple.str();
|
||
|
}
|
||
|
|
||
|
-static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
||
|
+static StringRef getOSLibDir(const Distro &distro, const llvm::Triple &Triple, const ArgList &Args) {
|
||
|
if (Triple.isMIPS()) {
|
||
|
if (Triple.isAndroid()) {
|
||
|
StringRef CPUName;
|
||
|
@@ -194,12 +194,18 @@ static StringRef getOSLibDir(const llvm:
|
||
|
// FIXME: This is a bit of a hack. We should really unify this code for
|
||
|
// reasoning about oslibdir spellings with the lib dir spellings in the
|
||
|
// GCCInstallationDetector, but that is a more significant refactoring.
|
||
|
- if (Triple.getArch() == llvm::Triple::x86 ||
|
||
|
- Triple.getArch() == llvm::Triple::ppc)
|
||
|
+ //
|
||
|
+ // lib32 is distro specific -- we don't do it on OpenMandriva, where 64bit
|
||
|
+ // goes to lib64 and 32bit goes to lib
|
||
|
+
|
||
|
+ if (!distro.IsMandriva() &&
|
||
|
+ (Triple.getArch() == llvm::Triple::x86 ||
|
||
|
+ Triple.getArch() == llvm::Triple::ppc))
|
||
|
return "lib32";
|
||
|
|
||
|
if (Triple.getArch() == llvm::Triple::x86_64 &&
|
||
|
- Triple.getEnvironment() == llvm::Triple::GNUX32)
|
||
|
+ (Triple.getEnvironment() == llvm::Triple::GNUX32 ||
|
||
|
+ Triple.getEnvironment() == llvm::Triple::MuslX32))
|
||
|
return "libx32";
|
||
|
|
||
|
if (Triple.getArch() == llvm::Triple::riscv32)
|
||
|
@@ -248,7 +254,7 @@ Linux::Linux(const Driver &D, const llvm
|
||
|
}
|
||
|
|
||
|
if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() ||
|
||
|
- Triple.isAndroid()) {
|
||
|
+ Distro.IsMandriva() || Triple.isAndroid()) {
|
||
|
ExtraOpts.push_back("-z");
|
||
|
ExtraOpts.push_back("relro");
|
||
|
}
|
||
|
@@ -289,6 +295,7 @@ Linux::Linux(const Driver &D, const llvm
|
||
|
// Hexagon linker/loader does not support .gnu.hash
|
||
|
if (!IsMips && !IsHexagon) {
|
||
|
if (Distro.IsRedhat() || Distro.IsOpenSUSE() || Distro.IsAlpineLinux() ||
|
||
|
+ Distro.IsMandriva() ||
|
||
|
(Distro.IsUbuntu() && Distro >= Distro::UbuntuMaverick) ||
|
||
|
(IsAndroid && !Triple.isAndroidVersionLT(23)))
|
||
|
ExtraOpts.push_back("--hash-style=gnu");
|
||
|
@@ -304,7 +311,7 @@ Linux::Linux(const Driver &D, const llvm
|
||
|
ExtraOpts.push_back("--build-id");
|
||
|
#endif
|
||
|
|
||
|
- if (IsAndroid || Distro.IsOpenSUSE())
|
||
|
+ if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsMandriva())
|
||
|
ExtraOpts.push_back("--enable-new-dtags");
|
||
|
|
||
|
// The selection of paths to try here is designed to match the patterns which
|
||
|
@@ -314,7 +321,7 @@ Linux::Linux(const Driver &D, const llvm
|
||
|
// to the link paths.
|
||
|
path_list &Paths = getFilePaths();
|
||
|
|
||
|
- const std::string OSLibDir = getOSLibDir(Triple, Args);
|
||
|
+ const std::string OSLibDir = getOSLibDir(Distro, Triple, Args);
|
||
|
const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
|
||
|
|
||
|
// Add the multilib suffixed paths where they are available.
|