diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Basic/Targets/OSTargets.h | 15 |
2 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index e6fcf934504..e9af3713dfb 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -576,6 +576,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, switch (Triple.getOS()) { case llvm::Triple::WASI: return new WASITargetInfo<WebAssembly32TargetInfo>(Triple, Opts); + case llvm::Triple::Emscripten: + return new EmscriptenTargetInfo<WebAssembly32TargetInfo>(Triple, Opts); case llvm::Triple::UnknownOS: return new WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>(Triple, Opts); default: @@ -589,6 +591,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, switch (Triple.getOS()) { case llvm::Triple::WASI: return new WASITargetInfo<WebAssembly64TargetInfo>(Triple, Opts); + case llvm::Triple::Emscripten: + return new EmscriptenTargetInfo<WebAssembly64TargetInfo>(Triple, Opts); case llvm::Triple::UnknownOS: return new WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>(Triple, Opts); default: diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index e8715dcf374..a0e8061dc18 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -848,6 +848,21 @@ public: : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {} }; +// Emscripten target +template <typename Target> +class LLVM_LIBRARY_VISIBILITY EmscriptenTargetInfo + : public WebAssemblyOSTargetInfo<Target> { + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const final { + WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder); + Builder.defineMacro("__EMSCRIPTEN__"); + } + +public: + explicit EmscriptenTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {} +}; + } // namespace targets } // namespace clang #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H |