From ec33bfd84671a5ff8f11bfd207f44091314ca708 Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 17:47:32 +0300 Subject: [PATCH 1/8] initial --- src/Extism.Pdk.MSBuild/FFIGenerator.cs | 22 +++++----- src/Extism.Pdk.MSBuild/GenerateFFITask.cs | 4 +- src/Extism.Pdk/build/Extism.Pdk.targets | 2 +- src/Extism.Pdk/native/{env.c => extism.c} | 42 +++++++++--------- .../ExtismFFIGeneratorTests.cs | 44 +++++++++---------- .../snapshots/import-custom-module.txt | 4 +- 6 files changed, 59 insertions(+), 59 deletions(-) rename src/Extism.Pdk/native/{env.c => extism.c} (86%) diff --git a/src/Extism.Pdk.MSBuild/FFIGenerator.cs b/src/Extism.Pdk.MSBuild/FFIGenerator.cs index 43427bb..02fb3dc 100644 --- a/src/Extism.Pdk.MSBuild/FFIGenerator.cs +++ b/src/Extism.Pdk.MSBuild/FFIGenerator.cs @@ -7,12 +7,12 @@ namespace Extism.Pdk.MSBuild public class FFIGenerator { private readonly Action _logError; - private readonly string _env; + private readonly string _extism; - public FFIGenerator(string env, Action logError) + public FFIGenerator(string extism, Action logError) { _logError = logError; - _env = env; + _extism = extism; } public IEnumerable GenerateGlueCode(AssemblyDefinition assembly) @@ -28,13 +28,13 @@ public IEnumerable GenerateGlueCode(AssemblyDefinition assembly) .Where(m => m.HasPInvokeInfo) .ToArray(); - var files = GenerateImports(importedMethods, _env); + var files = GenerateImports(importedMethods, _extism); files.Add(GenerateExports(assembly.Name.Name + ".dll", exportedMethods)); return files; } - private List GenerateImports(MethodDefinition[] importedMethods, string env) + private List GenerateImports(MethodDefinition[] importedMethods, string extism) { var modules = importedMethods.GroupBy(m => m.PInvokeInfo.Module.Name) .Select(g => new @@ -44,7 +44,7 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri }) .ToList(); - var envWritten = false; + var extismWritten = false; var files = new List(); @@ -54,10 +54,10 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri { var builder = new StringBuilder(); - if (module.Name == "env") + if (module.Name == "extism") { - envWritten = true; - builder.AppendLine(env); + extismWritten = true; + builder.AppendLine(extism); } else { @@ -72,9 +72,9 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri files.Add(new FileEntry { Name = $"{module.Name}.c", Content = builder.ToString() }); } - if (!envWritten) + if (!extismWritten) { - files.Add(new FileEntry { Name = $"env.c", Content = env }); + files.Add(new FileEntry { Name = $"extism.c", Content = extism }); } return files; diff --git a/src/Extism.Pdk.MSBuild/GenerateFFITask.cs b/src/Extism.Pdk.MSBuild/GenerateFFITask.cs index 2b7b8cd..7a5ae84 100644 --- a/src/Extism.Pdk.MSBuild/GenerateFFITask.cs +++ b/src/Extism.Pdk.MSBuild/GenerateFFITask.cs @@ -15,7 +15,7 @@ public class GenerateFFITask : Microsoft.Build.Utilities.Task public string OutputPath { get; set; } [Required] - public string EnvPath { get; set; } + public string ExtismPath { get; set; } public override bool Execute() { @@ -36,7 +36,7 @@ public override bool Execute() } } - var generator = new FFIGenerator(File.ReadAllText(EnvPath), (string message) => Log.LogError(message)); + var generator = new FFIGenerator(File.ReadAllText(ExtismPath), (string message) => Log.LogError(message)); foreach (var file in generator.GenerateGlueCode(assembly)) { diff --git a/src/Extism.Pdk/build/Extism.Pdk.targets b/src/Extism.Pdk/build/Extism.Pdk.targets index 1bd1a6d..4658415 100644 --- a/src/Extism.Pdk/build/Extism.Pdk.targets +++ b/src/Extism.Pdk/build/Extism.Pdk.targets @@ -1,7 +1,7 @@ - + <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/Extism.Pdk/native/env.c b/src/Extism.Pdk/native/extism.c similarity index 86% rename from src/Extism.Pdk/native/env.c rename to src/Extism.Pdk/native/extism.c index 1832de2..c662754 100644 --- a/src/Extism.Pdk/native/env.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("env", "extism_input_length") +IMPORT("extism", "extism_input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("env", "extism_length") +IMPORT("extism", "extism_length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("env", "extism_alloc") +IMPORT("extism", "extism_alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("env", "extism_free") +IMPORT("extism", "extism_free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("env", "extism_input_load_u8") +IMPORT("extism", "extism_input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("env", "extism_input_load_u64") +IMPORT("extism", "extism_input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("env", "extism_output_set") +IMPORT("extism", "extism_output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("env", "extism_error_set") +IMPORT("extism", "extism_error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("env", "extism_config_get") +IMPORT("extism", "extism_config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("env", "extism_var_get") +IMPORT("extism", "extism_var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("env", "extism_var_set") +IMPORT("extism", "extism_var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("env", "extism_store_u8") +IMPORT("extism", "extism_store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("env", "extism_load_u8") +IMPORT("extism", "extism_load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("env", "extism_store_u64") +IMPORT("extism", "extism_store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("env", "extism_load_u64") +IMPORT("extism", "extism_load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("env", "extism_http_request") +IMPORT("extism", "extism_http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("env", "extism_http_status_code") +IMPORT("extism", "extism_http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("env", "extism_log_info") +IMPORT("extism", "extism_log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("env", "extism_log_debug") +IMPORT("extism", "extism_log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("env", "extism_log_warn") +IMPORT("extism", "extism_log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("env", "extism_log_error") +IMPORT("extism", "extism_log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { diff --git a/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs b/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs index dc18893..77feaee 100644 --- a/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs +++ b/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs @@ -13,8 +13,8 @@ public class ExtismFFIGeneratorTests [Fact] public void CanHandleEmptyAssemblies() { - var env = ""; - var generator = new FFIGenerator(env, (m) => { }); + var extism = ""; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); @@ -22,25 +22,25 @@ public void CanHandleEmptyAssemblies() } [Fact] - public void CanImportFromEnv() + public void CanImportFromExtism() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); var type = assembly.MainModule.CreateType("MyNamespace", "MyClass"); _ = type.CreateMethod("DoSomething", typeof(void), ("p1", typeof(int)), ("p2", typeof(byte)), ("p3", typeof(long))) - .AddImport("env", "do_something"); + .AddImport("extism", "do_something"); var files = generator.GenerateGlueCode(assembly); - var envFile = files.Single(f => f.Name == "env.c"); - envFile.Content.Trim().ShouldBe( + var extismFile = files.Single(f => f.Name == "extism.c"); + extismFile.Content.Trim().ShouldBe( """ - // env stuff - IMPORT("env", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); + // extism stuff + IMPORT("extism", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); void do_something(int32_t p1, uint8_t p2, int64_t p3) { do_something_import(p1, p2, p3); @@ -53,40 +53,40 @@ void do_something(int32_t p1, uint8_t p2, int64_t p3) { [Fact] public void CanImportFromCustomModules() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); var type = assembly.MainModule.CreateType("MyNamespace", "MyClass"); _ = type.CreateMethod("DoSomething", typeof(void), ("p1", typeof(int)), ("p2", typeof(byte)), ("p3", typeof(long))) - .AddImport("host", "do_something"); + .AddImport("env", "do_something"); _ = type.CreateMethod("GetLength", typeof(int), ("p1", typeof(float))) - .AddImport("host", null); + .AddImport("env", null); var files = generator.GenerateGlueCode(assembly); - var hostFile = files.Single(f => f.Name == "host.c"); + var envFile = files.Single(f => f.Name == "env.c"); var expected = File.ReadAllText("snapshots/import-custom-module.txt"); - hostFile.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); + envFile.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); - AssertContent(env, files, "env.c"); + AssertContent(extism, files, "extism.c"); files.ShouldNotContain(f => f.Name == "export.c"); } private static void AssertContent(string content, IEnumerable files, string fileName) { - var envFile = files.Single(f => f.Name == fileName); - envFile.Content.Trim().ShouldBe(content.Trim(), StringCompareShould.IgnoreLineEndings); + var extismFile = files.Single(f => f.Name == fileName); + extismFile.Content.Trim().ShouldBe(content.Trim(), StringCompareShould.IgnoreLineEndings); } [Fact] public void CanExportMethods() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); @@ -104,7 +104,7 @@ public void CanExportMethods() var expected = File.ReadAllText("snapshots/exports.txt"); file.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); - AssertContent(env, files, "env.c"); + AssertContent(extism, files, "extism.c"); } } diff --git a/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt b/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt index 3dcb814..676ebc2 100644 --- a/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt +++ b/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt @@ -16,12 +16,12 @@ #define IMPORT(a, b) __attribute__((import_module(a), import_name(b))) typedef uint64_t ExtismPointer; -IMPORT("host", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); +IMPORT("env", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); void do_something(int32_t p1, uint8_t p2, int64_t p3) { do_something_import(p1, p2, p3); } -IMPORT("host", "GetLength") extern int32_t GetLength_import(float p1); +IMPORT("env", "GetLength") extern int32_t GetLength_import(float p1); int32_t GetLength(float p1) { return GetLength_import(p1); From c7811fcf505cea5b42e2d569f4f4b54e46d23e88 Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 18:55:52 +0300 Subject: [PATCH 2/8] use extism::env namespace --- src/Extism.Pdk/Native.cs | 48 ++++++++++++------------- src/Extism.Pdk/build/Extism.Pdk.targets | 2 +- src/Extism.Pdk/native/extism.c | 42 +++++++++++----------- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/Extism.Pdk/Native.cs b/src/Extism.Pdk/Native.cs index befe4d2..61f6abf 100644 --- a/src/Extism.Pdk/Native.cs +++ b/src/Extism.Pdk/Native.cs @@ -12,74 +12,74 @@ internal static void Main() { internal class Native { - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_input_length(); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_length(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_alloc(ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_free(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern byte extism_input_load_u8(ulong index); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_input_load_u64(ulong index); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_output_set(ulong offset, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_error_set(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_config_get(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_var_get(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_var_set(ulong keyOffset, ulong valueOffset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store_u8(ulong offset, byte value); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern byte extism_load_u8(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store_u64(ulong offset, ulong value); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_load_u64(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_http_request(ulong requestOffset, ulong bodyOffset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ushort extism_http_status_code(); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_info(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_debug(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_warn(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_error(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store(ulong offset, byte* buffer, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_load(ulong offset, byte* buffer, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_load_input(byte* buffer, ulong n); internal static void PrintException(Exception ex) diff --git a/src/Extism.Pdk/build/Extism.Pdk.targets b/src/Extism.Pdk/build/Extism.Pdk.targets index 4658415..d4be005 100644 --- a/src/Extism.Pdk/build/Extism.Pdk.targets +++ b/src/Extism.Pdk/build/Extism.Pdk.targets @@ -7,7 +7,7 @@ <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> - + <_WasiSdkClangArgs Include="-Wl,--wrap=mono_runtime_run_main" /> diff --git a/src/Extism.Pdk/native/extism.c b/src/Extism.Pdk/native/extism.c index c662754..dd4feda 100644 --- a/src/Extism.Pdk/native/extism.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("extism", "extism_input_length") +IMPORT("extism::env", "input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("extism", "extism_length") +IMPORT("extism::env", "length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("extism", "extism_alloc") +IMPORT("extism::env", "alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("extism", "extism_free") +IMPORT("extism::env", "free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("extism", "extism_input_load_u8") +IMPORT("extism::env", "input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("extism", "extism_input_load_u64") +IMPORT("extism::env", "input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("extism", "extism_output_set") +IMPORT("extism::env", "output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("extism", "extism_error_set") +IMPORT("extism::env", "error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("extism", "extism_config_get") +IMPORT("extism::env", "config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("extism", "extism_var_get") +IMPORT("extism::env", "var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("extism", "extism_var_set") +IMPORT("extism::env", "var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("extism", "extism_store_u8") +IMPORT("extism::env", "store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("extism", "extism_load_u8") +IMPORT("extism::env", "load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("extism", "extism_store_u64") +IMPORT("extism::env", "store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("extism", "extism_load_u64") +IMPORT("extism::env", "load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("extism", "extism_http_request") +IMPORT("extism::env", "http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("extism", "extism_http_status_code") +IMPORT("extism::env", "http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("extism", "extism_log_info") +IMPORT("extism::env", "log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("extism", "extism_log_debug") +IMPORT("extism::env", "log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("extism", "extism_log_warn") +IMPORT("extism::env", "log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("extism", "extism_log_error") +IMPORT("extism::env", "log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { From 84aa6c8c92fb257b41a112be043f3bd59da18729 Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 19:41:20 +0300 Subject: [PATCH 3/8] extism::env => extism:env --- src/Extism.Pdk/native/extism.c | 42 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Extism.Pdk/native/extism.c b/src/Extism.Pdk/native/extism.c index dd4feda..f24e789 100644 --- a/src/Extism.Pdk/native/extism.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("extism::env", "input_length") +IMPORT("extism:env", "input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("extism::env", "length") +IMPORT("extism:env", "length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("extism::env", "alloc") +IMPORT("extism:env", "alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("extism::env", "free") +IMPORT("extism:env", "free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("extism::env", "input_load_u8") +IMPORT("extism:env", "input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("extism::env", "input_load_u64") +IMPORT("extism:env", "input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("extism::env", "output_set") +IMPORT("extism:env", "output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("extism::env", "error_set") +IMPORT("extism:env", "error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("extism::env", "config_get") +IMPORT("extism:env", "config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("extism::env", "var_get") +IMPORT("extism:env", "var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("extism::env", "var_set") +IMPORT("extism:env", "var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("extism::env", "store_u8") +IMPORT("extism:env", "store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("extism::env", "load_u8") +IMPORT("extism:env", "load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("extism::env", "store_u64") +IMPORT("extism:env", "store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("extism::env", "load_u64") +IMPORT("extism:env", "load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("extism::env", "http_request") +IMPORT("extism:env", "http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("extism::env", "http_status_code") +IMPORT("extism:env", "http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("extism::env", "log_info") +IMPORT("extism:env", "log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("extism::env", "log_debug") +IMPORT("extism:env", "log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("extism::env", "log_warn") +IMPORT("extism:env", "log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("extism::env", "log_error") +IMPORT("extism:env", "log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { From 826b0742eed3c64185f1b10ce87dc8aaa8074cb4 Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 17:47:32 +0300 Subject: [PATCH 4/8] initial --- src/Extism.Pdk.MSBuild/FFIGenerator.cs | 22 +++++----- src/Extism.Pdk.MSBuild/GenerateFFITask.cs | 4 +- src/Extism.Pdk/build/Extism.Pdk.targets | 2 +- src/Extism.Pdk/native/{env.c => extism.c} | 42 +++++++++--------- .../ExtismFFIGeneratorTests.cs | 44 +++++++++---------- .../snapshots/import-custom-module.txt | 4 +- 6 files changed, 59 insertions(+), 59 deletions(-) rename src/Extism.Pdk/native/{env.c => extism.c} (87%) diff --git a/src/Extism.Pdk.MSBuild/FFIGenerator.cs b/src/Extism.Pdk.MSBuild/FFIGenerator.cs index 90e472f..cddc12e 100644 --- a/src/Extism.Pdk.MSBuild/FFIGenerator.cs +++ b/src/Extism.Pdk.MSBuild/FFIGenerator.cs @@ -7,12 +7,12 @@ namespace Extism.Pdk.MSBuild public class FFIGenerator { private readonly Action _logError; - private readonly string _env; + private readonly string _extism; - public FFIGenerator(string env, Action logError) + public FFIGenerator(string extism, Action logError) { _logError = logError; - _env = env; + _extism = extism; } public IEnumerable GenerateGlueCode(AssemblyDefinition assembly) @@ -28,13 +28,13 @@ public IEnumerable GenerateGlueCode(AssemblyDefinition assembly) .Where(m => m.HasPInvokeInfo) .ToArray(); - var files = GenerateImports(importedMethods, _env); + var files = GenerateImports(importedMethods, _extism); files.Add(GenerateExports(assembly.Name.Name + ".dll", exportedMethods)); return files; } - private List GenerateImports(MethodDefinition[] importedMethods, string env) + private List GenerateImports(MethodDefinition[] importedMethods, string extism) { var modules = importedMethods.GroupBy(m => m.PInvokeInfo.Module.Name) .Select(g => new @@ -44,7 +44,7 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri }) .ToList(); - var envWritten = false; + var extismWritten = false; var files = new List(); @@ -54,10 +54,10 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri { var builder = new StringBuilder(); - if (module.Name == "env") + if (module.Name == "extism") { - envWritten = true; - builder.AppendLine(env); + extismWritten = true; + builder.AppendLine(extism); } else { @@ -72,9 +72,9 @@ private List GenerateImports(MethodDefinition[] importedMethods, stri files.Add(new FileEntry { Name = $"{module.Name}.c", Content = builder.ToString() }); } - if (!envWritten) + if (!extismWritten) { - files.Add(new FileEntry { Name = $"env.c", Content = env }); + files.Add(new FileEntry { Name = $"extism.c", Content = extism }); } return files; diff --git a/src/Extism.Pdk.MSBuild/GenerateFFITask.cs b/src/Extism.Pdk.MSBuild/GenerateFFITask.cs index 2b7b8cd..7a5ae84 100644 --- a/src/Extism.Pdk.MSBuild/GenerateFFITask.cs +++ b/src/Extism.Pdk.MSBuild/GenerateFFITask.cs @@ -15,7 +15,7 @@ public class GenerateFFITask : Microsoft.Build.Utilities.Task public string OutputPath { get; set; } [Required] - public string EnvPath { get; set; } + public string ExtismPath { get; set; } public override bool Execute() { @@ -36,7 +36,7 @@ public override bool Execute() } } - var generator = new FFIGenerator(File.ReadAllText(EnvPath), (string message) => Log.LogError(message)); + var generator = new FFIGenerator(File.ReadAllText(ExtismPath), (string message) => Log.LogError(message)); foreach (var file in generator.GenerateGlueCode(assembly)) { diff --git a/src/Extism.Pdk/build/Extism.Pdk.targets b/src/Extism.Pdk/build/Extism.Pdk.targets index 41a1610..bb5461f 100644 --- a/src/Extism.Pdk/build/Extism.Pdk.targets +++ b/src/Extism.Pdk/build/Extism.Pdk.targets @@ -1,7 +1,7 @@ - + <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/Extism.Pdk/native/env.c b/src/Extism.Pdk/native/extism.c similarity index 87% rename from src/Extism.Pdk/native/env.c rename to src/Extism.Pdk/native/extism.c index 6658442..9024dd9 100644 --- a/src/Extism.Pdk/native/env.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("env", "extism_input_length") +IMPORT("extism", "extism_input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("env", "extism_length") +IMPORT("extism", "extism_length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("env", "extism_alloc") +IMPORT("extism", "extism_alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("env", "extism_free") +IMPORT("extism", "extism_free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("env", "extism_input_load_u8") +IMPORT("extism", "extism_input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("env", "extism_input_load_u64") +IMPORT("extism", "extism_input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("env", "extism_output_set") +IMPORT("extism", "extism_output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("env", "extism_error_set") +IMPORT("extism", "extism_error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("env", "extism_config_get") +IMPORT("extism", "extism_config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("env", "extism_var_get") +IMPORT("extism", "extism_var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("env", "extism_var_set") +IMPORT("extism", "extism_var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("env", "extism_store_u8") +IMPORT("extism", "extism_store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("env", "extism_load_u8") +IMPORT("extism", "extism_load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("env", "extism_store_u64") +IMPORT("extism", "extism_store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("env", "extism_load_u64") +IMPORT("extism", "extism_load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("env", "extism_http_request") +IMPORT("extism", "extism_http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("env", "extism_http_status_code") +IMPORT("extism", "extism_http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("env", "extism_log_info") +IMPORT("extism", "extism_log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("env", "extism_log_debug") +IMPORT("extism", "extism_log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("env", "extism_log_warn") +IMPORT("extism", "extism_log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("env", "extism_log_error") +IMPORT("extism", "extism_log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { diff --git a/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs b/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs index dc18893..77feaee 100644 --- a/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs +++ b/tests/Extism.Pdk.MsBuild.Tests/ExtismFFIGeneratorTests.cs @@ -13,8 +13,8 @@ public class ExtismFFIGeneratorTests [Fact] public void CanHandleEmptyAssemblies() { - var env = ""; - var generator = new FFIGenerator(env, (m) => { }); + var extism = ""; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); @@ -22,25 +22,25 @@ public void CanHandleEmptyAssemblies() } [Fact] - public void CanImportFromEnv() + public void CanImportFromExtism() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); var type = assembly.MainModule.CreateType("MyNamespace", "MyClass"); _ = type.CreateMethod("DoSomething", typeof(void), ("p1", typeof(int)), ("p2", typeof(byte)), ("p3", typeof(long))) - .AddImport("env", "do_something"); + .AddImport("extism", "do_something"); var files = generator.GenerateGlueCode(assembly); - var envFile = files.Single(f => f.Name == "env.c"); - envFile.Content.Trim().ShouldBe( + var extismFile = files.Single(f => f.Name == "extism.c"); + extismFile.Content.Trim().ShouldBe( """ - // env stuff - IMPORT("env", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); + // extism stuff + IMPORT("extism", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); void do_something(int32_t p1, uint8_t p2, int64_t p3) { do_something_import(p1, p2, p3); @@ -53,40 +53,40 @@ void do_something(int32_t p1, uint8_t p2, int64_t p3) { [Fact] public void CanImportFromCustomModules() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); var type = assembly.MainModule.CreateType("MyNamespace", "MyClass"); _ = type.CreateMethod("DoSomething", typeof(void), ("p1", typeof(int)), ("p2", typeof(byte)), ("p3", typeof(long))) - .AddImport("host", "do_something"); + .AddImport("env", "do_something"); _ = type.CreateMethod("GetLength", typeof(int), ("p1", typeof(float))) - .AddImport("host", null); + .AddImport("env", null); var files = generator.GenerateGlueCode(assembly); - var hostFile = files.Single(f => f.Name == "host.c"); + var envFile = files.Single(f => f.Name == "env.c"); var expected = File.ReadAllText("snapshots/import-custom-module.txt"); - hostFile.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); + envFile.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); - AssertContent(env, files, "env.c"); + AssertContent(extism, files, "extism.c"); files.ShouldNotContain(f => f.Name == "export.c"); } private static void AssertContent(string content, IEnumerable files, string fileName) { - var envFile = files.Single(f => f.Name == fileName); - envFile.Content.Trim().ShouldBe(content.Trim(), StringCompareShould.IgnoreLineEndings); + var extismFile = files.Single(f => f.Name == fileName); + extismFile.Content.Trim().ShouldBe(content.Trim(), StringCompareShould.IgnoreLineEndings); } [Fact] public void CanExportMethods() { - var env = "// env stuff"; - var generator = new FFIGenerator(env, (m) => { }); + var extism = "// extism stuff"; + var generator = new FFIGenerator(extism, (m) => { }); var assembly = CecilExtensions.CreateSampleAssembly("SampleApp"); @@ -104,7 +104,7 @@ public void CanExportMethods() var expected = File.ReadAllText("snapshots/exports.txt"); file.Content.Trim().ShouldBe(expected, StringCompareShould.IgnoreLineEndings); - AssertContent(env, files, "env.c"); + AssertContent(extism, files, "extism.c"); } } diff --git a/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt b/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt index 3dcb814..676ebc2 100644 --- a/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt +++ b/tests/Extism.Pdk.MsBuild.Tests/snapshots/import-custom-module.txt @@ -16,12 +16,12 @@ #define IMPORT(a, b) __attribute__((import_module(a), import_name(b))) typedef uint64_t ExtismPointer; -IMPORT("host", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); +IMPORT("env", "do_something") extern void do_something_import(int32_t p1, uint8_t p2, int64_t p3); void do_something(int32_t p1, uint8_t p2, int64_t p3) { do_something_import(p1, p2, p3); } -IMPORT("host", "GetLength") extern int32_t GetLength_import(float p1); +IMPORT("env", "GetLength") extern int32_t GetLength_import(float p1); int32_t GetLength(float p1) { return GetLength_import(p1); From 9a4c78051c80d9e48229423e6c22e8396280d62a Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 18:55:52 +0300 Subject: [PATCH 5/8] use extism::env namespace --- src/Extism.Pdk/Native.cs | 48 ++++++++++++------------- src/Extism.Pdk/build/Extism.Pdk.targets | 2 +- src/Extism.Pdk/native/extism.c | 42 +++++++++++----------- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/src/Extism.Pdk/Native.cs b/src/Extism.Pdk/Native.cs index befe4d2..61f6abf 100644 --- a/src/Extism.Pdk/Native.cs +++ b/src/Extism.Pdk/Native.cs @@ -12,74 +12,74 @@ internal static void Main() { internal class Native { - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_input_length(); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_length(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_alloc(ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_free(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern byte extism_input_load_u8(ulong index); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_input_load_u64(ulong index); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_output_set(ulong offset, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_error_set(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_config_get(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_var_get(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_var_set(ulong keyOffset, ulong valueOffset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store_u8(ulong offset, byte value); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern byte extism_load_u8(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store_u64(ulong offset, ulong value); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_load_u64(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ulong extism_http_request(ulong requestOffset, ulong bodyOffset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern ushort extism_http_status_code(); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_info(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_debug(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_warn(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_log_error(ulong offset); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_store(ulong offset, byte* buffer, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_load(ulong offset, byte* buffer, ulong n); - [DllImport("env")] + [DllImport("extism")] internal static unsafe extern void extism_load_input(byte* buffer, ulong n); internal static void PrintException(Exception ex) diff --git a/src/Extism.Pdk/build/Extism.Pdk.targets b/src/Extism.Pdk/build/Extism.Pdk.targets index bb5461f..6751487 100644 --- a/src/Extism.Pdk/build/Extism.Pdk.targets +++ b/src/Extism.Pdk/build/Extism.Pdk.targets @@ -7,7 +7,7 @@ <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> - + <_WasiSdkClangArgs Include="-Wl,--wrap=mono_runtime_run_main" /> diff --git a/src/Extism.Pdk/native/extism.c b/src/Extism.Pdk/native/extism.c index 9024dd9..b774c0e 100644 --- a/src/Extism.Pdk/native/extism.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("extism", "extism_input_length") +IMPORT("extism::env", "input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("extism", "extism_length") +IMPORT("extism::env", "length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("extism", "extism_alloc") +IMPORT("extism::env", "alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("extism", "extism_free") +IMPORT("extism::env", "free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("extism", "extism_input_load_u8") +IMPORT("extism::env", "input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("extism", "extism_input_load_u64") +IMPORT("extism::env", "input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("extism", "extism_output_set") +IMPORT("extism::env", "output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("extism", "extism_error_set") +IMPORT("extism::env", "error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("extism", "extism_config_get") +IMPORT("extism::env", "config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("extism", "extism_var_get") +IMPORT("extism::env", "var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("extism", "extism_var_set") +IMPORT("extism::env", "var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("extism", "extism_store_u8") +IMPORT("extism::env", "store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("extism", "extism_load_u8") +IMPORT("extism::env", "load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("extism", "extism_store_u64") +IMPORT("extism::env", "store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("extism", "extism_load_u64") +IMPORT("extism::env", "load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("extism", "extism_http_request") +IMPORT("extism::env", "http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("extism", "extism_http_status_code") +IMPORT("extism::env", "http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("extism", "extism_log_info") +IMPORT("extism::env", "log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("extism", "extism_log_debug") +IMPORT("extism::env", "log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("extism", "extism_log_warn") +IMPORT("extism::env", "log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("extism", "extism_log_error") +IMPORT("extism::env", "log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { From 42ddc05571c18e34c84ee373a611da0e67be4349 Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Wed, 11 Oct 2023 19:41:20 +0300 Subject: [PATCH 6/8] extism::env => extism:env --- src/Extism.Pdk/native/extism.c | 42 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Extism.Pdk/native/extism.c b/src/Extism.Pdk/native/extism.c index b774c0e..a332cfd 100644 --- a/src/Extism.Pdk/native/extism.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("extism::env", "input_length") +IMPORT("extism:env", "input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("extism::env", "length") +IMPORT("extism:env", "length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("extism::env", "alloc") +IMPORT("extism:env", "alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("extism::env", "free") +IMPORT("extism:env", "free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("extism::env", "input_load_u8") +IMPORT("extism:env", "input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("extism::env", "input_load_u64") +IMPORT("extism:env", "input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("extism::env", "output_set") +IMPORT("extism:env", "output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("extism::env", "error_set") +IMPORT("extism:env", "error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("extism::env", "config_get") +IMPORT("extism:env", "config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("extism::env", "var_get") +IMPORT("extism:env", "var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("extism::env", "var_set") +IMPORT("extism:env", "var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("extism::env", "store_u8") +IMPORT("extism:env", "store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("extism::env", "load_u8") +IMPORT("extism:env", "load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("extism::env", "store_u64") +IMPORT("extism:env", "store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("extism::env", "load_u64") +IMPORT("extism:env", "load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("extism::env", "http_request") +IMPORT("extism:env", "http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("extism::env", "http_status_code") +IMPORT("extism:env", "http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("extism::env", "log_info") +IMPORT("extism:env", "log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("extism::env", "log_debug") +IMPORT("extism:env", "log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("extism::env", "log_warn") +IMPORT("extism:env", "log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("extism::env", "log_error") +IMPORT("extism:env", "log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { From 04ea86101b61e12288f4450481b1406dc0e5934d Mon Sep 17 00:00:00 2001 From: zach Date: Fri, 20 Oct 2023 13:51:48 -0700 Subject: [PATCH 7/8] chore: use extism:host/env namespace --- src/Extism.Pdk/native/extism.c | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Extism.Pdk/native/extism.c b/src/Extism.Pdk/native/extism.c index a332cfd..14d0f42 100644 --- a/src/Extism.Pdk/native/extism.c +++ b/src/Extism.Pdk/native/extism.c @@ -17,147 +17,147 @@ typedef uint64_t ExtismPointer; -IMPORT("extism:env", "input_length") +IMPORT("extism:host/env", "input_length") extern uint64_t extism_input_length_import(); uint64_t extism_input_length() { return extism_input_length_import(); } -IMPORT("extism:env", "length") +IMPORT("extism:host/env", "length") extern uint64_t extism_length_import(ExtismPointer); uint64_t extism_length(ExtismPointer p) { return extism_length_import(p); } -IMPORT("extism:env", "alloc") +IMPORT("extism:host/env", "alloc") extern ExtismPointer extism_alloc_import(uint64_t size); ExtismPointer extism_alloc(uint64_t size) { return extism_alloc_import(size); } -IMPORT("extism:env", "free") +IMPORT("extism:host/env", "free") extern void extism_free_import(ExtismPointer p); void extism_free(ExtismPointer p) { extism_free_import(p); } -IMPORT("extism:env", "input_load_u8") +IMPORT("extism:host/env", "input_load_u8") extern uint8_t extism_input_load_u8_import(ExtismPointer p); uint8_t extism_input_load_u8(ExtismPointer p) { return extism_input_load_u8_import(p); } -IMPORT("extism:env", "input_load_u64") +IMPORT("extism:host/env", "input_load_u64") extern uint64_t extism_input_load_u64_import(ExtismPointer p); uint64_t extism_input_load_u64(ExtismPointer p) { return extism_input_load_u64_import(p); } -IMPORT("extism:env", "output_set") +IMPORT("extism:host/env", "output_set") extern void extism_output_set_import(ExtismPointer p, uint64_t value); void extism_output_set(ExtismPointer p, uint64_t value) { extism_output_set_import(p, value); } -IMPORT("extism:env", "error_set") +IMPORT("extism:host/env", "error_set") extern void extism_error_set_import(ExtismPointer p); void extism_error_set(ExtismPointer p) { extism_error_set_import(p); } -IMPORT("extism:env", "config_get") +IMPORT("extism:host/env", "config_get") extern ExtismPointer extism_config_get_import(ExtismPointer p); ExtismPointer extism_config_get(ExtismPointer p) { return extism_config_get_import(p); } -IMPORT("extism:env", "var_get") +IMPORT("extism:host/env", "var_get") extern ExtismPointer extism_var_get_import(ExtismPointer p); ExtismPointer extism_var_get(ExtismPointer p) { return extism_var_get_import(p); } -IMPORT("extism:env", "var_set") +IMPORT("extism:host/env", "var_set") extern void extism_var_set_import(ExtismPointer p1, ExtismPointer p2); void extism_var_set(ExtismPointer p1, ExtismPointer p2) { extism_var_set_import(p1, p2); } -IMPORT("extism:env", "store_u8") +IMPORT("extism:host/env", "store_u8") extern void extism_store_u8_import(ExtismPointer p, uint8_t value); void extism_store_u8(ExtismPointer p, uint8_t value) { extism_store_u8_import(p, value); } -IMPORT("extism:env", "load_u8") +IMPORT("extism:host/env", "load_u8") extern uint8_t extism_load_u8_import(ExtismPointer p); uint8_t extism_load_u8(ExtismPointer p) { return extism_load_u8_import(p); } -IMPORT("extism:env", "store_u64") +IMPORT("extism:host/env", "store_u64") extern void extism_store_u64_import(ExtismPointer p, uint64_t value); void extism_store_u64(ExtismPointer p, uint64_t value) { extism_store_u64_import(p, value); } -IMPORT("extism:env", "load_u64") +IMPORT("extism:host/env", "load_u64") extern uint64_t extism_load_u64_import(ExtismPointer p); uint64_t extism_load_u64(ExtismPointer p) { return extism_load_u64_import(p); } -IMPORT("extism:env", "http_request") +IMPORT("extism:host/env", "http_request") extern ExtismPointer extism_http_request_import(ExtismPointer p1, ExtismPointer p2); ExtismPointer extism_http_request(ExtismPointer p1, ExtismPointer p2) { return extism_http_request_import(p1, p2); } -IMPORT("extism:env", "http_status_code") +IMPORT("extism:host/env", "http_status_code") extern int32_t extism_http_status_code_import(); int32_t extism_http_status_code() { return extism_http_status_code_import(); } -IMPORT("extism:env", "log_info") +IMPORT("extism:host/env", "log_info") extern void extism_log_info_import(ExtismPointer p); void extism_log_info(ExtismPointer p) { extism_log_info_import(p); } -IMPORT("extism:env", "log_debug") +IMPORT("extism:host/env", "log_debug") extern void extism_log_debug_import(ExtismPointer p); void extism_log_debug(ExtismPointer p) { extism_log_debug_import(p); } -IMPORT("extism:env", "log_warn") +IMPORT("extism:host/env", "log_warn") extern void extism_log_warn_import(ExtismPointer p); void extism_log_warn(ExtismPointer p) { extism_log_warn_import(p); } -IMPORT("extism:env", "log_error") +IMPORT("extism:host/env", "log_error") extern void extism_log_error_import(ExtismPointer p); void extism_log_error(ExtismPointer p) { @@ -245,4 +245,4 @@ void __wrap_mono_wasm_load_runtime(const char* unused, int debug_level) { __real_mono_wasm_load_runtime(unused, debug_level); mono_runtime_initialized = true; -} \ No newline at end of file +} From c2356ca5e3a169b49a9d35ff2ac9da24e387365f Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Tue, 31 Oct 2023 13:45:06 +0300 Subject: [PATCH 8/8] fix tests --- tests/Extism.Pdk.WasmTests/KitchenSinkTests.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/Extism.Pdk.WasmTests/KitchenSinkTests.cs b/tests/Extism.Pdk.WasmTests/KitchenSinkTests.cs index c21876c..f44a1d4 100644 --- a/tests/Extism.Pdk.WasmTests/KitchenSinkTests.cs +++ b/tests/Extism.Pdk.WasmTests/KitchenSinkTests.cs @@ -48,8 +48,7 @@ public async void TestCount() stderr.ShouldBe(""); exit.ShouldBe(0); - // TODO: Enable this again after the Extism CLI is fixed - //stdout.ShouldBe("1\n2\n3\n"); + stdout.ShouldBe("1\n2\n3\n"); } [Theory] @@ -141,19 +140,17 @@ class ExtismOptions public int Loop { get; set; } public string Input { get; set; } = ""; public bool Wasi { get; set; } = true; - public bool Quiet { get; set; } public Dictionary Config { get; set; } = new(); public List AllowedHosts { get; set; } = new List(); public string[] ToCliArguments() { var wasiArg = Wasi ? "--wasi" : ""; - var quietArg = Quiet ? "-q" : ""; var configs = Config.Where(c => !string.IsNullOrEmpty(c.Value)).SelectMany(c => new string[] { "--config", $"{c.Key}={c.Value}" }); var hosts = AllowedHosts.Where(h => !string.IsNullOrEmpty(h)).SelectMany(h => new string[] { "--allow-host", h }); - return ["--loop", Loop.ToString(), "--input", Input, quietArg, wasiArg, .. configs, .. hosts]; + return ["--loop", Loop.ToString(), "--input", Input, wasiArg, .. configs, .. hosts]; } } } \ No newline at end of file