mirror of
https://abf.rosa.ru/djam/llvm12.git
synced 2025-02-24 07:42:51 +00:00
184 lines
9.7 KiB
Diff
184 lines
9.7 KiB
Diff
--- llvm-3.5/tools/clang/lib/Driver/ToolChains.cpp.mandriva~ 2014-08-22 22:54:39.000000000 +0200
|
|
+++ llvm-3.5/tools/clang/lib/Driver/ToolChains.cpp 2014-08-25 22:24:33.868906431 +0200
|
|
@@ -1315,16 +1315,43 @@ bool Generic_GCC::GCCInstallationDetecto
|
|
static const char *const AArch64Triples[] = { "aarch64-none-linux-gnu",
|
|
"aarch64-linux-gnu",
|
|
"aarch64-linux-android",
|
|
- "aarch64-redhat-linux" };
|
|
- static const char *const AArch64beLibDirs[] = { "/lib" };
|
|
+ "aarch64-redhat-linux",
|
|
+ "aarch64-mandriva-linux-gnu",
|
|
+ "aarch64-openmandriva-linux-gnu" };
|
|
+ static const char *const AArch64beLibDirs[] = { "/lib64", "/lib" };
|
|
static const char *const AArch64beTriples[] = { "aarch64_be-none-linux-gnu",
|
|
- "aarch64_be-linux-gnu" };
|
|
+ "aarch64_be-linux-gnu",
|
|
+ "aarch64_be-linux-android",
|
|
+ "aarch64_be-mandriva-linux-gnu",
|
|
+ "aarch64_be-openmandriva-linux-gnu" };
|
|
|
|
static const char *const ARMLibDirs[] = { "/lib" };
|
|
static const char *const ARMTriples[] = { "arm-linux-gnueabi",
|
|
- "arm-linux-androideabi" };
|
|
+ "arm-linux-androideabi",
|
|
+ "arm-mandriva-linux-gnueabi",
|
|
+ "arm-openmandriva-linux-gnueabi",
|
|
+ "armv6-mandriva-linux-gnueabi",
|
|
+ "armv6-openmandriva-linux-gnueabi",
|
|
+ "armv7-mandriva-linux-gnueabi",
|
|
+ "armv7-openmandriva-linux-gnueabi" };
|
|
static const char *const ARMHFTriples[] = { "arm-linux-gnueabihf",
|
|
- "armv7hl-redhat-linux-gnueabi" };
|
|
+ "armv7hl-redhat-linux-gnueabi",
|
|
+ "arm-mandriva-linux-gnueabihf",
|
|
+ "arm-openmandriva-linux-gnueabihf",
|
|
+ "arm-mandriva-linux-gnueabihf",
|
|
+ "arm-openmandriva-linux-gnueabihf",
|
|
+ "armv6-mandriva-linux-gnueabihf",
|
|
+ "armv6-openmandriva-linux-gnueabihf",
|
|
+ "armv7-mandriva-linux-gnueabihf",
|
|
+ "armv7-openmandriva-linux-gnueabihf",
|
|
+ "armv6hl-mandriva-linux-gnueabi",
|
|
+ "armv6hl-openmandriva-linux-gnueabi",
|
|
+ "armv7hl-mandriva-linux-gnueabi",
|
|
+ "armv7hl-openmandriva-linux-gnueabi",
|
|
+ "armv6hl-mandriva-linux-gnueabihf",
|
|
+ "armv6hl-openmandriva-linux-gnueabihf",
|
|
+ "armv7hl-mandriva-linux-gnueabihf",
|
|
+ "armv7hl-openmandriva-linux-gnueabihf" };
|
|
static const char *const ARMebLibDirs[] = { "/lib" };
|
|
static const char *const ARMebTriples[] = { "armeb-linux-gnueabi",
|
|
"armeb-linux-androideabi" };
|
|
@@ -1336,7 +1363,7 @@ bool Generic_GCC::GCCInstallationDetecto
|
|
"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-linux-android", "x86_64-unknown-linux"
|
|
+ "x86_64-linux-android", "x86_64-unknown-linux", "x86_64-mandriva-linux-gnu"
|
|
};
|
|
static const char *const X32LibDirs[] = { "/libx32" };
|
|
static const char *const X86LibDirs[] = { "/lib32", "/lib" };
|
|
@@ -1344,6 +1371,7 @@ bool Generic_GCC::GCCInstallationDetecto
|
|
"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",
|
|
+ "i586-mandriva-linux-gnu", "i686-mandriva-linux-gnu",
|
|
"i686-montavista-linux", "i686-linux-android", "i586-linux-gnu"
|
|
};
|
|
|
|
@@ -1371,12 +1399,13 @@ bool Generic_GCC::GCCInstallationDetecto
|
|
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-mandriva-linux-gnu"
|
|
};
|
|
static const char *const PPC64LibDirs[] = { "/lib64", "/lib" };
|
|
static const char *const PPC64Triples[] = { "powerpc64-linux-gnu",
|
|
"powerpc64-unknown-linux-gnu",
|
|
"powerpc64-suse-linux",
|
|
+ "powerpc64-mandriva-linux",
|
|
"ppc64-redhat-linux" };
|
|
static const char *const PPC64LELibDirs[] = { "/lib64", "/lib" };
|
|
static const char *const PPC64LETriples[] = { "powerpc64le-linux-gnu",
|
|
@@ -2801,6 +2830,9 @@ enum Distro {
|
|
UbuntuRaring,
|
|
UbuntuSaucy,
|
|
UbuntuTrusty,
|
|
+ Mandriva,
|
|
+ OpenMandriva,
|
|
+ ROSA,
|
|
UnknownDistro
|
|
};
|
|
|
|
@@ -2820,6 +2852,10 @@ static bool IsUbuntu(enum Distro Distro)
|
|
return Distro >= UbuntuHardy && Distro <= UbuntuTrusty;
|
|
}
|
|
|
|
+static bool IsMandriva(enum Distro Distro) {
|
|
+ return Distro >= Mandriva && Distro <= ROSA;
|
|
+}
|
|
+
|
|
static Distro DetectDistro(llvm::Triple::ArchType Arch) {
|
|
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
|
|
llvm::MemoryBuffer::getFile("/etc/lsb-release");
|
|
@@ -2828,7 +2864,18 @@ static Distro DetectDistro(llvm::Triple:
|
|
SmallVector<StringRef, 8> Lines;
|
|
Data.split(Lines, "\n");
|
|
Distro Version = UnknownDistro;
|
|
- for (unsigned i = 0, s = Lines.size(); i != s; ++i)
|
|
+ for (unsigned i = 0, s = Lines.size(); i != s; ++i) {
|
|
+ if (Version == UnknownDistro &&
|
|
+ Lines[i].startswith("DISTRIB_ID=MandrivaLinux"))
|
|
+ // It's either Mandriva or a close derivate, will get details
|
|
+ // from DISTRIB_DESCRIPTION
|
|
+ Version = Mandriva;
|
|
+ if (Version == Mandriva && Lines[i].startswith("DISTRIB_DESCRIPTION=")) {
|
|
+ if(Lines[i].substr(20).find("ROSA") != StringRef::npos)
|
|
+ Version = ROSA;
|
|
+ else if(Lines[i].substr(20).find("Open") != StringRef::npos)
|
|
+ Version = OpenMandriva;
|
|
+ }
|
|
if (Version == UnknownDistro && Lines[i].startswith("DISTRIB_CODENAME="))
|
|
Version = llvm::StringSwitch<Distro>(Lines[i].substr(17))
|
|
.Case("hardy", UbuntuHardy)
|
|
@@ -2845,6 +2892,7 @@ static Distro DetectDistro(llvm::Triple:
|
|
.Case("saucy", UbuntuSaucy)
|
|
.Case("trusty", UbuntuTrusty)
|
|
.Default(UnknownDistro);
|
|
+ }
|
|
return Version;
|
|
}
|
|
|
|
@@ -3005,11 +3053,16 @@ static StringRef getOSLibDir(const llvm:
|
|
// with a 'lib32' library search path being considered. So we only enable
|
|
// them when we know we may need it.
|
|
//
|
|
+ // Also, lib32 is highly distro-specific -- OpenMandriva for one doesn't
|
|
+ // use lib32 (64 bit libs go to lib64, 32 bit libs go to lib)
|
|
+ //
|
|
// 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)
|
|
+ Distro Distro = DetectDistro(Triple.getArch());
|
|
+ if (!IsMandriva(Distro) &&
|
|
+ (Triple.getArch() == llvm::Triple::x86 ||
|
|
+ Triple.getArch() == llvm::Triple::ppc))
|
|
return "lib32";
|
|
|
|
if (Triple.getArch() == llvm::Triple::x86_64 &&
|
|
@@ -3042,7 +3095,7 @@ Linux::Linux(const Driver &D, const llvm
|
|
|
|
Distro Distro = DetectDistro(Arch);
|
|
|
|
- if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
|
|
+ if (IsOpenSUSE(Distro) || IsUbuntu(Distro) || IsMandriva(Distro)) {
|
|
ExtraOpts.push_back("-z");
|
|
ExtraOpts.push_back("relro");
|
|
}
|
|
@@ -3062,7 +3115,7 @@ Linux::Linux(const Driver &D, const llvm
|
|
// ABI requires a mapping between the GOT and the symbol table.
|
|
// Android loader does not support .gnu.hash.
|
|
if (!IsMips && !IsAndroid) {
|
|
- if (IsRedhat(Distro) || IsOpenSUSE(Distro) ||
|
|
+ if (IsRedhat(Distro) || IsOpenSUSE(Distro) || IsMandriva(Distro) ||
|
|
(IsUbuntu(Distro) && Distro >= UbuntuMaverick))
|
|
ExtraOpts.push_back("--hash-style=gnu");
|
|
|
|
@@ -3075,12 +3128,12 @@ Linux::Linux(const Driver &D, const llvm
|
|
ExtraOpts.push_back("--no-add-needed");
|
|
|
|
if (Distro == DebianSqueeze || Distro == DebianWheezy ||
|
|
- Distro == DebianJessie || IsOpenSUSE(Distro) ||
|
|
+ Distro == DebianJessie || IsOpenSUSE(Distro) || IsMandriva(Distro) ||
|
|
(IsRedhat(Distro) && Distro != RHEL4 && Distro != RHEL5) ||
|
|
(IsUbuntu(Distro) && Distro >= UbuntuKarmic))
|
|
ExtraOpts.push_back("--build-id");
|
|
|
|
- if (IsOpenSUSE(Distro))
|
|
+ if (IsOpenSUSE(Distro) || IsMandriva(Distro))
|
|
ExtraOpts.push_back("--enable-new-dtags");
|
|
|
|
// The selection of paths to try here is designed to match the patterns which
|