diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml
index b0753c0c69ef23..42e3df05d637de 100644
--- a/eng/pipelines/common/platform-matrix.yml
+++ b/eng/pipelines/common/platform-matrix.yml
@@ -169,7 +169,7 @@ jobs:
archType: wasm
platform: WebAssembly_wasm
container:
- image: ubuntu-16.04-20200401182342-fe8b85d
+ image: ubuntu-18.04-webassembly-20200407092345-059fef0
registry: mcr
jobParameters:
runtimeFlavor: ${{ parameters.runtimeFlavor }}
diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml
index 9beb7e42f0028e..33f25fed2d0ba6 100644
--- a/eng/pipelines/mono/templates/build-job.yml
+++ b/eng/pipelines/mono/templates/build-job.yml
@@ -71,6 +71,13 @@ jobs:
- ${{ if eq(parameters.osGroup, 'Android') }}:
- name: osOverride
value: -os Android
+ - ${{ if eq(parameters.osGroup, 'WebAssembly') }}:
+ - name: EMSDK_PATH
+ value: $(Build.BinariesDirectory)/emsdk
+ - name: archType
+ value: wasm
+ - name: osOverride
+ value: '-os WebAssembly'
- ${{ parameters.variables }}
steps:
@@ -87,6 +94,16 @@ jobs:
- script: $(Build.SourcesDirectory)\eng\common\init-tools-native.cmd -InstallDirectory $(Build.SourcesDirectory)\native-tools -Force
displayName: Install native dependencies
+ - ${{ if eq(parameters.osGroup, 'WebAssembly') }}:
+ - script: |
+ set -v
+ EMSCRIPTEN_VERSION=1.39.9
+ git clone https://github.com/emscripten-core/emsdk.git $(EMSDK_PATH)
+ cd $(EMSDK_PATH)
+ ./emsdk install ${EMSCRIPTEN_VERSION}-upstream
+ ./emsdk activate --embedded ${EMSCRIPTEN_VERSION}-upstream
+ displayName: Install Emscripten
+
# Build
- ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
- script: ./build$(scriptExt) -subsetcategory mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci /p:MonoEnableLLVM=${{ parameters.llvm }}
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 2bf8140c146e83..11967488ff65b6 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -264,6 +264,7 @@ jobs:
- Linux_arm
- Linux_arm64
- Linux_musl_x64
+ - WebAssembly_wasm
# - Linux_musl_arm64
- Windows_NT_x64
# - Windows_NT_x86
diff --git a/src/mono/Directory.Build.props b/src/mono/Directory.Build.props
index 3492d626747429..a14345797c1766 100644
--- a/src/mono/Directory.Build.props
+++ b/src/mono/Directory.Build.props
@@ -41,7 +41,8 @@
true
true
true
- true
+ true
+ true
diff --git a/src/mono/mono.proj b/src/mono/mono.proj
index 55c4e17fba9993..5a886bcbbd3ca9 100644
--- a/src/mono/mono.proj
+++ b/src/mono/mono.proj
@@ -18,6 +18,8 @@
libmonosgen-2.0.so
libmono.a
libmonosgen-2.0.a
+ libmono.a
+ libmono.a
$(CoreClrFileName)
$(Configuration)
$(Configuration)
@@ -411,6 +413,31 @@
<_MonoSTRIPOption>STRIP="$(_MonoTuple)-strip"
+
+
+
+
+ <_MonoConfigureParams Include="--host=wasm32"/>
+ <_MonoConfigureParams Include="--disable-boehm" />
+ <_MonoConfigureParams Include="--disable-btls" />
+ <_MonoConfigureParams Include="--disable-executables" />
+ <_MonoConfigureParams Include="--disable-iconv" />
+ <_MonoConfigureParams Include="--disable-mcs-build" />
+ <_MonoConfigureParams Include="--disable-nls" />
+ <_MonoConfigureParams Include="--disable-visibility-hidden" />
+ <_MonoConfigureParams Include="--enable-maintainer-mode" />
+ <_MonoConfigureParams Include="--enable-llvm-runtime"/>
+ <_MonoConfigureParams Include="--enable-icall-export"/>
+ <_MonoConfigureParams Include="--disable-icall-tables"/>
+ <_MonoConfigureParams Include="--disable-crash-reporting"/>
+ <_MonoConfigureParams Include="--with-bitcode=yes"/>
+ <_MonoConfigureParams Include="--enable-minimal=ssa,com,jit,reflection_emit_save,portability,assembly_remapping,attach,verifier,full_messages,appdomains,security,sgen_marksweep_conc,sgen_split_nursery,sgen_gc_bridge,logging,remoting,shared_perfcounters,sgen_debug_helpers,soft_debug,interpreter,assert_messages,cleanup,mdb,gac"/>
+
+ <_MonoCFLAGS Include="-fexceptions" />
+ <_MonoCXXFLAGS Include="-fexceptions -s DISABLE_EXCEPTION_CATCHING=0" />
+ <_MonoAC_VARS Include="ac_cv_func_shm_open_working_with_mmap=no" />
+
+
<_MonoCFLAGS Include="-Wl,--build-id" />
@@ -443,9 +470,10 @@
<_MonoLDFLAGSOption Condition="@(_MonoLDFLAGS->Count()) > 0">LDFLAGS="@(_MonoLDFLAGS, ' ')"
<_MonoCCLDFLAGSOption Condition="@(_MonoCCLDFLAGS->Count()) > 0">CCLDFLAGS="@(_MonoCCLDFLAGS, ' ')"
- <_MonoConfigureCommand>@(_MonoConfigureParams, ' ') @(_MonoAC_VARS, ' ') $(_MonoCFLAGSOption) $(_MonoCXXFLAGSOption) $(_MonoCPPFLAGSOption) $(_MonoCXXCPPFLAGSOption) $(_MonoLDFLAGSOption) $(_MonoCCLDFLAGSOption) $(_MonoCCOption) $(_MonoCXXOption) $(_MonoAROption) $(_MonoASOption) $(_MonoCPPOption) $(_MonoCXXCPPOption) $(_MonoDLLTOOLOption) $(_MonoLDOption) $(_MonoOBJDUMPOption) $(_MonoRANLIBOption) $(_MonoCMAKEOption) $(_MonoSTRIPOption)
- <_MonoConfigureCommand Condition="'$(_MonoCCOption)' == '' and '$(_MonoCXXOption)' == ''">bash -c 'source $(RepositoryEngineeringDir)native/init-compiler.sh $(Platform) clang && $(MonoProjectRoot)configure $(_MonoConfigureCommand)'
- <_MonoConfigureCommand Condition="'$(_MonoCCOption)' != '' and '$(_MonoCXXOption)' != ''">$(MonoProjectRoot)configure $(_MonoConfigureCommand)
+ <_MonoConfigureOptions>@(_MonoConfigureParams, ' ') @(_MonoAC_VARS, ' ') $(_MonoCFLAGSOption) $(_MonoCXXFLAGSOption) $(_MonoCPPFLAGSOption) $(_MonoCXXCPPFLAGSOption) $(_MonoLDFLAGSOption) $(_MonoCCLDFLAGSOption) $(_MonoCCOption) $(_MonoCXXOption) $(_MonoAROption) $(_MonoASOption) $(_MonoCPPOption) $(_MonoCXXCPPOption) $(_MonoDLLTOOLOption) $(_MonoLDOption) $(_MonoOBJDUMPOption) $(_MonoRANLIBOption) $(_MonoCMAKEOption) $(_MonoSTRIPOption)
+ <_MonoConfigureCommand Condition="'$(_MonoCCOption)' == '' and '$(_MonoCXXOption)' == ''">bash -c 'source $(RepositoryEngineeringDir)native/init-compiler.sh $(Platform) clang && $(MonoProjectRoot)configure $(_MonoConfigureOptions)'
+ <_MonoConfigureCommand Condition="'$(_MonoCCOption)' != '' and '$(_MonoCXXOption)' != ''">$(MonoProjectRoot)configure $(_MonoConfigureOptions)
+ <_MonoConfigureCommand Condition="'$(TargetsWASM)' == 'true'">bash -c 'source $(EMSDK_PATH)/emsdk_env.sh && emconfigure $(MonoProjectRoot)configure $(_MonoConfigureOptions)'
@@ -464,7 +492,7 @@
-
+
@@ -478,7 +506,7 @@
-
+
@@ -488,6 +516,12 @@
+
+
+
+
+
+
@@ -657,13 +691,14 @@
-
+
<_MonoRuntimeFilePath Condition="'$(TargetsWindows)' == 'true' and '$(Platform)' == 'x64'">$(MonoObjDir)x64\Bin\$(Configuration)\mono-2.0-sgen.dll
<_MonoRuntimeFilePath Condition="'$(TargetsWindows)' == 'true' and '$(Platform)' == 'x86'">$(MonoObjDir)Win32\Bin\$(Configuration)\mono-2.0-sgen.dll
<_MonoRuntimeFilePath Condition="'$(TargetsOSX)' == 'true'">$(MonoObjDir)mono\mini\.libs\libmonosgen-2.0.dylib
<_MonoRuntimeFilePath Condition="'$(TargetsiOS)' == 'true'">$(MonoObjDir)out\lib\libmonosgen-2.0.dylib
<_MonoRuntimeFilePath Condition="'$(TargetsAndroid)' == 'true'">$(MonoObjDir)out\lib\libmonosgen-2.0.so
+ <_MonoRuntimeFilePath Condition="'$(TargetsWASM)' == 'true'">$(MonoObjDir)mono\mini\.libs\libmonosgen-2.0.a
<_MonoRuntimeFilePath Condition="'$(_MonoRuntimeFilePath)' == ''">$(MonoObjDir)mono\mini\.libs\libmonosgen-2.0.so
<_MonoRuntimeStaticFilePath Condition="'$(TargetsiOS)' == 'true' or '$(TargetsAndroid)' == 'true'">$(MonoObjDir)out\lib\libmonosgen-2.0.a
<_MonoAotCrossFilePath Condition="'$(TargetsiOS)' == 'true' and '$(Platform)' == 'arm64'">$(MonoObjDir)cross\out\bin\aarch64-darwin-mono-sgen
@@ -691,7 +726,7 @@
+ Condition="'$(TargetsiOS)' == 'true' or '$(TargetsAndroid)' == 'true' or '$(TargetsWASM)' == 'true'"/>
diff --git a/src/mono/netcore/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/mono/netcore/System.Private.CoreLib/System.Private.CoreLib.csproj
index cd45f2dc12df44..8f303e8c6e746f 100644
--- a/src/mono/netcore/System.Private.CoreLib/System.Private.CoreLib.csproj
+++ b/src/mono/netcore/System.Private.CoreLib/System.Private.CoreLib.csproj
@@ -18,7 +18,7 @@
$(BinDir)IL/
Debug;Release;Checked
- x64;x86;arm;arm64;wasm32
+ x64;x86;arm;arm64;wasm
true
true
@@ -82,7 +82,7 @@
AnyCPU
TARGET_64BIT;TARGET_ARM64;$(DefineConstants)
-
+
AnyCPU
TARGET_32BIT;$(DefineConstants)