From 62e1d239866969ea3aab7c0b221683a9005ffcc4 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 6 Oct 2016 06:08:09 +0000 Subject: [Driver] Add driver support for Fuchsia Provide toolchain and tool support for Fuchsia operating system. Fuchsia uses compiler-rt as the runtime library and libc++, libc++abi and libunwind as the C++ standard library. lld is used as a default linker. Differential Revision: https://reviews.llvm.org/D25117 llvm-svn: 283420 --- clang/lib/Basic/Targets.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'clang/lib/Basic') diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 39ac8be445d..12d92eef9f3 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -823,6 +823,28 @@ public: } }; +// Fuchsia Target +template +class FuchsiaTargetInfo : public OSTargetInfo { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + Builder.defineMacro("__Fuchsia__"); + Builder.defineMacro("__ELF__"); + if (Opts.POSIXThreads) + Builder.defineMacro("_REENTRANT"); + // Required by the libc++ locale support. + if (Opts.CPlusPlus) + Builder.defineMacro("_GNU_SOURCE"); + } +public: + FuchsiaTargetInfo(const llvm::Triple &Triple, + const TargetOptions &Opts) + : OSTargetInfo(Triple, Opts) { + this->MCountName = "__mcount"; + } +}; + // WebAssembly target template class WebAssemblyOSTargetInfo : public OSTargetInfo { @@ -8271,6 +8293,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::NetBSD: return new NetBSDTargetInfo(Triple, Opts); + case llvm::Triple::Fuchsia: + return new FuchsiaTargetInfo(Triple, Opts); default: return new AArch64leTargetInfo(Triple, Opts); } @@ -8639,6 +8663,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new HaikuTargetInfo(Triple, Opts); case llvm::Triple::NaCl: return new NaClTargetInfo(Triple, Opts); + case llvm::Triple::Fuchsia: + return new FuchsiaTargetInfo(Triple, Opts); case llvm::Triple::PS4: return new PS4OSTargetInfo(Triple, Opts); default: -- cgit v1.2.3