From 64fcc968a1e51a4b5be873f948175fe81b34006c Mon Sep 17 00:00:00 2001 From: Meri Khamoyan Date: Thu, 25 Apr 2024 10:44:44 +0200 Subject: [PATCH 1/4] Include NativeLibary and add test case --- src/mono/browser/build/BrowserWasmApp.targets | 1 + src/mono/wasi/build/WasiApp.targets | 1 + .../Wasm.Build.Tests/NativeLibraryTests.cs | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/mono/browser/build/BrowserWasmApp.targets b/src/mono/browser/build/BrowserWasmApp.targets index 484d3486c5eaa8..b233baacc7e48f 100644 --- a/src/mono/browser/build/BrowserWasmApp.targets +++ b/src/mono/browser/build/BrowserWasmApp.targets @@ -344,6 +344,7 @@ <_WasmExtraJSFile Include="$(_WasmRuntimePackSrcDir)\*.%(JSFileType.Identity)" Kind="%(JSFileType.Kind)" /> <_WasmExtraJSFile Include="$(_WasmRuntimePackSrcDir)\es6\*.%(JSFileType.Identity)" Kind="%(JSFileType.Kind)" /> + <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/mono/wasi/build/WasiApp.targets b/src/mono/wasi/build/WasiApp.targets index c5ecf84ad0c73c..40e03d0aac68ff 100644 --- a/src/mono/wasi/build/WasiApp.targets +++ b/src/mono/wasi/build/WasiApp.targets @@ -327,6 +327,7 @@ <_WasmNativeFileForLinking Include="$(WasiSysRoot)\lib\wasm32-wasi\libc++.a" /> <_WasmNativeFileForLinking Include="$(WasiSysRoot)\lib\wasm32-wasi\libc++abi.a" /> + <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs index c8cca6cd0774e7..d9d04e8df144b3 100644 --- a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs @@ -136,5 +136,36 @@ public static int Main() string cryptoInitMsg = "MONO_WASM: Initializing Crypto WebWorker"; Assert.DoesNotContain(cryptoInitMsg, output); } + + [Theory] + [BuildAndRun(aot: false)] + [BuildAndRun(aot: true)] + public void ProjectWithNativeLibrary(BuildArgs buildArgs, RunHost host, string id) + { + string projectName = $"AppUsingNativeLibrary-a"; + buildArgs = buildArgs with { ProjectName = projectName }; + buildArgs = ExpandBuildArgs(buildArgs, extraItems: ""); + + if (!_buildContext.TryGetBuildFor(buildArgs, out BuildProduct? _)) + { + InitPaths(id); + if (Directory.Exists(_projectDir)) + Directory.Delete(_projectDir, recursive: true); + + Utils.DirectoryCopy(Path.Combine(BuildEnvironment.TestAssetsPath, "AppUsingNativeLib"), _projectDir); + File.Copy(Path.Combine(BuildEnvironment.TestAssetsPath, "native-libs", "native-lib.o"), Path.Combine(_projectDir, "native-lib.o")); + } + + BuildProject(buildArgs, + id: id, + new BuildProjectOptions(DotnetWasmFromRuntimePack: false)); + + string output = RunAndTestWasmApp(buildArgs, buildDir: _projectDir, expectedExitCode: 0, + test: output => {}, + host: host, id: id); + + Assert.Contains("print_line: 100", output); + Assert.Contains("from pinvoke: 142", output); + } } } From 2291cccd78b1f72b21a92c1f6150e22f5e8523e6 Mon Sep 17 00:00:00 2001 From: Meri Khamoyan Date: Thu, 25 Apr 2024 13:30:01 +0200 Subject: [PATCH 2/4] Move to common place --- src/mono/browser/build/BrowserWasmApp.targets | 1 - src/mono/wasi/build/WasiApp.targets | 1 - src/mono/wasm/build/WasmApp.Common.targets | 1 + 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mono/browser/build/BrowserWasmApp.targets b/src/mono/browser/build/BrowserWasmApp.targets index b233baacc7e48f..484d3486c5eaa8 100644 --- a/src/mono/browser/build/BrowserWasmApp.targets +++ b/src/mono/browser/build/BrowserWasmApp.targets @@ -344,7 +344,6 @@ <_WasmExtraJSFile Include="$(_WasmRuntimePackSrcDir)\*.%(JSFileType.Identity)" Kind="%(JSFileType.Kind)" /> <_WasmExtraJSFile Include="$(_WasmRuntimePackSrcDir)\es6\*.%(JSFileType.Identity)" Kind="%(JSFileType.Kind)" /> - <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/mono/wasi/build/WasiApp.targets b/src/mono/wasi/build/WasiApp.targets index 40e03d0aac68ff..c5ecf84ad0c73c 100644 --- a/src/mono/wasi/build/WasiApp.targets +++ b/src/mono/wasi/build/WasiApp.targets @@ -327,7 +327,6 @@ <_WasmNativeFileForLinking Include="$(WasiSysRoot)\lib\wasm32-wasi\libc++.a" /> <_WasmNativeFileForLinking Include="$(WasiSysRoot)\lib\wasm32-wasi\libc++abi.a" /> - <_WasmNativeFileForLinking Include="@(NativeFileReference)" /> diff --git a/src/mono/wasm/build/WasmApp.Common.targets b/src/mono/wasm/build/WasmApp.Common.targets index f06b9a1261fe5e..7bb2011e81663e 100644 --- a/src/mono/wasm/build/WasmApp.Common.targets +++ b/src/mono/wasm/build/WasmApp.Common.targets @@ -249,6 +249,7 @@ + From a6bda7068f1b1f2d71a644ea45538314be813b6e Mon Sep 17 00:00:00 2001 From: Meri Khamoyan Date: Fri, 26 Apr 2024 10:27:39 +0200 Subject: [PATCH 3/4] Ignore missing NativeLibraries --- src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs | 2 +- src/mono/wasm/build/WasmApp.Common.targets | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs index d9d04e8df144b3..555cfa73fad176 100644 --- a/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/NativeLibraryTests.cs @@ -144,7 +144,7 @@ public void ProjectWithNativeLibrary(BuildArgs buildArgs, RunHost host, string i { string projectName = $"AppUsingNativeLibrary-a"; buildArgs = buildArgs with { ProjectName = projectName }; - buildArgs = ExpandBuildArgs(buildArgs, extraItems: ""); + buildArgs = ExpandBuildArgs(buildArgs, extraItems: "\n"); if (!_buildContext.TryGetBuildFor(buildArgs, out BuildProduct? _)) { diff --git a/src/mono/wasm/build/WasmApp.Common.targets b/src/mono/wasm/build/WasmApp.Common.targets index 7bb2011e81663e..02c0e2f011067c 100644 --- a/src/mono/wasm/build/WasmApp.Common.targets +++ b/src/mono/wasm/build/WasmApp.Common.targets @@ -249,7 +249,8 @@ - + <_ExistingNativeLibrary Include="@(NativeLibrary->Exists())" /> + From 5e762f632ef46daa2a622448803c510093cedc49 Mon Sep 17 00:00:00 2001 From: Meri Khamoyan Date: Fri, 26 Apr 2024 11:10:46 +0200 Subject: [PATCH 4/4] Move items copying into target --- src/mono/wasm/build/WasmApp.Common.targets | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mono/wasm/build/WasmApp.Common.targets b/src/mono/wasm/build/WasmApp.Common.targets index 02c0e2f011067c..e3c4ef2b934dc8 100644 --- a/src/mono/wasm/build/WasmApp.Common.targets +++ b/src/mono/wasm/build/WasmApp.Common.targets @@ -249,8 +249,6 @@ - <_ExistingNativeLibrary Include="@(NativeLibrary->Exists())" /> - @@ -297,6 +295,11 @@ <_WasmShouldAOT Condition="'$(_WasmShouldAOT)' == ''">false + + <_ExistingNativeLibrary Include="@(NativeLibrary->Exists())" /> + + +