diff --git a/driver/linker.cpp b/driver/linker.cpp index b42ce7472e..ed56df340b 100644 --- a/driver/linker.cpp +++ b/driver/linker.cpp @@ -176,6 +176,8 @@ static int linkObjToBinaryGcc(bool sharedLib, bool fullyStatic) { // fallthrough case llvm::Triple::FreeBSD: case llvm::Triple::NetBSD: + case llvm::Triple::OpenBSD: + case llvm::Triple::DragonFly: addSoname = true; args.push_back("-lpthread"); args.push_back("-lm"); diff --git a/driver/targetmachine.cpp b/driver/targetmachine.cpp index e64efd79ad..2d717d6f8b 100644 --- a/driver/targetmachine.cpp +++ b/driver/targetmachine.cpp @@ -125,9 +125,8 @@ static std::string getX86TargetCPU(const llvm::Triple &triple) { // Intel Macs are relatively recent, take advantage of that. if (triple.isOSDarwin()) { return triple.isArch64Bit() ? "core2" : "yonah"; - - // Everything else goes to x86-64 in 64-bit mode. } + // Everything else goes to x86-64 in 64-bit mode. if (triple.isArch64Bit()) { return "x86-64"; } @@ -145,9 +144,15 @@ static std::string getX86TargetCPU(const llvm::Triple &triple) { } if (triple.getOSName().startswith("netbsd")) { return "i486"; - // All x86 devices running Android have core2 as their common - // denominator. This makes a better choice than pentium4. } + if (triple.getOSName().startswith("openbsd")) { + return "i486"; + } + if (triple.getOSName().startswith("dragonfly")) { + return "i486"; + } + // All x86 devices running Android have core2 as their common + // denominator. This makes a better choice than pentium4. if (triple.getEnvironment() == llvm::Triple::Android) { return "core2"; diff --git a/gen/target.cpp b/gen/target.cpp index 9cb3b603fd..8f61882bb9 100644 --- a/gen/target.cpp +++ b/gen/target.cpp @@ -67,7 +67,17 @@ unsigned Target::critsecsize() { if (global.params.targetTriple.isOSWindows()) { return global.params.is64bit ? 40 : 24; } - if (global.params.targetTriple.getOS() == llvm::Triple::FreeBSD) { + if (global.params.targetTriple.isOSFreeBSD() || +#if LDC_LLVM_VER > 305 + global.params.targetTriple.isOSNetBSD() || + global.params.targetTriple.isOSOpenBSD() || + global.params.targetTriple.isOSDragonFly() +#else + global.params.targetTriple.getOS() == llvm::Triple::NetBSD || + global.params.targetTriple.getOS() == llvm::Triple::OpenBSD || + global.params.targetTriple.getOS() == llvm::Triple::DragonFly +#endif + ) { return sizeof(size_t); } return sizeof(pthread_mutex_t); diff --git a/gen/tollvm.cpp b/gen/tollvm.cpp index d8ff21ac18..d40b4865a0 100644 --- a/gen/tollvm.cpp +++ b/gen/tollvm.cpp @@ -662,8 +662,18 @@ LLStructType *DtoMutexType() { return mutex; } - // FreeBSD - if (global.params.targetTriple.getOS() == llvm::Triple::FreeBSD) { + // FreeBSD, NetBSD, OpenBSD, DragonFly + if (global.params.targetTriple.isOSFreeBSD() || +#if LDC_LLVM_VER > 305 + global.params.targetTriple.isOSNetBSD() || + global.params.targetTriple.isOSOpenBSD() || + global.params.targetTriple.isOSDragonFly() +#else + global.params.targetTriple.getOS() == llvm::Triple::NetBSD || + global.params.targetTriple.getOS() == llvm::Triple::OpenBSD || + global.params.targetTriple.getOS() == llvm::Triple::DragonFly +#endif + ) { // Just a pointer return LLStructType::get(gIR->context(), DtoSize_t()); }