* Add an ExtraAssemblies parameter to the WasmAppBuilder task.
* Pass more assemblies to the pinvoke table generator.
* Improve the wasm sample.
* Move WasmAppBuilder to tools-local.
<Import Project="Directory.Build.targets" />
- <!-- Need to publish this since it references System.Reflection.MetadataLoadContext -->
- <Target Name="BuildWasmAppBuilder" Condition="'$(TargetsBrowser)' == 'true'">
- <MSBuild Projects="$(MonoProjectRoot)msbuild\WasmAppBuilder\WasmAppBuilder.csproj"
- Properties="Configuration=$(Configuration);"
- Targets="Restore;Build;Publish"/>
- </Target>
-
<!-- Ordering matters! Overwriting the Build target. -->
<!-- General targets -->
- <Target Name="Build" DependsOnTargets="BuildMonoRuntimeUnix;BuildMonoRuntimeWindows;BuildWasmAppBuilder;">
+ <Target Name="Build" DependsOnTargets="BuildMonoRuntimeUnix;BuildMonoRuntimeWindows">
<PropertyGroup>
<_MonoRuntimeFilePath Condition="'$(TargetsWindows)' == 'true' and '$(Platform)' == 'x64'">$(MonoObjDir)x64\Bin\$(Configuration)\mono-2.0-sgen.dll</_MonoRuntimeFilePath>
<_MonoRuntimeFilePath Condition="'$(TargetsWindows)' == 'true' and '$(Platform)' == 'x86'">$(MonoObjDir)Win32\Bin\$(Configuration)\mono-2.0-sgen.dll</_MonoRuntimeFilePath>
TOP=../../../../..
+DOTNET_Q_ARGS=--nologo -v:q -consoleloggerparameters:NoSummary
+
all: build
build:
- $(TOP)/.dotnet/dotnet build /p:TargetArchitecture=wasm /p:TargetOS=Browser /p:Configuration=Release
+ $(TOP)/.dotnet/dotnet build $(DOTNET_Q_ARGS) /p:TargetArchitecture=wasm /p:TargetOS=Browser /p:Configuration=Release
clean:
rm -rf bin
run:
- cd bin/Release/publish && ~/.jsvu/v8 --expose_wasm runtime.js -- --run WasmSample.dll
+ cd bin/Release/publish && ~/.jsvu/v8 --expose_wasm runtime.js -- --enable-gc --run WasmSample.dll
+
+runtimepack:
+ EMSDK_PATH=$(TOP)/src/mono/wasm/emsdk $(TOP)/build.sh -c $(MONO_CONFIG) -os Browser -arch wasm -subset Mono+Libs
</PropertyGroup>
<Target Name="RebuildWasmAppBuilder">
- <MSBuild Projects="$(RepoRoot)src\mono\msbuild\WasmAppBuilder\WasmAppBuilder.csproj"
+ <MSBuild Projects="$(RepoRoot)\tools-local\tasks\mobile.tasks\WasmAppBuilder\WasmAppBuilder.csproj"
Properties="Configuration=$(Configuration)" Targets="Restore;Build;Publish" />
</Target>
<UsingTask TaskName="WasmAppBuilder"
- AssemblyFile="$(ArtifactsBinDir)\WasmAppBuilder\$(NetCoreAppCurrent)-$(Configuration)\publish\WasmAppBuilder.dll"/>
+ AssemblyFile="$(ArtifactsBinDir)\WasmAppBuilder\$(Configuration)\$(NetCoreAppCurrent)\publish\WasmAppBuilder.dll"/>
<Target Name="BuildApp" DependsOnTargets="RebuildWasmAppBuilder;Build">
<ItemGroup>
cd $(EMSDK_PATH) && ./emsdk construct_env $(CURDIR)/emsdk_env.sh
MONO_OBJ_DIR=$(OBJDIR)/mono/Browser.wasm.$(CONFIG)
-MONO_LIBS = $(MONO_BIN_DIR)/{libmono-ee-interp.a,libmonosgen-2.0.a,libmono-ilgen.a,libmono-icall-table.a} ${SYS_NATIVE_DIR}/libSystem.Native.a
MONO_INCLUDE_DIR=$(MONO_BIN_DIR)/include/mono-2.0
BUILDS_BIN_DIR=$(MONO_BIN_DIR)/wasm/runtimes
BUILDS_OBJ_DIR=$(MONO_OBJ_DIR)/wasm/runtimes
+MONO_LIBS = \
+ $(MONO_BIN_DIR)/{libmono-ee-interp.a,libmonosgen-2.0.a,libmono-ilgen.a,libmono-icall-table.a} \
+ ${SYS_NATIVE_DIR}/libSystem.Native.a
EMCC_FLAGS=--profiling-funcs -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s BINARYEN=1 -s ALIASING_FUNCTION_POINTERS=0 -s NO_EXIT_RUNTIME=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'addFunction']" -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com -s WASM_OBJECT_FILES=0 -s FORCE_FILESYSTEM=1 -s USE_ZLIB=1
EMCC_DEBUG_FLAGS =-g -Os -s ASSERTIONS=1 -DENABLE_NETCORE=1
$(eval $(call InterpBuildTemplate,release,,$(EMCC_RELEASE_FLAGS),$(MONO_LIBS)))
build:
- EMSDK_PATH=$(PWD)/wasm/emsdk ../../../.dotnet/dotnet build /p:TargetArchitecture=wasm /p:TargetOS=Browser /p:Configuration=Release
+ EMSDK_PATH=$(PWD)/wasm/emsdk ../../../.dotnet/dotnet build /p:TargetArchitecture=wasm /p:TargetOS=Browser /p:Configuration=$(CONFIG)
clean-emsdk:
$(RM) -rf $(EMSDK_LOCAL_PATH)
</PropertyGroup>
<UsingTask TaskName="PInvokeTableGenerator"
- AssemblyFile="$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmAppBuilder', '$(NetCoreAppCurrent)-$(MonoConfiguration)'))publish\WasmAppBuilder.dll"/>
+ AssemblyFile="$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmAppBuilder', '$(MonoConfiguration)', '$(NetCoreAppCurrent)'))publish\WasmAppBuilder.dll"/>
<PropertyGroup>
<WasmPInvokeTablePath>$(MonoObjDir)wasm/pinvoke-table.h</WasmPInvokeTablePath>
<ItemGroup>
<WasmPInvokeModules Include="libSystem.Native"/>
+ <WasmPInvokeModules Include="libSystem.Security.Cryptography.Native.OpenSsl"/>
<WasmPInvokeAssemblies Include="$(MonoArtifactsPath)\System.Private.CoreLib.dll"/>
<WasmPInvokeAssemblies Include="$(ArtifactsBinDir)\System.Runtime\$(NetCoreAppCurrent)-Unix-$(Configuration)\System.Runtime.dll"/>
<WasmPInvokeAssemblies Include="$(ArtifactsBinDir)\System.Console\$(NetCoreAppCurrent)-Unix-$(Configuration)\System.Console.dll"/>
+ <WasmPInvokeAssemblies Include="$(ArtifactsBinDir)\System.Runtime.InteropServices.RuntimeInformation\$(NetCoreAppCurrent)-Unix-$(Configuration)\System.Runtime.InteropServices.RuntimeInformation.dll"/>
+ <WasmPInvokeAssemblies Include="$(ArtifactsBinDir)\System.IO.FileSystem\$(NetCoreAppCurrent)-Unix-$(Configuration)\System.IO.FileSystem.dll"/>
+ <WasmPInvokeAssemblies Include="$(ArtifactsBinDir)\System.IO.FileSystem.DriveInfo\$(NetCoreAppCurrent)-Unix-$(Configuration)\System.IO.FileSystem.DriveInfo.dll"/>
</ItemGroup>
<Target Name="CheckEnv">
</Target>
<Target Name="BuildWasmAppBuilder">
- <MSBuild Projects="$(MonoProjectRoot)mono.proj"
+ <!-- Need to publish this since it references System.Reflection.MetadataLoadContext -->
+ <MSBuild Projects="$(RepoRoot)\tools-local\tasks\mobile.tasks\WasmAppBuilder\WasmAppBuilder.csproj"
Properties="Configuration=$(Configuration)"
- Targets="BuildWasmAppBuilder"/>
+ Targets="Restore;Build;Publish"/>
</Target>
<Target Name="BuildPInvokeTable" DependsOnTargets="CheckEnv;BuildWasmAppBuilder">
public string? MainJS { get; set; }
[Required]
public ITaskItem[]? AssemblySearchPaths { get; set; }
+ public ITaskItem[]? ExtraAssemblies { get; set; }
Dictionary<string, Assembly>? Assemblies;
Resolver? Resolver;
var mainAssembly = mlc.LoadFromAssemblyPath (MainAssembly);
Add (mlc, mainAssembly);
+ if (ExtraAssemblies != null) {
+ foreach (var item in ExtraAssemblies) {
+ var refAssembly = mlc.LoadFromAssemblyPath (item.ItemSpec);
+ Add (mlc, refAssembly);
+ }
+ }
+
// Create app
Directory.CreateDirectory (AppDir!);
Directory.CreateDirectory (Path.Join (AppDir, "managed"));
}
using (var sw = File.CreateText (Path.Join (AppDir, "run-v8.sh"))) {
- sw.WriteLine ("v8 --expose_wasm runtime.js -- --run " + Path.GetFileName (MainAssembly));
+ sw.WriteLine ("v8 --expose_wasm runtime.js -- --enable-gc --run " + Path.GetFileName (MainAssembly) + " $*");
}
return true;
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
+ <TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<OutputType>Library</OutputType>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+ <Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build" Version="$(RefOnlyMicrosoftBuildVersion)" />
Condition="'$(TargetOS)' != 'Android'" />
<ProjectReference Remove="$(MSBuildThisFileDirectory)mobile.tasks\AppleAppBuilder\AppleAppBuilder.csproj"
Condition="'$(TargetOS)' != 'iOS' and '$(TargetOS)' != 'tvOS'" />
+ <ProjectReference Remove="$(MSBuildThisFileDirectory)mobile.tasks\WasmAppBuilder\WasmAppBuilder.csproj"
+ Condition="'$(TargetOS)' != 'Browser'" />
<ProjectReference Remove="$(MSBuildThisFileDirectory)mobile.tasks\AotCompilerTask\MonoAOTCompiler.csproj"
Condition="'$(TargetsMobile)' != 'true'" />
</ItemGroup>