From 0415da9d29eb7ec7db86ca170f292d4d4a64b3d0 Mon Sep 17 00:00:00 2001 From: Gillibald Date: Wed, 28 Sep 2022 03:10:33 -0700 Subject: [PATCH] Emscripten interop sample --- src/Web/Avalonia.Web.Sample/Program.cs | 2 ++ src/Web/Avalonia.Web/Avalonia.Web.targets | 1 + src/Web/Avalonia.Web/Interop/Emscripten.cs | 31 ++++++++++++++++++++ src/Web/Avalonia.Web/Interop/libEmscripten.c | 9 ++++++ 4 files changed, 43 insertions(+) create mode 100644 src/Web/Avalonia.Web/Interop/Emscripten.cs create mode 100644 src/Web/Avalonia.Web/Interop/libEmscripten.c diff --git a/src/Web/Avalonia.Web.Sample/Program.cs b/src/Web/Avalonia.Web.Sample/Program.cs index 233f95852f..2570aa2d58 100644 --- a/src/Web/Avalonia.Web.Sample/Program.cs +++ b/src/Web/Avalonia.Web.Sample/Program.cs @@ -6,6 +6,8 @@ internal partial class Program { private static void Main(string[] args) { + Emscripten.Log(EM_LOG.ERROR, "MyError"); + BuildAvaloniaApp().SetupBrowserApp("out"); } diff --git a/src/Web/Avalonia.Web/Avalonia.Web.targets b/src/Web/Avalonia.Web/Avalonia.Web.targets index d1bec2aa93..537d746ab9 100644 --- a/src/Web/Avalonia.Web/Avalonia.Web.targets +++ b/src/Web/Avalonia.Web/Avalonia.Web.targets @@ -1,5 +1,6 @@ + diff --git a/src/Web/Avalonia.Web/Interop/Emscripten.cs b/src/Web/Avalonia.Web/Interop/Emscripten.cs new file mode 100644 index 0000000000..bfb42fa356 --- /dev/null +++ b/src/Web/Avalonia.Web/Interop/Emscripten.cs @@ -0,0 +1,31 @@ +using System; +using System.Runtime.InteropServices; + +namespace Avalonia.Web +{ + public static partial class Emscripten + { + const string Prefix = "av_"; + const string Library = "libEmscripten"; + + [LibraryImport(Library, EntryPoint = Prefix + "log", StringMarshalling = StringMarshalling.Utf8)] + public static partial void Log(EM_LOG flags, string format); + + [LibraryImport(Library, EntryPoint = Prefix + "debugger")] + public static partial void Debugger(); + } + + [Flags] + public enum EM_LOG : int + { + CONSOLE = 1, + WARN = 2, + ERROR = 4, + C_STACK = 8, + JS_STACK = 16, + NO_PATHS = 64, + FUNC_PARAMS = 128, + DEBUG = 256, + INFO = 512, + } +} diff --git a/src/Web/Avalonia.Web/Interop/libEmscripten.c b/src/Web/Avalonia.Web/Interop/libEmscripten.c new file mode 100644 index 0000000000..708be1abc8 --- /dev/null +++ b/src/Web/Avalonia.Web/Interop/libEmscripten.c @@ -0,0 +1,9 @@ +#include + +void av_log(int flags, const char* format) { + emscripten_log(flags, format); +} + +void av_debugger() { + emscripten_debugger(); +}