aports/main/llvm/llvm-alpine-linux.patch
2014-05-14 07:40:47 +00:00

137 lines
5.1 KiB
Diff

--- a/include/llvm/ADT/Triple.h
+++ b/include/llvm/ADT/Triple.h
@@ -117,7 +117,10 @@
EABI,
MachO,
Android,
- ELF
+ ELF,
+ Musl,
+ MuslEABI,
+ MuslEABIHF
};
private:
--- a/lib/Support/Triple.cpp.orig
+++ b/lib/Support/Triple.cpp
@@ -153,6 +153,9 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
case MachO: return "macho";
case Android: return "android";
case ELF: return "elf";
+ case Musl: return "musl";
+ case MuslEABI: return "muslgnueabi";
+ case MuslEABIHF: return "muslgnueabihf";
}
llvm_unreachable("Invalid EnvironmentType!");
@@ -305,6 +308,9 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
.StartsWith("macho", Triple::MachO)
.StartsWith("android", Triple::Android)
.StartsWith("elf", Triple::ELF)
+ .StartsWith("muslgnueabihf", Triple::MuslEABIHF)
+ .StartsWith("muslgnueabi", Triple::MuslEABI)
+ .StartsWith("musl", Triple::Musl)
.Default(Triple::UnknownEnvironment);
}
--- a/tools/clang/lib/Driver/ToolChains.cpp
+++ b/tools/clang/lib/Driver/ToolChains.cpp
@@ -1118,20 +1118,23 @@ void Generic_GCC::GCCInstallationDetector::print(raw_ostream &OS) const {
static const char *const ARMTriples[] = { "arm-linux-gnueabi",
"arm-linux-androideabi" };
static const char *const ARMHFTriples[] = { "arm-linux-gnueabihf",
- "armv7hl-redhat-linux-gnueabi" };
+ "armv7hl-redhat-linux-gnueabi",
+ "armv6-alpine-linux-muslgnueabihf",
+ "armv7-alpine-linux-muslgnueabihf" };
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-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux",
+ "x86_64-alpine-linux-musl"
};
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"
+ "i686-montavista-linux", "i486-alpine-linux-musl"
};
static const char *const MIPSLibDirs[] = { "/lib" };
@@ -2166,6 +2169,7 @@ Tool *Solaris::buildLinker() const {
/// Distribution (very bare-bones at the moment).
enum Distro {
+ AlpineLinux,
ArchLinux,
DebianLenny,
DebianSqueeze,
@@ -2276,6 +2280,9 @@ static Distro DetectDistro(llvm::Triple::ArchType Arch) {
if (llvm::sys::fs::exists("/etc/arch-release"))
return ArchLinux;
+ if (llvm::sys::fs::exists("/etc/alpine-release"))
+ return AlpineLinux;
+
return UnknownDistro;
}
--- a/tools/clang/lib/Driver/Tools.cpp
+++ b/tools/clang/lib/Driver/Tools.cpp
@@ -6355,16 +6355,28 @@ static StringRef getLinuxDynamicLinker(const ArgList &Args,
const toolchains::Linux &ToolChain) {
if (ToolChain.getTriple().getEnvironment() == llvm::Triple::Android)
return "/system/bin/linker";
- else if (ToolChain.getArch() == llvm::Triple::x86)
- return "/lib/ld-linux.so.2";
- else if (ToolChain.getArch() == llvm::Triple::aarch64)
+ else if (ToolChain.getArch() == llvm::Triple::x86) {
+ switch (ToolChain.getTriple().getEnvironment()) {
+ case llvm::Triple::Musl:
+ return "/lib/ld-musl-i386.so.1";
+ default:
+ return "/lib/ld-linux.so.2";
+ }
+ } else if (ToolChain.getArch() == llvm::Triple::aarch64)
return "/lib/ld-linux-aarch64.so.1";
else if (ToolChain.getArch() == llvm::Triple::arm ||
ToolChain.getArch() == llvm::Triple::thumb) {
- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
+ switch (ToolChain.getTriple().getEnvironment()) {
+ case llvm::Triple::Musl:
+ case llvm::Triple::MuslEABI:
+ return "/lib/ld-musl-arm.so.3";
+ case llvm::Triple::MuslEABIHF:
+ return "/lib/ld-musl-armhf.so.3";
+ case llvm::Triple::GNUEABIHF:
return "/lib/ld-linux-armhf.so.3";
- else
+ default:
return "/lib/ld-linux.so.3";
+ }
} else if (ToolChain.getArch() == llvm::Triple::mips ||
ToolChain.getArch() == llvm::Triple::mipsel)
return "/lib/ld.so.1";
@@ -6380,8 +6392,14 @@ static StringRef getLinuxDynamicLinker(const ArgList &Args,
ToolChain.getArch() == llvm::Triple::ppc64le ||
ToolChain.getArch() == llvm::Triple::systemz)
return "/lib64/ld64.so.1";
- else
- return "/lib64/ld-linux-x86-64.so.2";
+ else {
+ switch (ToolChain.getTriple().getEnvironment()) {
+ case llvm::Triple::Musl:
+ return "/lib/ld-musl-x86_64.so.1";
+ default:
+ return "/lib64/ld-linux-x86-64.so.2";
+ }
+ }
}
void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,