mirror of
https://github.com/VSadov/Satori.git
synced 2025-06-10 01:50:53 +09:00
[wasm] Use rsp file for emcc default flags, and a props file instead of txt (#52941)
Co-authored-by: Larry Ewing <lewing@microsoft.com> `emcc-default.rsp`: - this replaces `emcc-flags.txt` which was generated at wasm build time as the default set of flags. `Emcc.props`: - this replaces `emcc-version.txt` which was generated at wasm build time, and contained the output of `emcc --version`, eg: `emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.12 (d0e647bf266caad50943e78c9841e05e9c499a5d)` - Instead of this, we now generate `Emcc.props`, which has: `$(RuntimeEmccVersionRaw)` - full version string (`emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.12 (d0e647bf266caad50943e78c9841e05e9c499a5d)`) `$(RuntimeEmccVersion)` - parsed version (`2.0.12`) `$(RuntimeEmccVersionHash)` - parsed hash (`d0e647bf266caad50943e78c9841e05e9c499a5d`) - these might be useful for nugets with native libraries for use with wasm, for example - Also, extracted `WasmApp.Native.targets` from `WasmApp.targets`
This commit is contained in:
parent
41466ffdf3
commit
6722c0b27b
10 changed files with 588 additions and 475 deletions
|
@ -175,8 +175,8 @@
|
||||||
Include="
|
Include="
|
||||||
$(LibrariesNativeArtifactsPath)src\*.c;
|
$(LibrariesNativeArtifactsPath)src\*.c;
|
||||||
$(LibrariesNativeArtifactsPath)src\*.js;
|
$(LibrariesNativeArtifactsPath)src\*.js;
|
||||||
$(LibrariesNativeArtifactsPath)src\emcc-flags.txt;
|
$(LibrariesNativeArtifactsPath)src\emcc-default.rsp;
|
||||||
$(LibrariesNativeArtifactsPath)src\emcc-version.txt;"
|
$(LibrariesNativeArtifactsPath)src\Emcc.props;"
|
||||||
NativeSubDirectory="src"
|
NativeSubDirectory="src"
|
||||||
IsNative="true" />
|
IsNative="true" />
|
||||||
<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'Browser'"
|
<LibrariesRuntimeFiles Condition="'$(TargetOS)' == 'Browser'"
|
||||||
|
|
|
@ -217,8 +217,8 @@
|
||||||
<PlatformManifestFileEntry Include="driver.c" IsNative="true" />
|
<PlatformManifestFileEntry Include="driver.c" IsNative="true" />
|
||||||
<PlatformManifestFileEntry Include="pinvoke.c" IsNative="true" />
|
<PlatformManifestFileEntry Include="pinvoke.c" IsNative="true" />
|
||||||
<PlatformManifestFileEntry Include="pinvoke.h" IsNative="true" />
|
<PlatformManifestFileEntry Include="pinvoke.h" IsNative="true" />
|
||||||
<PlatformManifestFileEntry Include="emcc-flags.txt" IsNative="true" />
|
<PlatformManifestFileEntry Include="emcc-default.rsp" IsNative="true" />
|
||||||
<PlatformManifestFileEntry Include="emcc-version.txt" IsNative="true" />
|
<PlatformManifestFileEntry Include="Emcc.props" IsNative="true" />
|
||||||
<!-- ICU-specific files -->
|
<!-- ICU-specific files -->
|
||||||
<PlatformManifestFileEntry Include="libicudata.a" IsNative="true" />
|
<PlatformManifestFileEntry Include="libicudata.a" IsNative="true" />
|
||||||
<PlatformManifestFileEntry Include="libicui18n.a" IsNative="true" />
|
<PlatformManifestFileEntry Include="libicui18n.a" IsNative="true" />
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
<PackageFile Include="Sdk\AutoImport.props" TargetPath="Sdk" />
|
<PackageFile Include="Sdk\AutoImport.props" TargetPath="Sdk" />
|
||||||
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\WasmApp.props" TargetPath="Sdk" />
|
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\WasmApp.props" TargetPath="Sdk" />
|
||||||
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\WasmApp.targets" TargetPath="Sdk" />
|
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\WasmApp.targets" TargetPath="Sdk" />
|
||||||
|
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\WasmApp.Native.*" TargetPath="Sdk" />
|
||||||
|
<PackageFile Include="$(RepoRoot)\src\mono\wasm\build\EmSdkRepo.Defaults.props" TargetPath="Sdk" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.targets))" />
|
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.targets))" />
|
||||||
|
|
|
@ -23,7 +23,7 @@ run-browser:
|
||||||
echo "The tool dotnet-serve could not be found. Install with: $(DOTNET) tool install --global dotnet-serve"; \
|
echo "The tool dotnet-serve could not be found. Install with: $(DOTNET) tool install --global dotnet-serve"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
else \
|
else \
|
||||||
$(DOTNET) serve -d bin/$(CONFIG)/AppBundle -p 8000; \
|
$(DOTNET) serve -d:bin/$(CONFIG)/AppBundle -p:8000; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
run-console:
|
run-console:
|
||||||
|
|
|
@ -20,10 +20,9 @@ MONO_BIN_DIR?=$(BINDIR)/mono/Browser.wasm.$(CONFIG)
|
||||||
NATIVE_BIN_DIR?=$(BINDIR)/native/net6.0-Browser-$(CONFIG)-wasm
|
NATIVE_BIN_DIR?=$(BINDIR)/native/net6.0-Browser-$(CONFIG)-wasm
|
||||||
ICU_LIBDIR?=
|
ICU_LIBDIR?=
|
||||||
SYSTEM_NATIVE_LIBDIR?=$(TOP)/src/libraries/Native/Unix/System.Native
|
SYSTEM_NATIVE_LIBDIR?=$(TOP)/src/libraries/Native/Unix/System.Native
|
||||||
ENABLE_ES6?=false
|
|
||||||
_MSBUILD_WASM_BUILD_ARGS=/p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG)
|
_MSBUILD_WASM_BUILD_ARGS=/p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG)
|
||||||
ENABLE_METADATA_UPDATE?=false
|
|
||||||
XHARNESS_BROWSER?=chrome
|
XHARNESS_BROWSER?=chrome
|
||||||
|
EMCC_DEFAULT_RSP=$(NATIVE_BIN_DIR)/src/emcc-default.rsp
|
||||||
|
|
||||||
all: build-native icu-files source-files header-files
|
all: build-native icu-files source-files header-files
|
||||||
|
|
||||||
|
@ -63,14 +62,6 @@ MONO_LIBS = \
|
||||||
$(ICU_LIBDIR)/libicuuc.a \
|
$(ICU_LIBDIR)/libicuuc.a \
|
||||||
$(ICU_LIBDIR)/libicui18n.a
|
$(ICU_LIBDIR)/libicui18n.a
|
||||||
|
|
||||||
EMCC_FLAGS=--profiling-funcs -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=1 -s FORCE_FILESYSTEM=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'UTF8ArrayToString', 'addFunction']" -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com -emit-llvm
|
|
||||||
ifneq ($(ENABLE_ES6),false)
|
|
||||||
EMCC_FLAGS+=-s MODULARIZE=1 -s EXPORT_ES6=1
|
|
||||||
endif
|
|
||||||
ifeq ($(ENABLE_METADATA_UPDATE),true)
|
|
||||||
EMCC_FLAGS+=-DENABLE_METADATA_UPDATE=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
EMCC_DEBUG_FLAGS =-g -Os -s ASSERTIONS=1 -DDEBUG=1
|
EMCC_DEBUG_FLAGS =-g -Os -s ASSERTIONS=1 -DDEBUG=1
|
||||||
EMCC_RELEASE_FLAGS=-Oz --llvm-opts 2
|
EMCC_RELEASE_FLAGS=-Oz --llvm-opts 2
|
||||||
|
|
||||||
|
@ -101,28 +92,28 @@ $(NATIVE_BIN_DIR)/include/wasm:
|
||||||
$(BUILDS_OBJ_DIR):
|
$(BUILDS_OBJ_DIR):
|
||||||
mkdir -p $$@
|
mkdir -p $$@
|
||||||
|
|
||||||
$(NATIVE_BIN_DIR)/dotnet.js: $(BUILDS_OBJ_DIR)/driver.o $(BUILDS_OBJ_DIR)/pinvoke.o $(BUILDS_OBJ_DIR)/corebindings.o runtime/library_mono.js runtime/binding_support.js runtime/dotnet_support.js $(SYSTEM_NATIVE_LIBDIR)/pal_random.js $(2) | $(NATIVE_BIN_DIR)
|
$(NATIVE_BIN_DIR)/dotnet.js: $(BUILDS_OBJ_DIR)/driver.o $(BUILDS_OBJ_DIR)/pinvoke.o $(BUILDS_OBJ_DIR)/corebindings.o runtime/library_mono.js runtime/binding_support.js runtime/dotnet_support.js $(SYSTEM_NATIVE_LIBDIR)/pal_random.js $(2) $(EMCC_DEFAULT_RSP) | $(NATIVE_BIN_DIR)
|
||||||
$(EMCC) $(EMCC_FLAGS) $(1) --js-library runtime/library_mono.js --js-library runtime/binding_support.js --js-library runtime/dotnet_support.js --js-library $(SYSTEM_NATIVE_LIBDIR)/pal_random.js $(BUILDS_OBJ_DIR)/driver.o $(BUILDS_OBJ_DIR)/pinvoke.o $(BUILDS_OBJ_DIR)/corebindings.o $(2) -o $(NATIVE_BIN_DIR)/dotnet.js $(3)
|
$(EMCC) @$(EMCC_DEFAULT_RSP) $(1) --js-library runtime/library_mono.js --js-library runtime/binding_support.js --js-library runtime/dotnet_support.js --js-library $(SYSTEM_NATIVE_LIBDIR)/pal_random.js $(BUILDS_OBJ_DIR)/driver.o $(BUILDS_OBJ_DIR)/pinvoke.o $(BUILDS_OBJ_DIR)/corebindings.o $(2) -o $(NATIVE_BIN_DIR)/dotnet.js $(3)
|
||||||
|
|
||||||
$(BUILDS_OBJ_DIR)/pinvoke-table.h: $(PINVOKE_TABLE) | $(BUILDS_OBJ_DIR)
|
$(BUILDS_OBJ_DIR)/pinvoke-table.h: $(PINVOKE_TABLE) | $(BUILDS_OBJ_DIR)
|
||||||
if cmp -s $(PINVOKE_TABLE) $$@ ; then : ; else cp $(PINVOKE_TABLE) $$@ ; fi
|
if cmp -s $(PINVOKE_TABLE) $$@ ; then : ; else cp $(PINVOKE_TABLE) $$@ ; fi
|
||||||
|
|
||||||
$(BUILDS_OBJ_DIR)/driver.o: runtime/driver.c | $(BUILDS_OBJ_DIR)
|
$(BUILDS_OBJ_DIR)/driver.o: runtime/driver.c $(EMCC_DEFAULT_RSP) | $(BUILDS_OBJ_DIR)
|
||||||
$(EMCC) $(EMCC_FLAGS) $(1) -Oz -DCORE_BINDINGS -I$(BUILDS_OBJ_DIR) -I$(MONO_INCLUDE_DIR) runtime/driver.c -c -o $$@
|
$(EMCC) @$(EMCC_DEFAULT_RSP) $(1) -Oz -DCORE_BINDINGS -I$(BUILDS_OBJ_DIR) -I$(MONO_INCLUDE_DIR) runtime/driver.c -c -o $$@
|
||||||
|
|
||||||
$(BUILDS_OBJ_DIR)/pinvoke.o: runtime/pinvoke.c runtime/pinvoke.h $(BUILDS_OBJ_DIR)/pinvoke-table.h | $(BUILDS_OBJ_DIR)
|
$(BUILDS_OBJ_DIR)/pinvoke.o: runtime/pinvoke.c runtime/pinvoke.h $(BUILDS_OBJ_DIR)/pinvoke-table.h $(EMCC_DEFAULT_RSP) | $(BUILDS_OBJ_DIR)
|
||||||
$(EMCC) $(EMCC_FLAGS) $(1) -Oz -DGEN_PINVOKE=1 -I$(BUILDS_OBJ_DIR) runtime/pinvoke.c -c -o $$@
|
$(EMCC) @$(EMCC_DEFAULT_RSP) $(1) -Oz -DGEN_PINVOKE=1 -I$(BUILDS_OBJ_DIR) runtime/pinvoke.c -c -o $$@
|
||||||
|
|
||||||
$(BUILDS_OBJ_DIR)/corebindings.o: runtime/corebindings.c | $(BUILDS_OBJ_DIR)
|
$(BUILDS_OBJ_DIR)/corebindings.o: runtime/corebindings.c $(EMCC_DEFAULT_RSP) | $(BUILDS_OBJ_DIR)
|
||||||
$(EMCC) $(EMCC_FLAGS) $(1) -Oz -I$(MONO_INCLUDE_DIR) runtime/corebindings.c -c -o $$@
|
$(EMCC) @$(EMCC_DEFAULT_RSP) $(1) -Oz -I$(MONO_INCLUDE_DIR) runtime/corebindings.c -c -o $$@
|
||||||
|
|
||||||
$(NATIVE_BIN_DIR)/src/emcc-flags.txt: | $(NATIVE_BIN_DIR)/src Makefile
|
$(EMCC_DEFAULT_RSP): $(CURDIR)/wasm.proj | $(NATIVE_BIN_DIR)/src Makefile
|
||||||
echo "$(call escape_quote,$(EMCC_FLAGS)) $(1)" > $$@
|
$(DOTNET) build $(CURDIR)/wasm.proj /p:Configuration=$(CONFIG) /t:GenerateEmccPropsAndRspFiles
|
||||||
|
|
||||||
$(NATIVE_BIN_DIR)/src/emcc-version.txt: $(EMSDK_PATH)/upstream/.emsdk_version | $(NATIVE_BIN_DIR)/src
|
$(NATIVE_BIN_DIR)/src/Emcc.props: $(EMSDK_PATH)/upstream/.emsdk_version | $(NATIVE_BIN_DIR)/src
|
||||||
$(EMCC) --version | head -1 > $$@
|
$(DOTNET) build $(CURDIR)/wasm.proj /p:Configuration=$(CONFIG) /t:GenerateEmccPropsAndRspFiles
|
||||||
|
|
||||||
build-native: $(NATIVE_BIN_DIR)/dotnet.js $(NATIVE_BIN_DIR)/src/emcc-flags.txt $(NATIVE_BIN_DIR)/src/emcc-version.txt
|
build-native: $(NATIVE_BIN_DIR)/dotnet.js $(NATIVE_BIN_DIR)/src/emcc-default.rsp $(NATIVE_BIN_DIR)/src/Emcc.props
|
||||||
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
445
src/mono/wasm/build/WasmApp.Native.targets
Normal file
445
src/mono/wasm/build/WasmApp.Native.targets
Normal file
|
@ -0,0 +1,445 @@
|
||||||
|
<Project>
|
||||||
|
<!-- not really meant to be used w/o WasmApp.targets -->
|
||||||
|
|
||||||
|
<UsingTask TaskName="PInvokeTableGenerator" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
||||||
|
<UsingTask TaskName="IcallTableGenerator" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_WasmBuildNativeCoreDependsOn>
|
||||||
|
_CheckEmccIsExpectedVersion;
|
||||||
|
_PrepareForWasmBuildNative;
|
||||||
|
_GenerateDriverGenC;
|
||||||
|
_GeneratePInvokeTable;
|
||||||
|
_GenerateICallTable;
|
||||||
|
_WasmCompileNativeFiles;
|
||||||
|
_WasmLinkDotNet;
|
||||||
|
_CompleteWasmBuildNative
|
||||||
|
</_WasmBuildNativeCoreDependsOn>
|
||||||
|
|
||||||
|
<WasmBuildNativeOnlyDependsOn>
|
||||||
|
_PrepareForWasmBuildNativeOnly;
|
||||||
|
_WasmBuildNativeCore;
|
||||||
|
</WasmBuildNativeOnlyDependsOn>
|
||||||
|
|
||||||
|
<_BeforeWasmBuildAppDependsOn>
|
||||||
|
$(_BeforeWasmBuildAppDependsOn);
|
||||||
|
_SetupEmscripten;
|
||||||
|
_SetWasmBuildNativeDefaults
|
||||||
|
</_BeforeWasmBuildAppDependsOn>
|
||||||
|
|
||||||
|
<_ExeExt Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">.exe</_ExeExt>
|
||||||
|
<WasmUseEMSDK_PATH Condition="'$(WasmUseEMSDK_PATH)' == '' and '$(EMSDK_PATH)' != '' and Exists('$(MSBuildThisFileDirectory)WasmApp.InTree.targets')">true</WasmUseEMSDK_PATH>
|
||||||
|
|
||||||
|
<MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$([MSBuild]::NormalizeDirectory($(NuGetPackageRoot), 'microsoft.netcore.app.runtime.mono.browser-wasm', '$(BundledNETCoreAppPackageVersion)'))</MicrosoftNetCoreAppRuntimePackDir>
|
||||||
|
<MicrosoftNetCoreAppRuntimePackRidDir Condition="'$(MicrosoftNetCoreAppRuntimePackRidDir)' == ''">$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackDir), 'runtimes', 'browser-wasm'))</MicrosoftNetCoreAppRuntimePackRidDir>
|
||||||
|
<MicrosoftNetCoreAppRuntimePackRidDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir)))</MicrosoftNetCoreAppRuntimePackRidDir>
|
||||||
|
<MicrosoftNetCoreAppRuntimePackRidNativeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir), 'native'))</MicrosoftNetCoreAppRuntimePackRidNativeDir>
|
||||||
|
|
||||||
|
<_WasmRuntimePackIncludeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'include'))</_WasmRuntimePackIncludeDir>
|
||||||
|
<_WasmRuntimePackSrcDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'src'))</_WasmRuntimePackSrcDir>
|
||||||
|
<_EmccPropsPath>$(_WasmRuntimePackSrcDir)Emcc.props</_EmccPropsPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="$(MSBuildThisFileDirectory)EmSdkRepo.Defaults.props" Condition="'$(WasmUseEMSDK_PATH)' == 'true'" />
|
||||||
|
|
||||||
|
<!-- Always import it. $(WasmBuildNative) can change when running the targets, eg. when native
|
||||||
|
references are present but the default value for WasmBuildNative was false.
|
||||||
|
So, at evaluation time, it will be false, and we'll end up skipping this import. Instead, always
|
||||||
|
import it. -->
|
||||||
|
<Import Project="$(_EmccPropsPath)" />
|
||||||
|
|
||||||
|
<!-- "public" target meant for use outside the regular wasm app generation process FIXME: rename please! -->
|
||||||
|
<Target Name="WasmBuildNativeOnly" DependsOnTargets="$(WasmBuildNativeOnlyDependsOn)" Condition="'$(WasmBuildNative)' == 'true'" />
|
||||||
|
|
||||||
|
<Target Name="_PrepareForWasmBuildNativeOnly">
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
||||||
|
<_WasmAssembliesInternal Include="@(WasmAssembliesToBundle->Distinct())" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
|
||||||
|
<Target Name="_SetupEmscripten">
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenSdkToolsPath)' == '' or !Exists('$(EmscriptenSdkToolsPath)'))">%24(EmscriptenSdkToolsPath)=$(EmscriptenSdkToolsPath) </_EMSDKMissingPaths>
|
||||||
|
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenNodeToolsPath)' == '' or !Exists('$(EmscriptenNodeToolsPath)'))">%24(EmscriptenNodeToolsPath)=$(EmscriptenNodeToolsPath) </_EMSDKMissingPaths>
|
||||||
|
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenUpstreamBinPath)' == '' or !Exists('$(EmscriptenUpstreamBinPath)'))">%24(EmscriptenUpstreamBinPath)=$(EmscriptenUpstreamBinPath) </_EMSDKMissingPaths>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EMSDKMissingErrorMessage Condition="'$(EMSDK_PATH)' == '' and '$(EmscriptenSdkToolsPath)' == ''">Could not find emscripten sdk. Either set %24(EMSDK_PATH), or use workloads to get the sdk.</_EMSDKMissingErrorMessage>
|
||||||
|
|
||||||
|
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' != 'true' and '$(_EMSDKMissingPaths)' != ''">Emscripten from the workload is missing some paths: $(_EMSDKMissingPaths).</_EMSDKMissingErrorMessage>
|
||||||
|
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' == 'true' and !Exists($(EMSDK_PATH))">Could not find Emscripten sdk at %24(EMSDK_PATH)=$(EMSDK_PATH) .</_EMSDKMissingErrorMessage>
|
||||||
|
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' == 'true' and '$(_EMSDKMissingPaths)' != ''">Specified Emscripten sdk at %24(EMSDK_PATH)=$(EMSDK_PATH) is missing some paths: $(_EMSDKMissingPaths).</_EMSDKMissingErrorMessage>
|
||||||
|
|
||||||
|
<_IsEMSDKMissing Condition="'$(_EMSDKMissingErrorMessage)' != ''">true</_IsEMSDKMissing>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<EmscriptenSdkToolsPath Condition="'$(EmscriptenSdkToolsPath)' != ''" >$([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath)))</EmscriptenSdkToolsPath>
|
||||||
|
<EmscriptenNodeToolsPath Condition="'$(EmscriptenNodeToolsPath)' != ''" >$([MSBuild]::NormalizeDirectory($(EmscriptenNodeToolsPath)))</EmscriptenNodeToolsPath>
|
||||||
|
<EmscriptenUpstreamBinPath Condition="'$(EmscriptenUpstreamBinPath)' != ''">$([MSBuild]::NormalizeDirectory($(EmscriptenUpstreamBinPath)))</EmscriptenUpstreamBinPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Environment variables required for running emsdk commands like `emcc` -->
|
||||||
|
<ItemGroup Condition="'$(EmscriptenSdkToolsPath)' != ''">
|
||||||
|
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_LLVM_ROOT=$(EmscriptenSdkToolsPath)bin" />
|
||||||
|
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_BINARYEN_ROOT=$(EmscriptenSdkToolsPath)" />
|
||||||
|
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_NODE_JS=$([MSBuild]::NormalizePath($(EmscriptenNodeToolsPath), 'bin', 'node$(_ExeExt)'))" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_EmscriptenPrependPATHTrimmed Include="$([MSBuild]::ValueOrDefault('%(EmscriptenPrependPATH.Identity)\', '').TrimEnd('\/'))" />
|
||||||
|
<EmscriptenPrependPATH Remove="@(EmscriptenPrependPATH)" />
|
||||||
|
<EmscriptenPrependPATH Include="@(_EmscriptenPrependPATHTrimmed)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<!-- semicolon is a msbuild property separator. It is also the path separator on windows.
|
||||||
|
So, we need to escape it here, so the paths don't get split up when converting
|
||||||
|
to string[] for passing to Exec task -->
|
||||||
|
<_PathSeparator Condition="'$(OS)' == 'Windows_NT'">%3B</_PathSeparator>
|
||||||
|
<_PathSeparator Condition="'$(OS)' != 'Windows_NT'">:</_PathSeparator>
|
||||||
|
|
||||||
|
<_EmscriptenPrependPATHProperty>@(EmscriptenPrependPATH -> '%(Identity)', '$(_PathSeparator)')</_EmscriptenPrependPATHProperty>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmscriptenEnvVars Include="PATH=$(_EmscriptenPrependPATHProperty)$(_PathSeparator)$([MSBuild]::Escape($(PATH)))" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_SetWasmBuildNativeDefaults">
|
||||||
|
<!-- if already set, maybe by a user projects, then a missing emsdk is an error -->
|
||||||
|
<Error Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
||||||
|
|
||||||
|
<Error Condition="'$(RunAOTCompilation)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for AOT'ing assemblies." />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<WasmBuildNative Condition="'$(RunAOTCompilation)' == 'true'">true</WasmBuildNative>
|
||||||
|
<WasmBuildNative Condition="'$(WasmBuildNative)' == '' and '$(PublishTrimmed)' != 'true'">false</WasmBuildNative>
|
||||||
|
<WasmBuildNative Condition="'$(WasmBuildNative)' == '' and '$(Configuration)' == 'Release'">true</WasmBuildNative>
|
||||||
|
<WasmBuildNative Condition="'$(WasmBuildNative)' == ''">false</WasmBuildNative>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- If we want to default to true, and sdk is missing, then just warn, and set it to false -->
|
||||||
|
<Warning Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<WasmBuildNative Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'">false</WasmBuildNative>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_WasmBuildNativeCore" DependsOnTargets="$(_WasmBuildNativeCoreDependsOn)" Condition="'$(WasmBuildNative)' == 'true'" />
|
||||||
|
|
||||||
|
<Target Name="_PrepareForWasmBuildNative">
|
||||||
|
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EmccDefaultFlagsRsp>$([MSBuild]::NormalizePath($(_WasmRuntimePackSrcDir), 'emcc-default.rsp'))</_EmccDefaultFlagsRsp>
|
||||||
|
<WasmNativeStrip Condition="'$(WasmNativeStrip)' == ''">true</WasmNativeStrip>
|
||||||
|
<WasmNativeDebugSymbols Condition="'$(WasmNativeDebugSymbols)' == ''">true</WasmNativeDebugSymbols>
|
||||||
|
<WasmLinkIcalls Condition="'$(WasmLinkIcalls)' == ''">$(WasmBuildNative)</WasmLinkIcalls>
|
||||||
|
<_WasmICallTablePath>$(_WasmIntermediateOutputPath)icall-table.h</_WasmICallTablePath>
|
||||||
|
<_WasmRuntimeICallTablePath>$(_WasmIntermediateOutputPath)runtime-icall-table.h</_WasmRuntimeICallTablePath>
|
||||||
|
<_WasmPInvokeTablePath>$(_WasmIntermediateOutputPath)pinvoke-table.h</_WasmPInvokeTablePath>
|
||||||
|
|
||||||
|
<_EmccOptimizationFlagDefault Condition="'$(_WasmDevel)' == 'true'">-O0</_EmccOptimizationFlagDefault>
|
||||||
|
<_EmccOptimizationFlagDefault Condition="'$(_EmccOptimizationFlagDefault)' == '' and '$(OS)' != 'Windows_NT' and '$(Configuration)' == 'Debug'">-Os</_EmccOptimizationFlagDefault>
|
||||||
|
<_EmccOptimizationFlagDefault Condition="'$(_EmccOptimizationFlagDefault)' == '' and '$(Configuration)' != 'Debug'">-Oz</_EmccOptimizationFlagDefault>
|
||||||
|
<_EmccOptimizationFlagDefault Condition="'$(_EmccOptimizationFlagDefault)' == ''">-Oz</_EmccOptimizationFlagDefault>
|
||||||
|
|
||||||
|
<EmccCompileOptimizationFlag Condition="'$(EmccCompileOptimizationFlag)' == ''">$(_EmccOptimizationFlagDefault)</EmccCompileOptimizationFlag>
|
||||||
|
<EmccLinkOptimizationFlag Condition="'$(EmccLinkOptimizationFlag)' == ''" >$(_EmccOptimizationFlagDefault)</EmccLinkOptimizationFlag>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_EmccCommonFlags Include="$(_DefaultEmccFlags)" />
|
||||||
|
<_EmccCommonFlags Include="$(EmccFlags)" />
|
||||||
|
<_EmccCommonFlags Include="-s DISABLE_EXCEPTION_CATCHING=0" />
|
||||||
|
<_EmccCommonFlags Include="-g" Condition="'$(WasmNativeStrip)' == 'false'" />
|
||||||
|
<_EmccCommonFlags Include="-DENABLE_AOT=1" Condition="'$(RunAOTCompilation)' == 'true'" />
|
||||||
|
<_EmccCommonFlags Include="-DDRIVER_GEN=1" Condition="'$(RunAOTCompilation)' == 'true'" />
|
||||||
|
<_EmccCommonFlags Include="-DINVARIANT_GLOBALIZATION=1" Condition="'$(InvariantGlobalization)' == 'true'" />
|
||||||
|
<_EmccCommonFlags Include="-DLINK_ICALLS=1" Condition="'$(WasmLinkIcalls)' == 'true'" />
|
||||||
|
<_EmccCommonFlags Include="-v" Condition="'$(EmccVerbose)' != 'false'" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_WasmRuntimePackIncludeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'include'))</_WasmRuntimePackIncludeDir>
|
||||||
|
<_WasmRuntimePackSrcDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'src'))</_WasmRuntimePackSrcDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmObjectsToBuild Include="$(_WasmRuntimePackSrcDir)\*.c" />
|
||||||
|
<_WasmObjectsToBuild OutputPath="$(_WasmIntermediateOutputPath)%(FileName).o" />
|
||||||
|
|
||||||
|
<_DotnetJSSrcFile Include="$(_WasmRuntimePackSrcDir)\*.js" />
|
||||||
|
<_WasmPInvokeModules Include="%(_WasmNativeFileForLinking.FileName)" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_GeneratePInvokeTable">
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmPInvokeModules Include="libSystem.Native" />
|
||||||
|
<_WasmPInvokeModules Include="libSystem.IO.Compression.Native" />
|
||||||
|
<_WasmPInvokeModules Include="libSystem.Globalization.Native" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PInvokeTableGenerator
|
||||||
|
Modules="@(_WasmPInvokeModules)"
|
||||||
|
Assemblies="@(_WasmAssembliesInternal)"
|
||||||
|
OutputPath="$(_WasmPInvokeTablePath)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_GenerateICallTable" Condition="'$(WasmLinkIcalls)' == 'true'">
|
||||||
|
<Error Condition="'$(MonoAotCrossCompilerPath)' == '' or !Exists('$(MonoAotCrossCompilerPath)')"
|
||||||
|
Text="Could not find AOT cross compiler at %24(MonoAotCrossCompilerPath)=$(MonoAotCrossCompilerPath)" />
|
||||||
|
|
||||||
|
<Exec Command='"$(MonoAotCrossCompilerPath)" --print-icall-table > "$(_WasmRuntimeICallTablePath)"' />
|
||||||
|
<IcallTableGenerator
|
||||||
|
RuntimeIcallTableFile="$(_WasmRuntimeICallTablePath)"
|
||||||
|
Assemblies="@(_WasmAssembliesInternal)"
|
||||||
|
OutputPath="$(_WasmICallTablePath)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_WasmCompileNativeFiles">
|
||||||
|
<ItemGroup>
|
||||||
|
<_EmccIncludePaths Include="$(_WasmIntermediateOutputPath.TrimEnd('\/'))" />
|
||||||
|
<_EmccIncludePaths Include="$(_WasmRuntimePackIncludeDir)mono-2.0" />
|
||||||
|
<_EmccIncludePaths Include="$(_WasmRuntimePackIncludeDir)wasm" />
|
||||||
|
|
||||||
|
<!-- Adding optimization flag at the top, so it gets precedence -->
|
||||||
|
<_EmccCFlags Include="$(EmccCompileOptimizationFlag)" />
|
||||||
|
<_EmccCFlags Include="@(_EmccCommonFlags)" />
|
||||||
|
<_EmccCFlags Include="-DCORE_BINDINGS" />
|
||||||
|
<_EmccCFlags Include="-DGEN_PINVOKE=1" />
|
||||||
|
<_EmccCFlags Include=""-I%(_EmccIncludePaths.Identity)"" />
|
||||||
|
<_EmccCFlags Include="-g" Condition="'$(WasmNativeDebugSymbols)' == 'true'" />
|
||||||
|
<_EmccCFlags Include="-s EXPORTED_FUNCTIONS='[@(_ExportedFunctions->'"%(Identity)"', ',')]'" Condition="@(_ExportedFunctions->Count()) > 0" />
|
||||||
|
|
||||||
|
<_EmccCFlags Include="$(EmccExtraCFlags)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EmccCompileRsp>$(_WasmIntermediateOutputPath)emcc-compile.rsp</_EmccCompileRsp>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<WriteLinesToFile Lines="@(_EmccCFlags)" File="$(_EmccCompileRsp)" Overwrite="true" WriteOnlyWhenDifferent="true" />
|
||||||
|
|
||||||
|
<Message Text="Compiling native assets with emcc. This may take a while ..." Importance="High" />
|
||||||
|
<Exec Command='emcc "@$(_EmccDefaultFlagsRsp)" "@$(_EmccCompileRsp)" "%(_WasmObjectsToBuild.Identity)" -c -o "%(_WasmObjectsToBuild.OutputPath)"' EnvironmentVariables="@(EmscriptenEnvVars)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_WasmLinkDotNet">
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmRuntimePackNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)\*.a" />
|
||||||
|
<_WasmObjects Include="@(_WasmRuntimePackNativeLibs)" />
|
||||||
|
<_WasmObjects Include="@(_WasmObjectsToBuild->'%(OutputPath)')" />
|
||||||
|
|
||||||
|
<!-- Adding optimization flag at the top, so it gets precedence -->
|
||||||
|
<_EmccLDFlags Include="$(EmccLinkOptimizationFlag)" />
|
||||||
|
<_EmccLDFlags Include="@(_EmccCommonFlags)" />
|
||||||
|
<_EmccLDFlags Include="-s TOTAL_MEMORY=536870912" />
|
||||||
|
<_EmccLDFlags Include="$(EmccExtraLDFlags)" />
|
||||||
|
|
||||||
|
<_EmccLDFlags Include="--js-library "%(_DotnetJSSrcFile.Identity)"" />
|
||||||
|
<_EmccLDFlags Include="--js-library "%(_WasmExtraJSFile.Identity)"" Condition="'%(_WasmExtraJSFile.Kind)' == 'js-library'" />
|
||||||
|
|
||||||
|
<_EmccLDFlags Include="--pre-js "%(_WasmExtraJSFile.Identity)"" Condition="'%(_WasmExtraJSFile.Kind)' == 'pre-js'" />
|
||||||
|
<_EmccLDFlags Include="--post-js "%(_WasmExtraJSFile.Identity)"" Condition="'%(_WasmExtraJSFile.Kind)' == 'post-js'" />
|
||||||
|
|
||||||
|
<_EmccLDFlags Include=""%(_WasmNativeFileForLinking.Identity)"" />
|
||||||
|
<_EmccLDFlags Include=""%(_WasmObjects.Identity)"" />
|
||||||
|
<_EmccLDFlags Include="-o "$(_WasmIntermediateOutputPath)dotnet.js"" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EmccLinkRsp>$(_WasmIntermediateOutputPath)emcc-link.rsp</_EmccLinkRsp>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<WriteLinesToFile Lines="@(_EmccLDFlags)" File="$(_EmccLinkRsp)" Overwrite="true" WriteOnlyWhenDifferent="true" />
|
||||||
|
<Message Text="Running emcc with @(_EmccLDFlags->'%(Identity)', ' ')" Importance="Low" />
|
||||||
|
<Exec Command='emcc "@$(_EmccDefaultFlagsRsp)" "@$(_EmccLinkRsp)"' EnvironmentVariables="@(EmscriptenEnvVars)" />
|
||||||
|
|
||||||
|
<Exec Command='wasm-opt$(_ExeExt) --strip-dwarf "$(_WasmIntermediateOutputPath)dotnet.wasm" -o "$(_WasmIntermediateOutputPath)dotnet.wasm"' Condition="'$(WasmNativeStrip)' == 'true'" IgnoreStandardErrorWarningFormat="true" EnvironmentVariables="@(EmscriptenEnvVars)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_CompleteWasmBuildNative">
|
||||||
|
<ItemGroup>
|
||||||
|
<WasmNativeAsset Include="$(_WasmIntermediateOutputPath)dotnet.wasm" />
|
||||||
|
<WasmNativeAsset Include="$(_WasmIntermediateOutputPath)dotnet.js" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_GenerateDriverGenC" Condition="'$(RunAOTCompilation)' != 'true' and '$(WasmProfilers)' != ''">
|
||||||
|
<PropertyGroup>
|
||||||
|
<EmccFlags>$(EmccFlags) -DDRIVER_GEN=1</EmccFlags>
|
||||||
|
<InitAotProfilerCmd>
|
||||||
|
void mono_profiler_init_aot (const char *desc)%3B
|
||||||
|
EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_profiler_init_aot (desc)%3B }
|
||||||
|
</InitAotProfilerCmd>
|
||||||
|
|
||||||
|
<_DriverGenCPath>$(_WasmIntermediateOutputPath)driver-gen.c</_DriverGenCPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Message Text="Generating $(_DriverGenCPath)" Importance="Low" />
|
||||||
|
<WriteLinesToFile File="$(_DriverGenCPath)" Overwrite="true" Lines="$(InitAotProfilerCmd)" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<FileWrites Include="$(_DriverGenCPath)" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_CheckEmccIsExpectedVersion">
|
||||||
|
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
||||||
|
|
||||||
|
<Error Condition="'$(RuntimeEmccVersionRaw)' == ''"
|
||||||
|
Text="%24(RuntimeEmccVersionRaw) is not set. '$(_EmccPropsPath)' should have set that."/>
|
||||||
|
|
||||||
|
<Exec Command="emcc --version" WorkingDirectory="$(_WasmIntermediateOutputPath)" EnvironmentVariables="@(EmscriptenEnvVars)" ConsoleToMsBuild="true" StandardOutputImportance="Low">
|
||||||
|
<Output TaskParameter="ConsoleOutput" ItemName="_VersionLines" />
|
||||||
|
</Exec>
|
||||||
|
|
||||||
|
<!-- we want to get the first line from the output, which has the version.
|
||||||
|
Rest of the lines are the license -->
|
||||||
|
<ItemGroup>
|
||||||
|
<_ReversedVersionLines Include="@(_VersionLines->Reverse())" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ActualEmccVersionRaw>%(_ReversedVersionLines.Identity)</ActualEmccVersionRaw>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Error Condition="'$(RuntimeEmccVersionRaw)' != '$(ActualEmccVersionRaw)'" Text="Emscripten version mismatch, expected '$(RuntimeEmccVersionRaw)', got '$(ActualEmccVersionRaw)'"/>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
*******************************
|
||||||
|
************ AOT **************
|
||||||
|
*******************************
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Target Name="_WasmAotCompileApp" Condition="'$(RunAOTCompilation)' == 'true'">
|
||||||
|
<Error Condition="'@(_WasmAssembliesInternal)' == ''" Text="Item _WasmAssembliesInternal is empty" />
|
||||||
|
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
||||||
|
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for AOT'ing assemblies." />
|
||||||
|
<Error Condition="'$(MonoAotCrossCompilerPath)' == '' or !Exists('$(MonoAotCrossCompilerPath)')"
|
||||||
|
Text="Could not find AOT cross compiler at %24(MonoAotCrossCompilerPath)=$(MonoAotCrossCompilerPath)" />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<MonoAOTCompilerDefaultAotArguments Include="no-opt" />
|
||||||
|
<MonoAOTCompilerDefaultAotArguments Include="static" />
|
||||||
|
<MonoAOTCompilerDefaultAotArguments Include="direct-icalls" />
|
||||||
|
<MonoAOTCompilerDefaultAotArguments Include="deterministic" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<_AotInputAssemblies Include="@(_WasmAssembliesInternal)" Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'">
|
||||||
|
<AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
|
||||||
|
<ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
|
||||||
|
</_AotInputAssemblies>
|
||||||
|
<_AOT_InternalForceInterpretAssemblies Include="@(_WasmAssembliesInternal->WithMetadataValue('_InternalForceInterpret', 'true'))" />
|
||||||
|
|
||||||
|
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
||||||
|
|
||||||
|
<_WasmAOTSearchPaths Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)" />
|
||||||
|
<_WasmAOTSearchPaths Include="$(MicrosoftNetCoreAppRuntimePackRidDir)\lib\net6.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<!--<AOTMode Condition="'$(AOTMode)' == '' and '$(AOTProfilePath)' != ''">LLVMOnlyInterp</AOTMode>-->
|
||||||
|
<AOTMode Condition="'$(AOTMode)' == ''">LLVMOnlyInterp</AOTMode>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Error Condition="'$(AOTMode)' == 'llvmonly' and @(_AOT_InternalForceInterpretAssemblies->Count()) > 0"
|
||||||
|
Text="Builing in AOTMode=LLVMonly, but found some assemblies marked as _InternalForceInterpret: @(_AOT_InternalForceInterpretAssemblies)" />
|
||||||
|
|
||||||
|
<Message Text="AOT'ing @(_AotInputAssemblies->Count()) assemblies" Importance="High" />
|
||||||
|
|
||||||
|
<!-- Dedup -->
|
||||||
|
<PropertyGroup Condition="'$(WasmDedup)' == 'true'">
|
||||||
|
<_WasmDedupAssembly>$(_WasmIntermediateOutputPath)\aot-instances.dll</_WasmDedupAssembly>
|
||||||
|
</PropertyGroup>
|
||||||
|
<WriteLinesToFile Condition="'$(WasmDedup)' == 'true'" File="$(_WasmIntermediateOutputPath)/aot-instances.cs" Overwrite="true" Lines="" />
|
||||||
|
<Csc
|
||||||
|
Condition="'$(WasmDedup)' == 'true'"
|
||||||
|
Sources="$(_WasmIntermediateOutputPath)\aot-instances.cs"
|
||||||
|
OutputAssembly="$(_WasmDedupAssembly)"
|
||||||
|
TargetType="library"
|
||||||
|
Deterministic="true"
|
||||||
|
References="@(ReferencePath)"
|
||||||
|
ToolExe="$(CscToolExe)"
|
||||||
|
ToolPath="$(CscToolPath)" />
|
||||||
|
<ItemGroup Condition="'$(WasmDedup)' == 'true'">
|
||||||
|
<_AotInputAssemblies Include="$(_WasmDedupAssembly)">
|
||||||
|
<AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
|
||||||
|
<ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
|
||||||
|
</_AotInputAssemblies>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<MonoAOTCompiler
|
||||||
|
CompilerBinaryPath="$(MonoAotCrossCompilerPath)"
|
||||||
|
OutputDir="$(_WasmIntermediateOutputPath)"
|
||||||
|
Mode="$(AOTMode)"
|
||||||
|
OutputType="AsmOnly"
|
||||||
|
Assemblies="@(_AotInputAssemblies)"
|
||||||
|
AdditionalAssemblySearchPaths="@(_WasmAOTSearchPaths)"
|
||||||
|
UseAotDataFile="false"
|
||||||
|
AOTProfilePath="$(AOTProfilePath)"
|
||||||
|
Profilers="$(WasmProfilers)"
|
||||||
|
AotModulesTablePath="$(_WasmIntermediateOutputPath)driver-gen.c"
|
||||||
|
UseLLVM="true"
|
||||||
|
DisableParallelAot="true"
|
||||||
|
DedupAssembly="$(_WasmDedupAssembly)"
|
||||||
|
LLVMDebug="dwarfdebug"
|
||||||
|
LLVMPath="$(EmscriptenUpstreamBinPath)" >
|
||||||
|
|
||||||
|
<Output TaskParameter="CompiledAssemblies" ItemName="_WasmAssembliesInternal" />
|
||||||
|
<Output TaskParameter="FileWrites" ItemName="FileWrites" />
|
||||||
|
</MonoAOTCompiler>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- Add back the interpreter-only assemblies -->
|
||||||
|
<_WasmAssembliesInternal Include="@(_AOT_InternalForceInterpretAssemblies)" />
|
||||||
|
|
||||||
|
<_AOTAssemblies Include="@(_WasmAssembliesInternal)" Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'" />
|
||||||
|
<_BitcodeFile Include="%(_WasmAssembliesInternal.LlvmBitcodeFile)" />
|
||||||
|
|
||||||
|
<_WasmNativeFileForLinking Include="@(_BitcodeFile)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Error Condition="@(_BitcodeFile->Count()) != @(_AOTAssemblies->Count())"
|
||||||
|
Text="Bug: Number of aot assemblies doesn't match the number of generated bitcode files. BitcodeFiles: @(_BitcodeFile->Count()) vs Assemblies: @(_AOTAssemblies->Count())" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!-- '$(ArchiveTests)' != 'true' is to skip on CI for now -->
|
||||||
|
<Target Name="_WasmStripAOTAssemblies" Condition="'$(RunAOTCompilation)' == 'true' and '$(WasmStripAOTAssemblies)' == 'true' and '$(AOTMode)' != 'LLVMOnlyInterp' and '$(ArchiveTests)' != 'true'">
|
||||||
|
<PropertyGroup>
|
||||||
|
<_WasmStrippedAssembliesPath>$([MSBuild]::NormalizeDirectory($(_WasmIntermediateOutputPath), 'stripped-assemblies'))</_WasmStrippedAssembliesPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmStrippedAssemblies
|
||||||
|
Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'"
|
||||||
|
Include="@(_WasmAssembliesInternal->'$(_WasmStrippedAssembliesPath)%(FileName)%(Extension)')"
|
||||||
|
OriginalPath="%(_WasmAssembliesInternal.Identity)" />
|
||||||
|
<_WasmInterpOnlyAssembly Include="@(_WasmAssembliesInternal->WithMetadataValue('_InternalForceInterpret', 'true'))" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Run mono-cil-strip on the assemblies -->
|
||||||
|
<!-- TODO: replace this with a linker task -->
|
||||||
|
<MakeDir Directories="$(_WasmStrippedAssembliesPath)" />
|
||||||
|
<Exec Command='mono-cil-strip -q "%(_WasmStrippedAssemblies.OriginalPath)" "%(_WasmStrippedAssemblies.Identity)"' />
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
||||||
|
<_WasmAssembliesInternal Include="@(_WasmStrippedAssemblies);@(_WasmInterpOnlyAssembly)" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -10,7 +10,7 @@
|
||||||
_WasmResolveReferences;
|
_WasmResolveReferences;
|
||||||
_WasmAotCompileApp;
|
_WasmAotCompileApp;
|
||||||
_WasmStripAOTAssemblies;
|
_WasmStripAOTAssemblies;
|
||||||
_WasmBuildNative;
|
_WasmBuildNativeCore;
|
||||||
_WasmGenerateAppBundle;
|
_WasmGenerateAppBundle;
|
||||||
_AfterWasmBuildApp
|
_AfterWasmBuildApp
|
||||||
</WasmBuildAppDependsOn>
|
</WasmBuildAppDependsOn>
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
<Project>
|
<Project>
|
||||||
<UsingTask TaskName="WasmAppBuilder" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
<UsingTask TaskName="WasmAppBuilder" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
||||||
<UsingTask TaskName="WasmLoadAssembliesAndReferences" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
<UsingTask TaskName="WasmLoadAssembliesAndReferences" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
||||||
<UsingTask TaskName="PInvokeTableGenerator" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
|
||||||
<UsingTask TaskName="IcallTableGenerator" AssemblyFile="$(WasmAppBuilderTasksAssemblyPath)" />
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Required public items/properties:
|
Required public items/properties:
|
||||||
|
@ -78,181 +76,38 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<WasmStripAOTAssemblies>false</WasmStripAOTAssemblies>
|
|
||||||
<WasmDedup Condition="'$(WasmDedup)' == ''">false</WasmDedup>
|
<WasmDedup Condition="'$(WasmDedup)' == ''">false</WasmDedup>
|
||||||
|
|
||||||
<!--<WasmStripAOTAssemblies Condition="'$(AOTMode)' == 'LLVMOnlyInterp'">false</WasmStripAOTAssemblies>-->
|
<!--<WasmStripAOTAssemblies Condition="'$(AOTMode)' == 'LLVMOnlyInterp'">false</WasmStripAOTAssemblies>-->
|
||||||
<!--<WasmStripAOTAssemblies Condition="'$(WasmStripAOTAssemblies)' == ''">$(RunAOTCompilation)</WasmStripAOTAssemblies>-->
|
<!--<WasmStripAOTAssemblies Condition="'$(WasmStripAOTAssemblies)' == ''">$(RunAOTCompilation)</WasmStripAOTAssemblies>-->
|
||||||
<_ExeExt Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">.exe</_ExeExt>
|
<WasmStripAOTAssemblies>false</WasmStripAOTAssemblies>
|
||||||
<WasmUseEMSDK_PATH Condition="'$(WasmUseEMSDK_PATH)' == '' and '$(EMSDK_PATH)' != '' and Exists('$(MSBuildThisFileDirectory)WasmApp.InTree.targets')">true</WasmUseEMSDK_PATH>
|
|
||||||
|
|
||||||
<_WasmNativeBuildDependsOn>
|
<MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$([MSBuild]::NormalizeDirectory($(NuGetPackageRoot), 'microsoft.netcore.app.runtime.mono.browser-wasm', '$(BundledNETCoreAppPackageVersion)'))</MicrosoftNetCoreAppRuntimePackDir>
|
||||||
_CheckEmccIsExpectedVersion;
|
<MicrosoftNetCoreAppRuntimePackRidDir Condition="'$(MicrosoftNetCoreAppRuntimePackRidDir)' == ''">$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackDir), 'runtimes', 'browser-wasm'))</MicrosoftNetCoreAppRuntimePackRidDir>
|
||||||
_PrepareForWasmBuildNative;
|
<MicrosoftNetCoreAppRuntimePackRidDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir)))</MicrosoftNetCoreAppRuntimePackRidDir>
|
||||||
_GenerateDriverGenC;
|
<MicrosoftNetCoreAppRuntimePackRidNativeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir), 'native'))</MicrosoftNetCoreAppRuntimePackRidNativeDir>
|
||||||
_GeneratePInvokeTable;
|
|
||||||
_GenerateICallTable;
|
<_BeforeWasmBuildAppDependsOn />
|
||||||
_WasmCompileNativeFiles;
|
|
||||||
_WasmLinkDotNet;
|
|
||||||
_CompleteWasmBuildNative
|
|
||||||
</_WasmNativeBuildDependsOn>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Import Project="$(MSBuildThisFileDirectory)EmSdkRepo.Defaults.props" Condition="'$(WasmUseEMSDK_PATH)' == 'true'" />
|
<Import Project="$(MSBuildThisFileDirectory)WasmApp.Native.targets" />
|
||||||
|
|
||||||
<!-- Having this separate target allows users to cleanly add After/BeforeTargets for this -->
|
<!-- Having this separate target allows users to cleanly add After/BeforeTargets for this -->
|
||||||
<Target Name="WasmBuildApp" AfterTargets="$(WasmBuildAppAfterThisTarget)" />
|
<Target Name="WasmBuildApp" AfterTargets="$(WasmBuildAppAfterThisTarget)" />
|
||||||
|
|
||||||
<Target Name="_WasmAotCompileApp" Condition="'$(RunAOTCompilation)' == 'true'">
|
<Target Name="_WasmCoreBuild" BeforeTargets="WasmBuildApp" DependsOnTargets="$(WasmBuildAppDependsOn)" />
|
||||||
<Error Condition="'@(_WasmAssembliesInternal)' == ''" Text="Item _WasmAssembliesInternal is empty" />
|
|
||||||
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for AOT'ing assemblies." />
|
|
||||||
<Error Condition="'$(MonoAotCrossCompilerPath)' == '' or !Exists('$(MonoAotCrossCompilerPath)')"
|
|
||||||
Text="Could not find AOT cross compiler at %24(MonoAotCrossCompilerPath)=$(MonoAotCrossCompilerPath)" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<MonoAOTCompilerDefaultAotArguments Include="no-opt" />
|
|
||||||
<MonoAOTCompilerDefaultAotArguments Include="static" />
|
|
||||||
<MonoAOTCompilerDefaultAotArguments Include="direct-icalls" />
|
|
||||||
<MonoAOTCompilerDefaultAotArguments Include="deterministic" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<_AotInputAssemblies Include="@(_WasmAssembliesInternal)" Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'">
|
|
||||||
<AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
|
|
||||||
<ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
|
|
||||||
</_AotInputAssemblies>
|
|
||||||
<_AOT_InternalForceInterpretAssemblies Include="@(_WasmAssembliesInternal->WithMetadataValue('_InternalForceInterpret', 'true'))" />
|
|
||||||
|
|
||||||
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
|
||||||
|
|
||||||
<_WasmAOTSearchPaths Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)" />
|
|
||||||
<_WasmAOTSearchPaths Include="$(MicrosoftNetCoreAppRuntimePackRidDir)\lib\net6.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<!--<AOTMode Condition="'$(AOTMode)' == '' and '$(AOTProfilePath)' != ''">LLVMOnlyInterp</AOTMode>-->
|
|
||||||
<AOTMode Condition="'$(AOTMode)' == ''">LLVMOnlyInterp</AOTMode>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Error Condition="'$(AOTMode)' == 'llvmonly' and @(_AOT_InternalForceInterpretAssemblies->Count()) > 0"
|
|
||||||
Text="Builing in AOTMode=LLVMonly, but found some assemblies marked as _InternalForceInterpret: @(_AOT_InternalForceInterpretAssemblies)" />
|
|
||||||
|
|
||||||
<Message Text="AOT'ing @(_AotInputAssemblies->Count()) assemblies" Importance="High" />
|
|
||||||
|
|
||||||
<!-- Dedup -->
|
|
||||||
<PropertyGroup Condition="'$(WasmDedup)' == 'true'">
|
|
||||||
<_WasmDedupAssembly>$(_WasmIntermediateOutputPath)\aot-instances.dll</_WasmDedupAssembly>
|
|
||||||
</PropertyGroup>
|
|
||||||
<WriteLinesToFile Condition="'$(WasmDedup)' == 'true'" File="$(_WasmIntermediateOutputPath)/aot-instances.cs" Overwrite="true" Lines="" />
|
|
||||||
<Csc
|
|
||||||
Condition="'$(WasmDedup)' == 'true'"
|
|
||||||
Sources="$(_WasmIntermediateOutputPath)\aot-instances.cs"
|
|
||||||
OutputAssembly="$(_WasmDedupAssembly)"
|
|
||||||
TargetType="library"
|
|
||||||
Deterministic="true"
|
|
||||||
References="@(ReferencePath)"
|
|
||||||
ToolExe="$(CscToolExe)"
|
|
||||||
ToolPath="$(CscToolPath)" />
|
|
||||||
<ItemGroup Condition="'$(WasmDedup)' == 'true'">
|
|
||||||
<_AotInputAssemblies Include="$(_WasmDedupAssembly)">
|
|
||||||
<AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
|
|
||||||
<ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
|
|
||||||
</_AotInputAssemblies>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<MonoAOTCompiler
|
|
||||||
CompilerBinaryPath="$(MonoAotCrossCompilerPath)"
|
|
||||||
OutputDir="$(_WasmIntermediateOutputPath)"
|
|
||||||
Mode="$(AOTMode)"
|
|
||||||
OutputType="AsmOnly"
|
|
||||||
Assemblies="@(_AotInputAssemblies)"
|
|
||||||
AdditionalAssemblySearchPaths="@(_WasmAOTSearchPaths)"
|
|
||||||
UseAotDataFile="false"
|
|
||||||
AOTProfilePath="$(AOTProfilePath)"
|
|
||||||
Profilers="$(WasmProfilers)"
|
|
||||||
AotModulesTablePath="$(_WasmIntermediateOutputPath)driver-gen.c"
|
|
||||||
UseLLVM="true"
|
|
||||||
DisableParallelAot="true"
|
|
||||||
DedupAssembly="$(_WasmDedupAssembly)"
|
|
||||||
LLVMDebug="dwarfdebug"
|
|
||||||
LLVMPath="$(EmscriptenUpstreamBinPath)" >
|
|
||||||
|
|
||||||
<Output TaskParameter="CompiledAssemblies" ItemName="_WasmAssembliesInternal" />
|
|
||||||
<Output TaskParameter="FileWrites" ItemName="FileWrites" />
|
|
||||||
</MonoAOTCompiler>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- Add back the interpreter-only assemblies -->
|
|
||||||
<_WasmAssembliesInternal Include="@(_AOT_InternalForceInterpretAssemblies)" />
|
|
||||||
|
|
||||||
<_AOTAssemblies Include="@(_WasmAssembliesInternal)" Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'" />
|
|
||||||
<_BitcodeFile Include="%(_WasmAssembliesInternal.LlvmBitcodeFile)" />
|
|
||||||
|
|
||||||
<_WasmNativeFileForLinking Include="@(_BitcodeFile)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Error Condition="@(_BitcodeFile->Count()) != @(_AOTAssemblies->Count())"
|
|
||||||
Text="Bug: Number of aot assemblies doesn't match the number of generated bitcode files. BitcodeFiles: @(_BitcodeFile->Count()) vs Assemblies: @(_AOTAssemblies->Count())" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<!-- '$(ArchiveTests)' != 'true' is to skip on CI for now -->
|
|
||||||
<Target Name="_WasmStripAOTAssemblies" Condition="'$(RunAOTCompilation)' == 'true' and '$(WasmStripAOTAssemblies)' == 'true' and '$(AOTMode)' != 'LLVMOnlyInterp' and '$(ArchiveTests)' != 'true'">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_WasmStrippedAssembliesPath>$([MSBuild]::NormalizeDirectory($(_WasmIntermediateOutputPath), 'stripped-assemblies'))</_WasmStrippedAssembliesPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmStrippedAssemblies
|
|
||||||
Condition="'%(_WasmAssembliesInternal._InternalForceInterpret)' != 'true'"
|
|
||||||
Include="@(_WasmAssembliesInternal->'$(_WasmStrippedAssembliesPath)%(FileName)%(Extension)')"
|
|
||||||
OriginalPath="%(_WasmAssembliesInternal.Identity)" />
|
|
||||||
<_WasmInterpOnlyAssembly Include="@(_WasmAssembliesInternal->WithMetadataValue('_InternalForceInterpret', 'true'))" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<!-- Run mono-cil-strip on the assemblies -->
|
|
||||||
<!-- TODO: replace this with a linker task -->
|
|
||||||
<MakeDir Directories="$(_WasmStrippedAssembliesPath)" />
|
|
||||||
<Exec Command='mono-cil-strip -q "%(_WasmStrippedAssemblies.OriginalPath)" "%(_WasmStrippedAssemblies.Identity)"' />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
|
||||||
<_WasmAssembliesInternal Include="@(_WasmStrippedAssemblies);@(_WasmInterpOnlyAssembly)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_WasmResolveReferences" Condition="'$(WasmResolveAssembliesBeforeBuild)' == 'true'">
|
|
||||||
<WasmLoadAssembliesAndReferences
|
|
||||||
Assemblies="@(_WasmAssembliesInternal)"
|
|
||||||
AssemblySearchPaths="@(WasmAssemblySearchPaths)"
|
|
||||||
SkipMissingAssemblies="$(WasmSkipMissingAssemblies)">
|
|
||||||
<Output TaskParameter="ReferencedAssemblies" ItemName="_TmpWasmAssemblies" />
|
|
||||||
</WasmLoadAssembliesAndReferences>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
|
||||||
<_WasmAssembliesInternal Include="@(_TmpWasmAssemblies)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_BeforeWasmBuildApp" DependsOnTargets="_SetupEmscripten;_SetWasmBuildNativeDefaults">
|
|
||||||
<PropertyGroup>
|
|
||||||
<MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$([MSBuild]::NormalizeDirectory($(NuGetPackageRoot), 'microsoft.netcore.app.runtime.mono.browser-wasm', '$(BundledNETCoreAppPackageVersion)'))</MicrosoftNetCoreAppRuntimePackDir>
|
|
||||||
<MicrosoftNetCoreAppRuntimePackRidDir Condition="'$(MicrosoftNetCoreAppRuntimePackRidDir)' == ''">$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackDir), 'runtimes', 'browser-wasm'))</MicrosoftNetCoreAppRuntimePackRidDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
|
<Target Name="_BeforeWasmBuildApp" DependsOnTargets="$(_BeforeWasmBuildAppDependsOn)">
|
||||||
<Error Condition="'$(IntermediateOutputPath)' == ''" Text="%24(IntermediateOutputPath) property needs to be set" />
|
<Error Condition="'$(IntermediateOutputPath)' == ''" Text="%24(IntermediateOutputPath) property needs to be set" />
|
||||||
<Error Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidDir)')" Text="MicrosoftNetCoreAppRuntimePackRidDir=$(MicrosoftNetCoreAppRuntimePackRidDir) doesn't exist" />
|
<Error Condition="!Exists('$(MicrosoftNetCoreAppRuntimePackRidDir)')" Text="MicrosoftNetCoreAppRuntimePackRidDir=$(MicrosoftNetCoreAppRuntimePackRidDir) doesn't exist" />
|
||||||
<Error Condition="@(WasmAssembliesToBundle->Count()) == 0" Text="WasmAssembliesToBundle item is empty. No assemblies to process" />
|
<Error Condition="@(WasmAssembliesToBundle->Count()) == 0" Text="WasmAssembliesToBundle item is empty. No assemblies to process" />
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<WasmGenerateAppBundle Condition="'$(WasmGenerateAppBundle)' == ''">true</WasmGenerateAppBundle>
|
<WasmGenerateAppBundle Condition="'$(WasmGenerateAppBundle)' == ''">true</WasmGenerateAppBundle>
|
||||||
<WasmNativeDebugSymbols Condition="'$(WasmNativeDebugSymbols)' == ''">true</WasmNativeDebugSymbols>
|
|
||||||
<WasmAppDir Condition="'$(WasmAppDir)' == ''">$([MSBuild]::NormalizeDirectory($(OutputPath), 'AppBundle'))</WasmAppDir>
|
<WasmAppDir Condition="'$(WasmAppDir)' == ''">$([MSBuild]::NormalizeDirectory($(OutputPath), 'AppBundle'))</WasmAppDir>
|
||||||
<WasmMainAssemblyFileName Condition="'$(WasmMainAssemblyFileName)' == ''">$(TargetFileName)</WasmMainAssemblyFileName>
|
<WasmMainAssemblyFileName Condition="'$(WasmMainAssemblyFileName)' == ''">$(TargetFileName)</WasmMainAssemblyFileName>
|
||||||
|
|
||||||
<WasmAppDir>$([MSBuild]::NormalizeDirectory($(WasmAppDir)))</WasmAppDir>
|
<WasmAppDir>$([MSBuild]::NormalizeDirectory($(WasmAppDir)))</WasmAppDir>
|
||||||
<MicrosoftNetCoreAppRuntimePackRidDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir)))</MicrosoftNetCoreAppRuntimePackRidDir>
|
|
||||||
<MicrosoftNetCoreAppRuntimePackRidNativeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidDir), 'native'))</MicrosoftNetCoreAppRuntimePackRidNativeDir>
|
|
||||||
<!-- emcc, and mono-aot-cross don't like relative paths for output files -->
|
<!-- emcc, and mono-aot-cross don't like relative paths for output files -->
|
||||||
<_WasmIntermediateOutputPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'wasm'))</_WasmIntermediateOutputPath>
|
<_WasmIntermediateOutputPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'wasm'))</_WasmIntermediateOutputPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -263,85 +118,6 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_SetupEmscripten">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenSdkToolsPath)' == '' or !Exists('$(EmscriptenSdkToolsPath)'))">%24(EmscriptenSdkToolsPath)=$(EmscriptenSdkToolsPath) </_EMSDKMissingPaths>
|
|
||||||
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenNodeToolsPath)' == '' or !Exists('$(EmscriptenNodeToolsPath)'))">%24(EmscriptenNodeToolsPath)=$(EmscriptenNodeToolsPath) </_EMSDKMissingPaths>
|
|
||||||
<_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenUpstreamBinPath)' == '' or !Exists('$(EmscriptenUpstreamBinPath)'))">%24(EmscriptenUpstreamBinPath)=$(EmscriptenUpstreamBinPath) </_EMSDKMissingPaths>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<_EMSDKMissingErrorMessage Condition="'$(EMSDK_PATH)' == '' and '$(EmscriptenSdkToolsPath)' == ''">Could not find emscripten sdk. Either set %24(EMSDK_PATH), or use workloads to get the sdk.</_EMSDKMissingErrorMessage>
|
|
||||||
|
|
||||||
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' != 'true' and '$(_EMSDKMissingPaths)' != ''">Emscripten from the workload is missing some paths: $(_EMSDKMissingPaths).</_EMSDKMissingErrorMessage>
|
|
||||||
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' == 'true' and !Exists($(EMSDK_PATH))">Could not find Emscripten sdk at %24(EMSDK_PATH)=$(EMSDK_PATH) .</_EMSDKMissingErrorMessage>
|
|
||||||
<_EMSDKMissingErrorMessage Condition="'$(_EMSDKMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' == 'true' and '$(_EMSDKMissingPaths)' != ''">Specified Emscripten sdk at %24(EMSDK_PATH)=$(EMSDK_PATH) is missing some paths: $(_EMSDKMissingPaths).</_EMSDKMissingErrorMessage>
|
|
||||||
|
|
||||||
<_IsEMSDKMissing Condition="'$(_EMSDKMissingErrorMessage)' != ''">true</_IsEMSDKMissing>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<EmscriptenSdkToolsPath Condition="'$(EmscriptenSdkToolsPath)' != ''" >$([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath)))</EmscriptenSdkToolsPath>
|
|
||||||
<EmscriptenNodeToolsPath Condition="'$(EmscriptenNodeToolsPath)' != ''" >$([MSBuild]::NormalizeDirectory($(EmscriptenNodeToolsPath)))</EmscriptenNodeToolsPath>
|
|
||||||
<EmscriptenUpstreamBinPath Condition="'$(EmscriptenUpstreamBinPath)' != ''">$([MSBuild]::NormalizeDirectory($(EmscriptenUpstreamBinPath)))</EmscriptenUpstreamBinPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!-- Environment variables required for running emsdk commands like `emcc` -->
|
|
||||||
<ItemGroup Condition="'$(EmscriptenSdkToolsPath)' != ''">
|
|
||||||
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_LLVM_ROOT=$(EmscriptenSdkToolsPath)bin" />
|
|
||||||
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_BINARYEN_ROOT=$(EmscriptenSdkToolsPath)" />
|
|
||||||
<EmscriptenEnvVars Include="DOTNET_EMSCRIPTEN_NODE_JS=$([MSBuild]::NormalizePath($(EmscriptenNodeToolsPath), 'bin', 'node$(_ExeExt)'))" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_EmscriptenPrependPATHTrimmed Include="$([MSBuild]::ValueOrDefault('%(EmscriptenPrependPATH.Identity)\', '').TrimEnd('\/'))" />
|
|
||||||
<EmscriptenPrependPATH Remove="@(EmscriptenPrependPATH)" />
|
|
||||||
<EmscriptenPrependPATH Include="@(_EmscriptenPrependPATHTrimmed)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<!-- semicolon is a msbuild property separator. It is also the path separator on windows.
|
|
||||||
So, we need to escape it here, so the paths don't get split up when converting
|
|
||||||
to string[] for passing to Exec task -->
|
|
||||||
<_PathSeparator Condition="'$(OS)' == 'Windows_NT'">%3B</_PathSeparator>
|
|
||||||
<_PathSeparator Condition="'$(OS)' != 'Windows_NT'">:</_PathSeparator>
|
|
||||||
|
|
||||||
<_EmscriptenPrependPATHProperty>@(EmscriptenPrependPATH -> '%(Identity)', '$(_PathSeparator)')</_EmscriptenPrependPATHProperty>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<EmscriptenEnvVars Include="PATH=$(_EmscriptenPrependPATHProperty)$(_PathSeparator)$([MSBuild]::Escape($(PATH)))" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_WasmBuildNative" DependsOnTargets="$(_WasmNativeBuildDependsOn)" Condition="'$(WasmBuildNative)' == 'true'" />
|
|
||||||
|
|
||||||
<Target Name="_SetWasmBuildNativeDefaults">
|
|
||||||
<!-- if already set, maybe by a user projects, then a missing emsdk is an error -->
|
|
||||||
<Error Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
|
||||||
|
|
||||||
<Error Condition="'$(RunAOTCompilation)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for AOT'ing assemblies." />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<WasmBuildNative Condition="'$(RunAOTCompilation)' == 'true'">true</WasmBuildNative>
|
|
||||||
<WasmBuildNative Condition="'$(WasmBuildNative)' == '' and '$(PublishTrimmed)' != 'true'">false</WasmBuildNative>
|
|
||||||
<WasmBuildNative Condition="'$(WasmBuildNative)' == '' and '$(Configuration)' == 'Release'">true</WasmBuildNative>
|
|
||||||
<WasmBuildNative Condition="'$(WasmBuildNative)' == ''">false</WasmBuildNative>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!-- If we want to default to true, and sdk is missing, then just warn, and set it to false -->
|
|
||||||
<Warning Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'"
|
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<WasmBuildNative Condition="'$(WasmBuildNative)' == 'true' and '$(_IsEMSDKMissing)' == 'true'">false</WasmBuildNative>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_WasmCoreBuild" BeforeTargets="WasmBuildApp" DependsOnTargets="$(WasmBuildAppDependsOn)" />
|
|
||||||
|
|
||||||
<Target Name="_WasmGenerateAppBundle" Condition="'$(WasmGenerateAppBundle)' == 'true'">
|
<Target Name="_WasmGenerateAppBundle" Condition="'$(WasmGenerateAppBundle)' == 'true'">
|
||||||
<Error Condition="'$(WasmMainJSPath)' == ''" Text="%24(WasmMainJSPath) property needs to be set" />
|
<Error Condition="'$(WasmMainJSPath)' == ''" Text="%24(WasmMainJSPath) property needs to be set" />
|
||||||
|
|
||||||
|
@ -380,163 +156,6 @@
|
||||||
<CallTarget Targets="_GenerateRunV8Script" Condition="'$(WasmGenerateRunV8Script)' == 'true'" />
|
<CallTarget Targets="_GenerateRunV8Script" Condition="'$(WasmGenerateRunV8Script)' == 'true'" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_PrepareForWasmBuildNative">
|
|
||||||
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<EmccFlagsFile>$([MSBuild]::NormalizePath($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'src', 'emcc-flags.txt'))</EmccFlagsFile>
|
|
||||||
<WasmNativeStrip Condition="'$(WasmNativeStrip)' == ''">true</WasmNativeStrip>
|
|
||||||
<WasmLinkIcalls Condition="'$(WasmLinkIcalls)' == ''">$(WasmBuildNative)</WasmLinkIcalls>
|
|
||||||
<_WasmICallTablePath>$(_WasmIntermediateOutputPath)icall-table.h</_WasmICallTablePath>
|
|
||||||
<_WasmRuntimeICallTablePath>$(_WasmIntermediateOutputPath)runtime-icall-table.h</_WasmRuntimeICallTablePath>
|
|
||||||
<_WasmPInvokeTablePath>$(_WasmIntermediateOutputPath)pinvoke-table.h</_WasmPInvokeTablePath>
|
|
||||||
|
|
||||||
<_EmccOptimizationFlagDefault Condition="'$(_WasmDevel)' == 'true'">-O0</_EmccOptimizationFlagDefault>
|
|
||||||
|
|
||||||
<EmccCompileOptimizationFlag Condition="'$(EmccCompileOptimizationFlag)' == ''">$(_EmccOptimizationFlagDefault)</EmccCompileOptimizationFlag>
|
|
||||||
<EmccLinkOptimizationFlag Condition="'$(EmccLinkOptimizationFlag)' == ''" >$(_EmccOptimizationFlagDefault)</EmccLinkOptimizationFlag>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ReadLinesFromFile File="$(EmccFlagsFile)">
|
|
||||||
<Output TaskParameter="Lines" PropertyName="_DefaultEmccFlags" />
|
|
||||||
</ReadLinesFromFile>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_EmccCommonFlags Include="$(_DefaultEmccFlags)" />
|
|
||||||
<_EmccCommonFlags Include="$(EmccFlags)" />
|
|
||||||
<_EmccCommonFlags Include="-s DISABLE_EXCEPTION_CATCHING=0" />
|
|
||||||
<_EmccCommonFlags Include="-g" Condition="'$(WasmNativeStrip)' == 'false'" />
|
|
||||||
<_EmccCommonFlags Include="-DENABLE_AOT=1" Condition="'$(RunAOTCompilation)' == 'true'" />
|
|
||||||
<_EmccCommonFlags Include="-DDRIVER_GEN=1" Condition="'$(RunAOTCompilation)' == 'true'" />
|
|
||||||
<_EmccCommonFlags Include="-DINVARIANT_GLOBALIZATION=1" Condition="'$(InvariantGlobalization)' == 'true'" />
|
|
||||||
<_EmccCommonFlags Include="-DLINK_ICALLS=1" Condition="'$(WasmLinkIcalls)' == 'true'" />
|
|
||||||
<_EmccCommonFlags Include="-v" Condition="'$(EmccVerbose)' != 'false'" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<_WasmRuntimePackIncludeDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'include'))</_WasmRuntimePackIncludeDir>
|
|
||||||
<_WasmRuntimePackSrcDir>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'src'))</_WasmRuntimePackSrcDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmRuntimePackNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)\*.a" />
|
|
||||||
<_WasmObjectsToBuild Include="$(_WasmRuntimePackSrcDir)\*.c" />
|
|
||||||
<_WasmObjectsToBuild OutputPath="$(_WasmIntermediateOutputPath)%(FileName).o" />
|
|
||||||
|
|
||||||
<_WasmObjects Include="@(_WasmRuntimePackNativeLibs)" />
|
|
||||||
<_WasmObjects Include="@(_WasmObjectsToBuild->'%(OutputPath)')" />
|
|
||||||
|
|
||||||
<_DotnetJSSrcFile Include="$(_WasmRuntimePackSrcDir)\*.js" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_GeneratePInvokeTable">
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmPInvokeModules Include="libSystem.Native" />
|
|
||||||
<_WasmPInvokeModules Include="libSystem.IO.Compression.Native" />
|
|
||||||
<_WasmPInvokeModules Include="libSystem.Globalization.Native" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PInvokeTableGenerator
|
|
||||||
Modules="@(_WasmPInvokeModules)"
|
|
||||||
Assemblies="@(_WasmAssembliesInternal)"
|
|
||||||
OutputPath="$(_WasmPInvokeTablePath)" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_GenerateICallTable" Condition="'$(WasmLinkIcalls)' == 'true'">
|
|
||||||
<Error Condition="'$(MonoAotCrossCompilerPath)' == '' or !Exists('$(MonoAotCrossCompilerPath)')"
|
|
||||||
Text="Could not find AOT cross compiler at %24(MonoAotCrossCompilerPath)=$(MonoAotCrossCompilerPath)" />
|
|
||||||
|
|
||||||
<Exec Command='"$(MonoAotCrossCompilerPath)" --print-icall-table > "$(_WasmRuntimeICallTablePath)"' />
|
|
||||||
<IcallTableGenerator
|
|
||||||
RuntimeIcallTableFile="$(_WasmRuntimeICallTablePath)"
|
|
||||||
Assemblies="@(_WasmAssembliesInternal)"
|
|
||||||
OutputPath="$(_WasmICallTablePath)" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_WasmCompileNativeFiles">
|
|
||||||
<ItemGroup>
|
|
||||||
<_EmccIncludePaths Include="$(_WasmIntermediateOutputPath.TrimEnd('\/'))" />
|
|
||||||
<_EmccIncludePaths Include="$(_WasmRuntimePackIncludeDir)mono-2.0" />
|
|
||||||
<_EmccIncludePaths Include="$(_WasmRuntimePackIncludeDir)wasm" />
|
|
||||||
|
|
||||||
<!-- Adding optimization flag at the top, so it gets precedence -->
|
|
||||||
<_EmccCFlags Include="$(EmccCompileOptimizationFlag)" />
|
|
||||||
<_EmccCFlags Include="@(_EmccCommonFlags)" />
|
|
||||||
<_EmccCFlags Include="-DCORE_BINDINGS" />
|
|
||||||
<_EmccCFlags Include="-DGEN_PINVOKE=1" />
|
|
||||||
<_EmccCFlags Include=""-I%(_EmccIncludePaths.Identity)"" />
|
|
||||||
<_EmccCFlags Include="-g" Condition="'$(WasmNativeDebugSymbols)' == 'true'" />
|
|
||||||
<_EmccCFlags Include="$(EmccExtraCFlags)" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<_EmccCompileRsp>$(_WasmIntermediateOutputPath)emcc-compile.rsp</_EmccCompileRsp>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<WriteLinesToFile Lines="@(_EmccCFlags)" File="$(_EmccCompileRsp)" Overwrite="true" WriteOnlyWhenDifferent="true" />
|
|
||||||
|
|
||||||
<Message Text="Compiling native assets with emcc. This may take a while ..." Importance="High" />
|
|
||||||
<Exec Command='emcc "@$(_EmccCompileRsp)" "%(_WasmObjectsToBuild.Identity)" -c -o "%(_WasmObjectsToBuild.OutputPath)"' EnvironmentVariables="@(EmscriptenEnvVars)" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_WasmLinkDotNet">
|
|
||||||
<ItemGroup>
|
|
||||||
<_WasmRuntimePackNativeLibs Include="$(MicrosoftNetCoreAppRuntimePackRidNativeDir)\*.a" />
|
|
||||||
<_WasmObjects Include="@(_WasmRuntimePackNativeLibs)" />
|
|
||||||
<_WasmObjects Include="@(_WasmObjectsToBuild->'%(OutputPath)')" />
|
|
||||||
|
|
||||||
<!-- Adding optimization flag at the top, so it gets precedence -->
|
|
||||||
<_EmccLDFlags Include="$(EmccLinkOptimizationFlag)" />
|
|
||||||
<_EmccLDFlags Include="@(_EmccCommonFlags)" />
|
|
||||||
<_EmccLDFlags Include="-s TOTAL_MEMORY=536870912" />
|
|
||||||
<_EmccLDFlags Include="$(EmccExtraLDFlags)" />
|
|
||||||
|
|
||||||
<_EmccLDFlags Include="--js-library "%(_DotnetJSSrcFile.Identity)"" />
|
|
||||||
<_EmccLDFlags Include=""%(_WasmNativeFileForLinking.Identity)"" />
|
|
||||||
<_EmccLDFlags Include=""%(_WasmObjects.Identity)"" />
|
|
||||||
|
|
||||||
<_EmccLDFlags Include="-o "$(_WasmIntermediateOutputPath)dotnet.js"" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<_EmccLinkRsp>$(_WasmIntermediateOutputPath)emcc-link.rsp</_EmccLinkRsp>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<WriteLinesToFile Lines="@(_EmccLDFlags)" File="$(_EmccLinkRsp)" Overwrite="true" />
|
|
||||||
<Message Text="Running emcc with @(_EmccLDFlags->'%(Identity)', ' ')" Importance="Low" />
|
|
||||||
<Exec Command='emcc "@$(_EmccLinkRsp)"' EnvironmentVariables="@(EmscriptenEnvVars)" />
|
|
||||||
|
|
||||||
<Exec Command='wasm-opt$(_ExeExt) --strip-dwarf "$(_WasmIntermediateOutputPath)dotnet.wasm" -o "$(_WasmIntermediateOutputPath)dotnet.wasm"' Condition="'$(WasmNativeStrip)' == 'true'" IgnoreStandardErrorWarningFormat="true" EnvironmentVariables="@(EmscriptenEnvVars)" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_CompleteWasmBuildNative">
|
|
||||||
<ItemGroup>
|
|
||||||
<WasmNativeAsset Include="$(_WasmIntermediateOutputPath)dotnet.wasm" />
|
|
||||||
<WasmNativeAsset Include="$(_WasmIntermediateOutputPath)dotnet.js" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_GenerateDriverGenC" Condition="'$(RunAOTCompilation)' != 'true' and '$(WasmProfilers)' != ''">
|
|
||||||
<PropertyGroup>
|
|
||||||
<EmccFlags>$(EmccFlags) -DDRIVER_GEN=1</EmccFlags>
|
|
||||||
<InitAotProfilerCmd>
|
|
||||||
void mono_profiler_init_aot (const char *desc)%3B
|
|
||||||
EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_profiler_init_aot (desc)%3B }
|
|
||||||
</InitAotProfilerCmd>
|
|
||||||
|
|
||||||
<_DriverGenCPath>$(_WasmIntermediateOutputPath)driver-gen.c</_DriverGenCPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Message Text="Generating $(_DriverGenCPath)" Importance="Low" />
|
|
||||||
<WriteLinesToFile File="$(_DriverGenCPath)" Overwrite="true" Lines="$(InitAotProfilerCmd)" />
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<FileWrites Include="$(_DriverGenCPath)" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="_GenerateRunV8Script">
|
<Target Name="_GenerateRunV8Script">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<WasmRunV8ScriptPath Condition="'$(WasmRunV8ScriptPath)' == ''">$(WasmAppDir)run-v8.sh</WasmRunV8ScriptPath>
|
<WasmRunV8ScriptPath Condition="'$(WasmRunV8ScriptPath)' == ''">$(WasmAppDir)run-v8.sh</WasmRunV8ScriptPath>
|
||||||
|
@ -556,28 +175,18 @@ EMSCRIPTEN_KEEPALIVE void mono_wasm_load_profiler_aot (const char *desc) { mono_
|
||||||
<Exec Condition="'$(OS)' != 'Windows_NT'" Command="chmod a+x $(WasmRunV8ScriptPath)" />
|
<Exec Condition="'$(OS)' != 'Windows_NT'" Command="chmod a+x $(WasmRunV8ScriptPath)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_CheckEmccIsExpectedVersion">
|
<Target Name="_WasmResolveReferences" Condition="'$(WasmResolveAssembliesBeforeBuild)' == 'true'">
|
||||||
<Error Condition="'$(_IsEMSDKMissing)' == 'true'"
|
<WasmLoadAssembliesAndReferences
|
||||||
Text="$(_EMSDKMissingErrorMessage) Emscripten SDK is required for building native files." />
|
Assemblies="@(_WasmAssembliesInternal)"
|
||||||
|
AssemblySearchPaths="@(WasmAssemblySearchPaths)"
|
||||||
|
SkipMissingAssemblies="$(WasmSkipMissingAssemblies)">
|
||||||
|
<Output TaskParameter="ReferencedAssemblies" ItemName="_TmpWasmAssemblies" />
|
||||||
|
</WasmLoadAssembliesAndReferences>
|
||||||
|
|
||||||
<ReadLinesFromFile File="$([MSBuild]::NormalizePath($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'src', 'emcc-version.txt'))">
|
|
||||||
<Output TaskParameter="Lines" PropertyName="RuntimeEmccVersion" />
|
|
||||||
</ReadLinesFromFile>
|
|
||||||
|
|
||||||
<Exec Command="emcc --version" WorkingDirectory="$(_WasmIntermediateOutputPath)" EnvironmentVariables="@(EmscriptenEnvVars)" ConsoleToMsBuild="true" StandardOutputImportance="Low">
|
|
||||||
<Output TaskParameter="ConsoleOutput" ItemName="_VersionLines" />
|
|
||||||
</Exec>
|
|
||||||
|
|
||||||
<!-- we want to get the first line from the output, which has the version.
|
|
||||||
Rest of the lines are the license -->
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<_ReversedVersionLines Include="@(_VersionLines->Reverse())" />
|
<_WasmAssembliesInternal Remove="@(_WasmAssembliesInternal)" />
|
||||||
|
<_WasmAssembliesInternal Include="@(_TmpWasmAssemblies)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<ActualEmccVersion>%(_ReversedVersionLines.Identity)</ActualEmccVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<Error Condition="'$(RuntimeEmccVersion)' != '$(ActualEmccVersion)'" Text="Emscripten version mismatch, expected '$(RuntimeEmccVersion)', got '$(ActualEmccVersion)'"/>
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_AfterWasmBuildApp">
|
<Target Name="_AfterWasmBuildApp">
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
<WasmEnableES6 Condition="'$(WasmEnableES6)' == ''">false</WasmEnableES6>
|
<WasmEnableES6 Condition="'$(WasmEnableES6)' == ''">false</WasmEnableES6>
|
||||||
<FilterSystemTimeZones Condition="'$(FilterSystemTimeZones)' == ''">false</FilterSystemTimeZones>
|
<FilterSystemTimeZones Condition="'$(FilterSystemTimeZones)' == ''">false</FilterSystemTimeZones>
|
||||||
<WasmEnableMetadataUpdate Condition="'$(MonoMetadataUpdate)' == 'true'">true</WasmEnableMetadataUpdate>
|
<WasmEnableMetadataUpdate Condition="'$(MonoMetadataUpdate)' == 'true'">true</WasmEnableMetadataUpdate>
|
||||||
|
<EmccCmd>emcc</EmccCmd>
|
||||||
|
<WasmObjDir>$(ArtifactsObjDir)wasm</WasmObjDir>
|
||||||
|
<_EmccDefaultsRspPath>$(NativeBinDir)src\emcc-default.rsp</_EmccDefaultsRspPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -67,21 +70,99 @@
|
||||||
OutputFileName="$(TimeZonesDataPath)" />
|
OutputFileName="$(TimeZonesDataPath)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="GenerateEmccPropsAndRspFiles">
|
||||||
|
<ItemGroup>
|
||||||
|
<_EmccCommonFlags Include="-s ALLOW_MEMORY_GROWTH=1" />
|
||||||
|
<_EmccCommonFlags Include="-s NO_EXIT_RUNTIME=1" />
|
||||||
|
<_EmccCommonFlags Include="-s FORCE_FILESYSTEM=1" />
|
||||||
|
<_EmccCommonFlags Include="-s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'UTF8ArrayToString', 'addFunction']"" />
|
||||||
|
<_EmccCommonFlags Include="-s "EXPORTED_FUNCTIONS=['_putchar']"" />
|
||||||
|
<_EmccCommonFlags Include="--source-map-base http://example.com" />
|
||||||
|
<_EmccCommonFlags Include="-emit-llvm" />
|
||||||
|
|
||||||
|
<_EmccCommonFlags Include="-s MODULARIZE=1" Condition="'$(WasmEnableES6)' != 'false'" />
|
||||||
|
<_EmccCommonFlags Include="-s EXPORT_ES6=1" Condition="'$(WasmEnableES6)' != 'false'" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(OS)' != 'Windows_NT'">
|
||||||
|
<_EmccFlags Include="--profiling-funcs" />
|
||||||
|
<_EmccFlags Include="@(_EmccCommonFlags)" />
|
||||||
|
|
||||||
|
<_EmccFlags Include="-DENABLE_METADATA_UPDATE=1" Condition="'$(WasmEnableMetadataUpdate)' == 'true'" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(OS)' == 'Windows_NT'">
|
||||||
|
<_EmccFlags Include="@(_EmccCommonFlags)" />
|
||||||
|
|
||||||
|
<_EmccFlags Include="-s WASM=1" />
|
||||||
|
<_EmccFlags Include="-s BINARYEN=1" />
|
||||||
|
<_EmccFlags Include="-s ALIASING_FUNCTION_POINTERS=0" />
|
||||||
|
<_EmccFlags Include="-s USE_ZLIB=1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<WriteLinesToFile File="$(_EmccDefaultsRspPath)"
|
||||||
|
Lines="@(_EmccFlags)"
|
||||||
|
WriteOnlyWhenDifferent="true"
|
||||||
|
Overwrite="true" />
|
||||||
|
|
||||||
|
<!-- Generate Emcc.props -->
|
||||||
|
|
||||||
|
<RunWithEmSdkEnv Command="$(EmccCmd) --version"
|
||||||
|
ConsoleToMsBuild="true"
|
||||||
|
EmSdkPath="$(EMSDK_PATH)"
|
||||||
|
IgnoreStandardErrorWarningFormat="true">
|
||||||
|
<Output TaskParameter="ConsoleOutput" ItemName="_VersionLines" />
|
||||||
|
</RunWithEmSdkEnv>
|
||||||
|
|
||||||
|
<!-- we want to get the first line from the output, which has the version.
|
||||||
|
Rest of the lines are the license -->
|
||||||
|
<ItemGroup>
|
||||||
|
<_ReversedVersionLines Include="@(_VersionLines->Reverse())" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_EmccVersionRaw>%(_ReversedVersionLines.Identity)</_EmccVersionRaw>
|
||||||
|
|
||||||
|
<_EmccVersionRegexPattern>^ *emcc \([^\)]+\) *([^ \(]+) *\(([^\)]+)\)$</_EmccVersionRegexPattern>
|
||||||
|
<_EmccVersion>$([System.Text.RegularExpressions.Regex]::Match($(_EmccVersionRaw), $(_EmccVersionRegexPattern)).Groups[1].Value)</_EmccVersion>
|
||||||
|
<_EmccVersionHash>$([System.Text.RegularExpressions.Regex]::Match($(_EmccVersionRaw), $(_EmccVersionRegexPattern)).Groups[2].Value)</_EmccVersionHash>
|
||||||
|
|
||||||
|
<_EmccPropsContent>
|
||||||
|
<![CDATA[
|
||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<RuntimeEmccVersionRaw>$(_EmccVersionRaw)</RuntimeEmccVersionRaw>
|
||||||
|
<RuntimeEmccVersion>$(_EmccVersion)</RuntimeEmccVersion>
|
||||||
|
<RuntimeEmccVersionHash>$(_EmccVersionHash)</RuntimeEmccVersionHash>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
|
]]>
|
||||||
|
</_EmccPropsContent>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Error Text="Failed to parse emcc version, and hash from the full version string: '$(_EmccVersionRaw)'"
|
||||||
|
Condition="'$(_EmccVersion)' == '' or '$(_EmccVersionHash)' == ''" />
|
||||||
|
|
||||||
|
<WriteLinesToFile File="$(NativeBinDir)src\Emcc.props"
|
||||||
|
Lines="$(_EmccPropsContent)"
|
||||||
|
Overwrite="true"
|
||||||
|
WriteOnlyWhenDifferent="true" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
<!-- This is a documented target that is invoked by developers in their innerloop work. -->
|
<!-- This is a documented target that is invoked by developers in their innerloop work. -->
|
||||||
<Target Name="BuildWasmRuntimes"
|
<Target Name="BuildWasmRuntimes"
|
||||||
Condition="'$(OS)' != 'Windows_NT'"
|
Condition="'$(OS)' != 'Windows_NT'"
|
||||||
AfterTargets="Build"
|
AfterTargets="Build"
|
||||||
DependsOnTargets="BuildPInvokeTable;BundleTimeZones">
|
DependsOnTargets="GenerateEmccPropsAndRspFiles;BuildPInvokeTable;BundleTimeZones">
|
||||||
|
|
||||||
<Exec Command="make -C $(MonoProjectRoot)wasm all SHELL=/bin/bash BINDIR=$(ArtifactsBinDir) MONO_BIN_DIR=$(MonoArtifactsPath) OBJDIR=$(ArtifactsObjDir) NATIVE_BIN_DIR=$(NativeBinDir) CONFIG=$(Configuration) PINVOKE_TABLE=$(WasmPInvokeTablePath) ICU_LIBDIR=$(ICULibDir) ENABLE_ES6=$(WasmEnableES6) ENABLE_METADATA_UPDATE=$(WasmEnableMetadataUpdate)"
|
<Exec Command="make -C $(MonoProjectRoot)wasm all SHELL=/bin/bash BINDIR=$(ArtifactsBinDir) MONO_BIN_DIR=$(MonoArtifactsPath) OBJDIR=$(ArtifactsObjDir) NATIVE_BIN_DIR=$(NativeBinDir) CONFIG=$(Configuration) PINVOKE_TABLE=$(WasmPInvokeTablePath) ICU_LIBDIR=$(ICULibDir)"
|
||||||
IgnoreStandardErrorWarningFormat="true" />
|
IgnoreStandardErrorWarningFormat="true" />
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<IcuDataFiles Include="$(NativeBinDir)*.dat" />
|
<IcuDataFiles Include="$(NativeBinDir)*.dat" />
|
||||||
<WasmSrcFiles Include="$(NativeBinDir)src\*.c;
|
<WasmSrcFiles Include="$(NativeBinDir)src\*.c;
|
||||||
$(NativeBinDir)src\*.js;
|
$(NativeBinDir)src\*.js;
|
||||||
$(NativeBinDir)src\emcc-flags.txt;
|
$(_EmccDefaultsRspPath);
|
||||||
$(NativeBinDir)src\emcc-version.txt" />
|
$(NativeBinDir)src\Emcc.props" />
|
||||||
<WasmHeaderFiles Include="$(NativeBinDir)include\wasm\*.h" />
|
<WasmHeaderFiles Include="$(NativeBinDir)include\wasm\*.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
@ -109,12 +190,9 @@
|
||||||
<Target Name="BuildWinWasmRuntimes"
|
<Target Name="BuildWinWasmRuntimes"
|
||||||
Condition="'$(OS)' == 'Windows_NT'"
|
Condition="'$(OS)' == 'Windows_NT'"
|
||||||
AfterTargets="Build"
|
AfterTargets="Build"
|
||||||
DependsOnTargets="BuildPInvokeTable;BundleTimezones">
|
DependsOnTargets="GenerateEmccPropsAndRspFiles;BuildPInvokeTable;BundleTimezones">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<EmccCmd>emcc</EmccCmd>
|
|
||||||
<EmccFlags>--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', 'UTF8ArrayToString', 'addFunction']" -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com -emit-llvm -s FORCE_FILESYSTEM=1 -s USE_ZLIB=1</EmccFlags>
|
|
||||||
<EmccFlags Condition="'$(WasmEnableES6)' == 'true'">$(EmccFlags) -s MODULARIZE=1 -s EXPORT_ES6=1</EmccFlags>
|
|
||||||
<EmccConfigurationFlags Condition="'$(Configuration)' == 'Debug'">-g -Os -s ASSERTIONS=1 -DENABLE_NETCORE=1 -DDEBUG=1</EmccConfigurationFlags>
|
<EmccConfigurationFlags Condition="'$(Configuration)' == 'Debug'">-g -Os -s ASSERTIONS=1 -DENABLE_NETCORE=1 -DDEBUG=1</EmccConfigurationFlags>
|
||||||
<EmccConfigurationFlags Condition="'$(Configuration)' == 'Release'">-Oz --llvm-opts 2 -DENABLE_NETCORE=1</EmccConfigurationFlags>
|
<EmccConfigurationFlags Condition="'$(Configuration)' == 'Release'">-Oz --llvm-opts 2 -DENABLE_NETCORE=1</EmccConfigurationFlags>
|
||||||
<StripCmd>"$(EMSDK_PATH)/upstream/bin/wasm-opt" --strip-dwarf "$(NativeBinDir)dotnet.wasm" -o "$(NativeBinDir)dotnet.wasm"</StripCmd>
|
<StripCmd>"$(EMSDK_PATH)/upstream/bin/wasm-opt" --strip-dwarf "$(NativeBinDir)dotnet.wasm" -o "$(NativeBinDir)dotnet.wasm"</StripCmd>
|
||||||
|
@ -137,11 +215,11 @@
|
||||||
<ICULibFiles Include="$(ICULibDir)/*.dat" />
|
<ICULibFiles Include="$(ICULibDir)/*.dat" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<RunWithEmSdkEnv Command="$(EmccCmd) $(EmccFlags) $(EmccConfigurationFlags) -Oz -I"$(MonoIncludeDir)" runtime/corebindings.c -c -o "$(MonoObjDir)corebindings.o""
|
<RunWithEmSdkEnv Command="$(EmccCmd) @$(_EmccDefaultsRspPath) $(EmccConfigurationFlags) -Oz -I"$(MonoIncludeDir)" runtime/corebindings.c -c -o "$(MonoObjDir)corebindings.o""
|
||||||
EmSdkPath="$(EMSDK_PATH)"
|
EmSdkPath="$(EMSDK_PATH)"
|
||||||
IgnoreStandardErrorWarningFormat="true" />
|
IgnoreStandardErrorWarningFormat="true" />
|
||||||
|
|
||||||
<RunWithEmSdkEnv Command="$(EmccCmd) $(EmccFlags) $(EmccConfigurationFlags) -Oz -DCORE_BINDINGS -I"$(MonoObjDir.TrimEnd('\/'))" -I"$(MonoIncludeDir)" runtime/driver.c -c -o "$(MonoObjDir)driver.o""
|
<RunWithEmSdkEnv Command="$(EmccCmd) @$(_EmccDefaultsRspPath) $(EmccConfigurationFlags) -Oz -DCORE_BINDINGS -I"$(MonoObjDir.TrimEnd('\/'))" -I"$(MonoIncludeDir)" runtime/driver.c -c -o "$(MonoObjDir)driver.o""
|
||||||
EmSdkPath="$(EMSDK_PATH)"
|
EmSdkPath="$(EMSDK_PATH)"
|
||||||
IgnoreStandardErrorWarningFormat="true" />
|
IgnoreStandardErrorWarningFormat="true" />
|
||||||
|
|
||||||
|
@ -149,11 +227,11 @@
|
||||||
DestinationFolder="$(MonoObjDir)"
|
DestinationFolder="$(MonoObjDir)"
|
||||||
SkipUnchangedFiles="true" />
|
SkipUnchangedFiles="true" />
|
||||||
|
|
||||||
<RunWithEmSdkEnv Command="$(EmccCmd) $(EmccFlags) $(EmccConfigurationFlags) -Oz -DGEN_PINVOKE=1 -I"$(MonoObjDir.TrimEnd('\/'))" -I"$(MonoIncludeDir)" runtime/pinvoke.c -c -o "$(MonoObjDir)pinvoke.o""
|
<RunWithEmSdkEnv Command="$(EmccCmd) @$(_EmccDefaultsRspPath) $(EmccConfigurationFlags) -Oz -DGEN_PINVOKE=1 -I"$(MonoObjDir.TrimEnd('\/'))" -I"$(MonoIncludeDir)" runtime/pinvoke.c -c -o "$(MonoObjDir)pinvoke.o""
|
||||||
EmSdkPath="$(EMSDK_PATH)"
|
EmSdkPath="$(EMSDK_PATH)"
|
||||||
IgnoreStandardErrorWarningFormat="true" />
|
IgnoreStandardErrorWarningFormat="true" />
|
||||||
|
|
||||||
<RunWithEmSdkEnv Command="$(EmccCmd) $(EmccFlags) $(EmccConfigurationFlags) --js-library runtime/library_mono.js --js-library runtime/binding_support.js --js-library runtime/dotnet_support.js --js-library "$(SystemNativeDir)\pal_random.js" "$(MonoObjDir)driver.o" "$(MonoObjDir)pinvoke.o" "$(MonoObjDir)corebindings.o" "@(MonoLibFiles->'%(FullPath)', '" "')" -o "$(NativeBinDir)dotnet.js" && $(StripCmd)"
|
<RunWithEmSdkEnv Command="$(EmccCmd) @$(_EmccDefaultsRspPath) $(EmccConfigurationFlags) --js-library runtime/library_mono.js --js-library runtime/binding_support.js --js-library runtime/dotnet_support.js --js-library "$(SystemNativeDir)\pal_random.js" "$(MonoObjDir)driver.o" "$(MonoObjDir)pinvoke.o" "$(MonoObjDir)corebindings.o" "@(MonoLibFiles->'%(FullPath)', '" "')" -o "$(NativeBinDir)dotnet.js" && $(StripCmd)"
|
||||||
EmSdkPath="$(EMSDK_PATH)"
|
EmSdkPath="$(EMSDK_PATH)"
|
||||||
IgnoreStandardErrorWarningFormat="true" />
|
IgnoreStandardErrorWarningFormat="true" />
|
||||||
|
|
||||||
|
@ -164,31 +242,17 @@
|
||||||
<Output TaskParameter="ConsoleOutput" ItemName="_VersionLines" />
|
<Output TaskParameter="ConsoleOutput" ItemName="_VersionLines" />
|
||||||
</RunWithEmSdkEnv>
|
</RunWithEmSdkEnv>
|
||||||
|
|
||||||
<!-- we want to get the first line from the output, which has the version.
|
|
||||||
Rest of the lines are the license -->
|
|
||||||
<ItemGroup>
|
|
||||||
<_ReversedVersionLines Include="@(_VersionLines->Reverse())" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<ActualEmccVersion>%(_ReversedVersionLines.Identity)</ActualEmccVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<WriteLinesToFile File="$(WasmVersionFile)"
|
|
||||||
Lines="$(ActualEmccVersion)"
|
|
||||||
Overwrite="true" />
|
|
||||||
|
|
||||||
<Copy SourceFiles="runtime\pinvoke.h"
|
<Copy SourceFiles="runtime\pinvoke.h"
|
||||||
DestinationFolder="$(NativeBinDir)include\wasm"
|
DestinationFolder="$(NativeBinDir)include\wasm"
|
||||||
SkipUnchangedFiles="true" />
|
SkipUnchangedFiles="true" />
|
||||||
|
|
||||||
<Copy SourceFiles="runtime/driver.c;
|
<Copy SourceFiles="runtime/driver.c;
|
||||||
runtime/pinvoke.c;
|
runtime/pinvoke.c;
|
||||||
runtime/corebindings.c;
|
runtime/corebindings.c;
|
||||||
runtime/binding_support.js;
|
runtime/binding_support.js;
|
||||||
runtime/dotnet_support.js;
|
runtime/dotnet_support.js;
|
||||||
runtime/library_mono.js;
|
runtime/library_mono.js;
|
||||||
$(SystemNativeDir)\pal_random.js;
|
$(SystemNativeDir)\pal_random.js;"
|
||||||
$(WasmVersionFile);"
|
|
||||||
DestinationFolder="$(NativeBinDir)src"
|
DestinationFolder="$(NativeBinDir)src"
|
||||||
SkipUnchangedFiles="true" />
|
SkipUnchangedFiles="true" />
|
||||||
|
|
||||||
|
@ -196,10 +260,6 @@
|
||||||
DestinationFolder="$(NativeBinDir)"
|
DestinationFolder="$(NativeBinDir)"
|
||||||
SkipUnchangedFiles="true" />
|
SkipUnchangedFiles="true" />
|
||||||
|
|
||||||
<WriteLinesToFile File="$(NativeBinDir)src\emcc-flags.txt"
|
|
||||||
Lines="$(EmccFlags)"
|
|
||||||
WriteOnlyWhenDifferent="true" />
|
|
||||||
|
|
||||||
<Copy SourceFiles="$(NativeBinDir)dotnet.js;
|
<Copy SourceFiles="$(NativeBinDir)dotnet.js;
|
||||||
$(NativeBinDir)dotnet.wasm;
|
$(NativeBinDir)dotnet.wasm;
|
||||||
$(NativeBinDir)dotnet.timezones.blat"
|
$(NativeBinDir)dotnet.timezones.blat"
|
||||||
|
@ -210,11 +270,11 @@
|
||||||
<WasmHeaderFiles Include="$(NativeBinDir)include\wasm\*.h" />
|
<WasmHeaderFiles Include="$(NativeBinDir)include\wasm\*.h" />
|
||||||
<WasmSrcFiles Include="$(NativeBinDir)src\*.c;
|
<WasmSrcFiles Include="$(NativeBinDir)src\*.c;
|
||||||
$(NativeBinDir)src\*.js;
|
$(NativeBinDir)src\*.js;
|
||||||
$(NativeBinDir)src\emcc-flags.txt;
|
$(_EmccDefaultsRspPath);
|
||||||
$(NativeBinDir)src\emcc-version.txt" />
|
$(NativeBinDir)src\Emcc.props" />
|
||||||
<IcuDataFiles Include="$(NativeBinDir)*.dat" />
|
<IcuDataFiles Include="$(NativeBinDir)*.dat" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Copy SourceFiles="@(WasmHeaderFiles)"
|
<Copy SourceFiles="@(WasmHeaderFiles)"
|
||||||
DestinationFolder="$(MicrosoftNetCoreAppRuntimePackNativeDir)include\wasm"
|
DestinationFolder="$(MicrosoftNetCoreAppRuntimePackNativeDir)include\wasm"
|
||||||
SkipUnchangedFiles="true" />
|
SkipUnchangedFiles="true" />
|
||||||
|
|
|
@ -129,7 +129,13 @@
|
||||||
WasmAppBuilder expects in native/-->
|
WasmAppBuilder expects in native/-->
|
||||||
<RunTimeDependencyCopyLocal
|
<RunTimeDependencyCopyLocal
|
||||||
Include="@(LibrariesRuntimeFiles)"
|
Include="@(LibrariesRuntimeFiles)"
|
||||||
TargetDir="runtimepack/native/"/>
|
TargetDir="runtimepack/native/%(LibrariesRuntimeFiles.NativeSubDirectory)/"
|
||||||
|
Condition="'%(LibrariesRuntimeFiles.NativeSubDirectory)' != ''" />
|
||||||
|
|
||||||
|
<RunTimeDependencyCopyLocal
|
||||||
|
Include="@(LibrariesRuntimeFiles)"
|
||||||
|
TargetDir="runtimepack/native/"
|
||||||
|
Condition="'%(LibrariesRuntimeFiles.NativeSubDirectory)' == ''" />
|
||||||
|
|
||||||
<RunTimeDependencyCopyLocal
|
<RunTimeDependencyCopyLocal
|
||||||
Include="$(ArtifactsDir)\TargetingPack\**"
|
Include="$(ArtifactsDir)\TargetingPack\**"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue