Index: cfe/trunk/lib/Basic/Targets.cpp =================================================================== --- cfe/trunk/lib/Basic/Targets.cpp +++ cfe/trunk/lib/Basic/Targets.cpp @@ -382,6 +382,29 @@ : OSTargetInfo(Triple, Opts) {} }; +// Haiku Target +template +class HaikuTargetInfo : public OSTargetInfo { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + // Haiku defines; list based off of gcc output + Builder.defineMacro("__HAIKU__"); + Builder.defineMacro("__ELF__"); + DefineStd(Builder, "unix", Opts); + } +public: + HaikuTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : OSTargetInfo(Triple, Opts) { + this->SizeType = TargetInfo::UnsignedLong; + this->IntPtrType = TargetInfo::SignedLong; + this->PtrDiffType = TargetInfo::SignedLong; + this->ProcessIDType = TargetInfo::SignedLong; + this->TLSSupported = false; + + } +}; + // Minix Target template class MinixTargetInfo : public OSTargetInfo { @@ -4088,21 +4111,15 @@ }; // x86-32 Haiku target -class HaikuX86_32TargetInfo : public X86_32TargetInfo { +class HaikuX86_32TargetInfo : public HaikuTargetInfo { public: HaikuX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) - : X86_32TargetInfo(Triple, Opts) { - SizeType = UnsignedLong; - IntPtrType = SignedLong; - PtrDiffType = SignedLong; - ProcessIDType = SignedLong; - this->TLSSupported = false; + : HaikuTargetInfo(Triple, Opts) { } void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override { - X86_32TargetInfo::getTargetDefines(Opts, Builder); + HaikuTargetInfo::getTargetDefines(Opts, Builder); Builder.defineMacro("__INTEL__"); - Builder.defineMacro("__HAIKU__"); } }; @@ -8360,6 +8377,8 @@ return new MicrosoftX86_64TargetInfo(Triple, Opts); } } + case llvm::Triple::Haiku: + return new HaikuTargetInfo(Triple, Opts); case llvm::Triple::NaCl: return new NaClTargetInfo(Triple, Opts); case llvm::Triple::PS4: Index: cfe/trunk/lib/Driver/Driver.cpp =================================================================== --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -2425,6 +2425,9 @@ ToolChain *&TC = ToolChains[Target.str()]; if (!TC) { switch (Target.getOS()) { + case llvm::Triple::Haiku: + TC = new toolchains::Haiku(*this, Target, Args); + break; case llvm::Triple::CloudABI: TC = new toolchains::CloudABI(*this, Target, Args); break; Index: cfe/trunk/lib/Driver/ToolChains.h =================================================================== --- cfe/trunk/lib/Driver/ToolChains.h +++ cfe/trunk/lib/Driver/ToolChains.h @@ -680,6 +680,18 @@ void findGccLibDir(); }; +class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF { +public: + Haiku(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args); + + bool isPIEDefault() const override { return getTriple().getArch() == llvm::Triple::x86_64; } + + void + AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; +}; + class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { public: OpenBSD(const Driver &D, const llvm::Triple &Triple, Index: cfe/trunk/lib/Driver/ToolChains.cpp =================================================================== --- cfe/trunk/lib/Driver/ToolChains.cpp +++ cfe/trunk/lib/Driver/ToolChains.cpp @@ -3040,6 +3040,38 @@ return SanitizerKind::SafeStack; } +/// Haiku - Haiku tool chain which can call as(1) and ld(1) directly. + +Haiku::Haiku(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) + : Generic_ELF(D, Triple, Args) { + +} + +void Haiku::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + if (DriverArgs.hasArg(options::OPT_nostdlibinc) || + DriverArgs.hasArg(options::OPT_nostdincxx)) + return; + + switch (GetCXXStdlibType(DriverArgs)) { + case ToolChain::CST_Libcxx: + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/system/develop/headers/c++/v1"); + break; + case ToolChain::CST_Libstdcxx: + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/system/develop/headers/c++"); + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/system/develop/headers/c++/backward"); + + StringRef Triple = getTriple().str(); + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/system/develop/headers/c++/" + + Triple); + break; + } +} + /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly. OpenBSD::OpenBSD(const Driver &D, const llvm::Triple &Triple, Index: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp =================================================================== --- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp +++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp @@ -267,38 +267,39 @@ } case llvm::Triple::Haiku: - AddPath("/boot/common/include", System, false); - AddPath("/boot/develop/headers/os", System, false); - AddPath("/boot/develop/headers/os/app", System, false); - AddPath("/boot/develop/headers/os/arch", System, false); - AddPath("/boot/develop/headers/os/device", System, false); - AddPath("/boot/develop/headers/os/drivers", System, false); - AddPath("/boot/develop/headers/os/game", System, false); - AddPath("/boot/develop/headers/os/interface", System, false); - AddPath("/boot/develop/headers/os/kernel", System, false); - AddPath("/boot/develop/headers/os/locale", System, false); - AddPath("/boot/develop/headers/os/mail", System, false); - AddPath("/boot/develop/headers/os/media", System, false); - AddPath("/boot/develop/headers/os/midi", System, false); - AddPath("/boot/develop/headers/os/midi2", System, false); - AddPath("/boot/develop/headers/os/net", System, false); - AddPath("/boot/develop/headers/os/storage", System, false); - AddPath("/boot/develop/headers/os/support", System, false); - AddPath("/boot/develop/headers/os/translation", System, false); - AddPath("/boot/develop/headers/os/add-ons/graphics", System, false); - AddPath("/boot/develop/headers/os/add-ons/input_server", System, false); - AddPath("/boot/develop/headers/os/add-ons/screen_saver", System, false); - AddPath("/boot/develop/headers/os/add-ons/tracker", System, false); - AddPath("/boot/develop/headers/os/be_apps/Deskbar", System, false); - AddPath("/boot/develop/headers/os/be_apps/NetPositive", System, false); - AddPath("/boot/develop/headers/os/be_apps/Tracker", System, false); - AddPath("/boot/develop/headers/cpp", System, false); - AddPath("/boot/develop/headers/cpp/i586-pc-haiku", System, false); - AddPath("/boot/develop/headers/3rdparty", System, false); - AddPath("/boot/develop/headers/bsd", System, false); - AddPath("/boot/develop/headers/glibc", System, false); - AddPath("/boot/develop/headers/posix", System, false); - AddPath("/boot/develop/headers", System, false); + AddPath("/boot/system/non-packaged/develop/headers", System, false); + AddPath("/boot/system/develop/headers/os", System, false); + AddPath("/boot/system/develop/headers/os/app", System, false); + AddPath("/boot/system/develop/headers/os/arch", System, false); + AddPath("/boot/system/develop/headers/os/device", System, false); + AddPath("/boot/system/develop/headers/os/drivers", System, false); + AddPath("/boot/system/develop/headers/os/game", System, false); + AddPath("/boot/system/develop/headers/os/interface", System, false); + AddPath("/boot/system/develop/headers/os/kernel", System, false); + AddPath("/boot/system/develop/headers/os/locale", System, false); + AddPath("/boot/system/develop/headers/os/mail", System, false); + AddPath("/boot/system/develop/headers/os/media", System, false); + AddPath("/boot/system/develop/headers/os/midi", System, false); + AddPath("/boot/system/develop/headers/os/midi2", System, false); + AddPath("/boot/system/develop/headers/os/net", System, false); + AddPath("/boot/system/develop/headers/os/opengl", System, false); + AddPath("/boot/system/develop/headers/os/storage", System, false); + AddPath("/boot/system/develop/headers/os/support", System, false); + AddPath("/boot/system/develop/headers/os/translation", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/graphics", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/input_server", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/mail_daemon", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/registrar", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/screen_saver", System, false); + AddPath("/boot/system/develop/headers/os/add-ons/tracker", System, false); + AddPath("/boot/system/develop/headers/os/be_apps/Deskbar", System, false); + AddPath("/boot/system/develop/headers/os/be_apps/NetPositive", System, false); + AddPath("/boot/system/develop/headers/os/be_apps/Tracker", System, false); + AddPath("/boot/system/develop/headers/3rdparty", System, false); + AddPath("/boot/system/develop/headers/bsd", System, false); + AddPath("/boot/system/develop/headers/glibc", System, false); + AddPath("/boot/system/develop/headers/posix", System, false); + AddPath("/boot/system/develop/headers", System, false); break; case llvm::Triple::RTEMS: break;