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)