diff options
| author | Petr Hosek <phosek@chromium.org> | 2016-10-06 06:08:09 +0000 |
|---|---|---|
| committer | Petr Hosek <phosek@chromium.org> | 2016-10-06 06:08:09 +0000 |
| commit | 62e1d239866969ea3aab7c0b221683a9005ffcc4 (patch) | |
| tree | 8fccbd9dd38172b509062f1272b2a608746c83f8 /clang/lib/Basic | |
| parent | e023d62e7691cd028b1ae127682c533888b16281 (diff) | |
| download | bcm5719-llvm-62e1d239866969ea3aab7c0b221683a9005ffcc4.tar.gz bcm5719-llvm-62e1d239866969ea3aab7c0b221683a9005ffcc4.zip | |
[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
Diffstat (limited to 'clang/lib/Basic')
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
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<typename Target> +class FuchsiaTargetInfo : public OSTargetInfo<Target> { +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<Target>(Triple, Opts) { + this->MCountName = "__mcount"; + } +}; + // WebAssembly target template <typename Target> class WebAssemblyOSTargetInfo : public OSTargetInfo<Target> { @@ -8271,6 +8293,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new LinuxTargetInfo<AArch64leTargetInfo>(Triple, Opts); case llvm::Triple::NetBSD: return new NetBSDTargetInfo<AArch64leTargetInfo>(Triple, Opts); + case llvm::Triple::Fuchsia: + return new FuchsiaTargetInfo<AArch64leTargetInfo>(Triple, Opts); default: return new AArch64leTargetInfo(Triple, Opts); } @@ -8639,6 +8663,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new HaikuTargetInfo<X86_64TargetInfo>(Triple, Opts); case llvm::Triple::NaCl: return new NaClTargetInfo<X86_64TargetInfo>(Triple, Opts); + case llvm::Triple::Fuchsia: + return new FuchsiaTargetInfo<X86_64TargetInfo>(Triple, Opts); case llvm::Triple::PS4: return new PS4OSTargetInfo<X86_64TargetInfo>(Triple, Opts); default: |

