r352105 - [WebAssembly] Add a __wasi__ target macro

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 28 05:54:18 PST 2019


Merged in r352360.

On Thu, Jan 24, 2019 at 1:05 PM Dan Gohman via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
>
> Author: djg
> Date: Thu Jan 24 13:05:11 2019
> New Revision: 352105
>
> URL: http://llvm.org/viewvc/llvm-project?rev=352105&view=rev
> Log:
> [WebAssembly] Add a __wasi__ target macro
>
> This adds a `__wasi__` macro for the wasi OS, similar to `__linux__` etc. for
> other OS's.
>
> Differential Revision: https://reviews.llvm.org/D57155
>
> Modified:
>     cfe/trunk/lib/Basic/Targets.cpp
>     cfe/trunk/lib/Basic/Targets/OSTargets.h
>     cfe/trunk/test/Preprocessor/init.c
>
> Modified: cfe/trunk/lib/Basic/Targets.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=352105&r1=352104&r2=352105&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/Targets.cpp (original)
> +++ cfe/trunk/lib/Basic/Targets.cpp Thu Jan 24 13:05:11 2019
> @@ -569,19 +569,27 @@ TargetInfo *AllocateTarget(const llvm::T
>          Triple.getVendor() != llvm::Triple::UnknownVendor ||
>          !Triple.isOSBinFormatWasm())
>        return nullptr;
> -    if (Triple.getOS() != llvm::Triple::UnknownOS &&
> -        Triple.getOS() != llvm::Triple::WASI)
> -      return nullptr;
> -    return new WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>(Triple, Opts);
> +    switch (Triple.getOS()) {
> +      case llvm::Triple::WASI:
> +        return new WASITargetInfo<WebAssembly32TargetInfo>(Triple, Opts);
> +      case llvm::Triple::UnknownOS:
> +        return new WebAssemblyOSTargetInfo<WebAssembly32TargetInfo>(Triple, Opts);
> +      default:
> +        return nullptr;
> +    }
>    case llvm::Triple::wasm64:
>      if (Triple.getSubArch() != llvm::Triple::NoSubArch ||
>          Triple.getVendor() != llvm::Triple::UnknownVendor ||
>          !Triple.isOSBinFormatWasm())
>        return nullptr;
> -    if (Triple.getOS() != llvm::Triple::UnknownOS &&
> -        Triple.getOS() != llvm::Triple::WASI)
> -      return nullptr;
> -    return new WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>(Triple, Opts);
> +    switch (Triple.getOS()) {
> +      case llvm::Triple::WASI:
> +        return new WASITargetInfo<WebAssembly64TargetInfo>(Triple, Opts);
> +      case llvm::Triple::UnknownOS:
> +        return new WebAssemblyOSTargetInfo<WebAssembly64TargetInfo>(Triple, Opts);
> +      default:
> +        return nullptr;
> +    }
>
>    case llvm::Triple::renderscript32:
>      return new LinuxTargetInfo<RenderScript32TargetInfo>(Triple, Opts);
>
> Modified: cfe/trunk/lib/Basic/Targets/OSTargets.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/OSTargets.h?rev=352105&r1=352104&r2=352105&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/Targets/OSTargets.h (original)
> +++ cfe/trunk/lib/Basic/Targets/OSTargets.h Thu Jan 24 13:05:11 2019
> @@ -763,8 +763,9 @@ public:
>  template <typename Target>
>  class LLVM_LIBRARY_VISIBILITY WebAssemblyOSTargetInfo
>      : public OSTargetInfo<Target> {
> +protected:
>    void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
> -                    MacroBuilder &Builder) const final {
> +                    MacroBuilder &Builder) const {
>      // A common platform macro.
>      if (Opts.POSIXThreads)
>        Builder.defineMacro("_REENTRANT");
> @@ -785,6 +786,21 @@ public:
>    }
>  };
>
> +// WASI target
> +template <typename Target>
> +class LLVM_LIBRARY_VISIBILITY WASITargetInfo
> +    : public WebAssemblyOSTargetInfo<Target> {
> +  void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
> +                    MacroBuilder &Builder) const final {
> +    WebAssemblyOSTargetInfo<Target>::getOSDefines(Opts, Triple, Builder);
> +    Builder.defineMacro("__wasi__");
> +  }
> +
> +public:
> +  explicit WASITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
> +      : WebAssemblyOSTargetInfo<Target>(Triple, Opts) {}
> +};
> +
>  } // namespace targets
>  } // namespace clang
>  #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
>
> Modified: cfe/trunk/test/Preprocessor/init.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=352105&r1=352104&r2=352105&view=diff
> ==============================================================================
> --- cfe/trunk/test/Preprocessor/init.c (original)
> +++ cfe/trunk/test/Preprocessor/init.c Thu Jan 24 13:05:11 2019
> @@ -9114,6 +9114,12 @@
>  // RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-unknown \
>  // RUN:   < /dev/null \
>  // RUN:   | FileCheck -match-full-lines -check-prefixes=WEBASSEMBLY,WEBASSEMBLY64 %s
> +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm32-unknown-wasi \
> +// RUN:   < /dev/null \
> +// RUN:   | FileCheck -match-full-lines -check-prefixes=WEBASSEMBLY,WEBASSEMBLY32,WEBASSEMBLY-WASI %s
> +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=wasm64-unknown-wasi \
> +// RUN:   < /dev/null \
> +// RUN:   | FileCheck -match-full-lines -check-prefixes=WEBASSEMBLY,WEBASSEMBLY64,WEBASSEMBLY-WASI %s
>  //
>  // WEBASSEMBLY32:#define _ILP32 1
>  // WEBASSEMBLY32-NOT:#define _LP64
> @@ -9468,6 +9474,7 @@
>  // WEBASSEMBLY-NEXT:#define __llvm__ 1
>  // WEBASSEMBLY-NOT:#define __unix
>  // WEBASSEMBLY-NOT:#define __unix__
> +// WEBASSEMBLY-WASI-NEXT:#define __wasi__ 1
>  // WEBASSEMBLY-NOT:#define __wasm_simd128__
>  // WEBASSEMBLY-NOT:#define __wasm_simd256__
>  // WEBASSEMBLY-NOT:#define __wasm_simd512__
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list