From 770339084a9994596dcb4b6bc48cdac4b1806f3a Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Thu, 2 Apr 2020 23:04:05 -0400 Subject: [PATCH 1/8] Add beginnings of WebAssembly build support for mono. --- eng/pipelines/common/platform-matrix.yml | 2 +- eng/pipelines/mono/templates/build-job.yml | 17 +++++++ eng/pipelines/runtime.yml | 1 + src/mono/Directory.Build.props | 3 +- src/mono/mono.proj | 49 ++++++++++++++++--- .../System.Private.CoreLib.csproj | 4 +- 6 files changed, 65 insertions(+), 11 deletions(-) diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml index b0753c0c69ef23..56d42970971b4a 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-android-20200401093035-1517ea2 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 cae511090c792b..58a9741326f74d 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: ./mono$(scriptExt) -configuration $(buildConfig) -arch $(archType) $(osOverride) -ci /p:MonoEnableLLVM=${{ parameters.llvm }} diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 71834428f063e7..a94775295ea344 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 f77c6f89f0fbb7..61964ed1c2f827 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 3f3f04da931eca..5a1e4bc92cc42e 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -22,6 +22,8 @@ libmonosgen-2.0.so libmono.a libmonosgen-2.0.a + libmono.a + libmono.a $(CoreClrFileName) $(Configuration) $(Configuration) @@ -415,6 +417,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" /> @@ -447,9 +474,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)' @@ -468,7 +496,7 @@ - + @@ -482,7 +510,7 @@ - + @@ -492,6 +520,12 @@ + + + + + + @@ -525,13 +559,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 @@ -559,7 +594,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 7c0684cfbe85b2..6d80229e2c4ac5 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) From b803077e94241abe9b97afe25159e2c34b2ee675 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Thu, 2 Apr 2020 23:04:05 -0400 Subject: [PATCH 2/8] Add beginnings of WebAssembly build support for mono. --- eng/pipelines/common/platform-matrix.yml | 2 +- eng/pipelines/mono/templates/build-job.yml | 17 +++++++ eng/pipelines/runtime.yml | 1 + src/mono/Directory.Build.props | 3 +- src/mono/mono.proj | 49 ++++++++++++++++--- .../System.Private.CoreLib.csproj | 4 +- 6 files changed, 65 insertions(+), 11 deletions(-) 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) From 03bd7da7a12536c763b079c5cb34e3a2f7d6993c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Tue, 7 Apr 2020 14:32:32 +0200 Subject: [PATCH 3/8] Set emcc as the compiler for libraries build --- src/libraries/Native/build-native.sh | 5 ++++- src/mono/mono.proj | 6 ------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libraries/Native/build-native.sh b/src/libraries/Native/build-native.sh index 1cf93396299608..11bea385be91ba 100755 --- a/src/libraries/Native/build-native.sh +++ b/src/libraries/Native/build-native.sh @@ -49,10 +49,13 @@ source "$__RepoRootDir"/eng/native/build-commons.sh if [[ "$__BuildArch" == wasm ]]; then if [[ -z "$EMSDK_PATH" ]]; then - echo "Error: Should set EMSDK_PATH environment variable pointing to emsdk root." + echo "Error: You need to set the EMSDK_PATH environment variable pointing to the emscripten SDK root." exit 1 fi source "$EMSDK_PATH"/emsdk_env.sh + + export CLR_CC=$(which emcc) + export CLR_CXX=$(which em++) elif [[ "$__TargetOS" == iOS ]]; then # nothing to do here true diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 5a886bcbbd3ca9..eb0b68ffff3d7f 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -516,12 +516,6 @@ - - - - - - From 9712249305b3893b4ee4bc6e779d2b98b44ee7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Tue, 7 Apr 2020 14:36:39 +0200 Subject: [PATCH 4/8] Add default subsets for webassembly build --- eng/Subsets.props | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/Subsets.props b/eng/Subsets.props index 748d226815fb8b..4791ee268a60a2 100644 --- a/eng/Subsets.props +++ b/eng/Subsets.props @@ -50,6 +50,7 @@ libraries-installer-coreclr-mono libraries-installer-mono + libraries-mono @@ -79,7 +80,7 @@ - Mono + Mono Mono CoreCLR From 73d2a7c10d00b6f631f1a2a369c78c25418651e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Tue, 7 Apr 2020 14:45:04 +0200 Subject: [PATCH 5/8] Use WebAssembly Docker image --- eng/pipelines/libraries/build-job.yml | 11 +---------- eng/pipelines/mono/templates/build-job.yml | 12 +----------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/eng/pipelines/libraries/build-job.yml b/eng/pipelines/libraries/build-job.yml index 402b2aefadf0d2..3c346902b080bb 100644 --- a/eng/pipelines/libraries/build-job.yml +++ b/eng/pipelines/libraries/build-job.yml @@ -62,7 +62,7 @@ jobs: - _addtionalBuildArguments: '' - ${{ parameters.variables }} - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - - EMSDK_PATH: $(Build.BinariesDirectory)/emsdk + - EMSDK_PATH: /usr/local/emscripten - ${{ if eq(parameters.runTests, true) }}: - _addtionalBuildArguments: /p:IncludeLibrariesTestSubset=true /p:ArchiveTests=true @@ -78,15 +78,6 @@ jobs: ln -s /usr/local/opt/openssl/lib/pkgconfig/openssl.pc /usr/local/lib/pkgconfig/ displayName: Install Build Dependencies - - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - - script: | - EMSCRIPTEN_VERSION=1.38.47 - 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 - - ${{ if eq(parameters.isOfficialBuild, true) }}: - template: /eng/pipelines/common/restore-internal-tools.yml parameters: diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml index 33f25fed2d0ba6..073ebae84dd729 100644 --- a/eng/pipelines/mono/templates/build-job.yml +++ b/eng/pipelines/mono/templates/build-job.yml @@ -73,7 +73,7 @@ jobs: value: -os Android - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - name: EMSDK_PATH - value: $(Build.BinariesDirectory)/emsdk + value: /usr/local/emscripten - name: archType value: wasm - name: osOverride @@ -94,16 +94,6 @@ 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 }} From 9e130dca4d000c005a7585e102f2b280214a098c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Tue, 7 Apr 2020 14:38:40 +0200 Subject: [PATCH 6/8] Fix various problems in the build --- eng/native/build-commons.sh | 9 +++++++-- eng/native/configureplatform.cmake | 20 ++++++++++++++++--- eng/native/configuretools.cmake | 2 +- eng/native/gen-buildsys.sh | 4 ++++ src/libraries/Native/Unix/CMakeLists.txt | 3 +++ .../CMakeLists.txt | 2 +- .../Native/Unix/System.Native/CMakeLists.txt | 2 +- .../System.Native/pal_runtimeinformation.c | 4 ++-- src/libraries/Native/Unix/configure.cmake | 6 +++--- src/mono/mono.proj | 8 +++++--- 10 files changed, 44 insertions(+), 16 deletions(-) diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh index 9c93eb9bd81e55..425ed7ddb0ea95 100755 --- a/eng/native/build-commons.sh +++ b/eng/native/build-commons.sh @@ -151,8 +151,13 @@ build_native() popd else - echo "Executing cmake --build \"$intermediatesDir\" --target install -j $__NumProc" - cmake --build "$intermediatesDir" --target install -j "$__NumProc" + cmake_command=cmake + if [[ "$build_arch" == "wasm" ]]; then + cmake_command="emcmake $cmake_command" + fi + + echo "Executing $cmake_command --build \"$intermediatesDir\" --target install -j $__NumProc" + $cmake_command --build "$intermediatesDir" --target install -j "$__NumProc" fi local exit_code="$?" diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index 4e25a3df255eba..1f2cf54e516f5b 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -154,7 +154,8 @@ if(CLR_CMAKE_HOST_OS STREQUAL Windows) endif(CLR_CMAKE_HOST_OS STREQUAL Windows) if(CLR_CMAKE_HOST_OS STREQUAL Emscripten) - set(CLR_CMAKE_HOST_ARCH_WASM 1) + #set(CLR_CMAKE_HOST_UNIX 1) # TODO: this should be reenabled but it activates a bunch of additional compiler flags in configurecompiler.cmake + set(CLR_CMAKE_HOST_UNIX_WASM 1) endif(CLR_CMAKE_HOST_OS STREQUAL Emscripten) #-------------------------------------------- @@ -184,6 +185,9 @@ elseif(CLR_CMAKE_HOST_UNIX_AMD64) elseif(CLR_CMAKE_HOST_UNIX_X86) set(CLR_CMAKE_HOST_ARCH_I386 1) set(CLR_CMAKE_HOST_ARCH "x86") +elseif(CLR_CMAKE_HOST_UNIX_WASM) + set(CLR_CMAKE_HOST_ARCH_WASM 1) + set(CLR_CMAKE_HOST_ARCH "wasm") elseif(WIN32) # CLR_CMAKE_HOST_ARCH is passed in as param to cmake if (CLR_CMAKE_HOST_ARCH STREQUAL x64) @@ -225,6 +229,8 @@ if (CLR_CMAKE_TARGET_ARCH STREQUAL x64) set(CLR_CMAKE_TARGET_ARCH_ARM 1) set(CLR_CMAKE_TARGET_ARCH_ARMV7L 1) set(ARM_SOFTFP 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL wasm) + set(CLR_CMAKE_TARGET_ARCH_WASM 1) else() clr_unknown_arch() endif() @@ -289,6 +295,12 @@ if(CLR_CMAKE_TARGET_OS STREQUAL SunOS) set(CLR_CMAKE_TARGET_SUNOS 1) endif(CLR_CMAKE_TARGET_OS STREQUAL SunOS) +if(CLR_CMAKE_TARGET_OS STREQUAL Emscripten) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_LINUX 1) + set(CLR_CMAKE_TARGET_EMSCRIPTEN 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL Emscripten) + if(CLR_CMAKE_TARGET_UNIX) if(CLR_CMAKE_TARGET_ARCH STREQUAL x64) set(CLR_CMAKE_TARGET_UNIX_AMD64 1) @@ -300,6 +312,8 @@ if(CLR_CMAKE_TARGET_UNIX) set(CLR_CMAKE_TARGET_UNIX_ARM64 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) set(CLR_CMAKE_TARGET_UNIX_X86 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL wasm) + set(CLR_CMAKE_TARGET_UNIX_WASM 1) else() clr_unknown_arch() endif() @@ -326,7 +340,7 @@ else() endif() endif() -if(NOT CLR_CMAKE_HOST_ARCH_WASM) +if(NOT CLR_CMAKE_TARGET_EMSCRIPTEN) if(NOT CLR_CMAKE_TARGET_ANDROID) # Android requires PIC and CMake handles this so we don't need the check # All code we build should be compiled as position independent get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) @@ -342,4 +356,4 @@ if(NOT CLR_CMAKE_TARGET_ANDROID) # Android requires PIC and CMake handles this s endif() set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif(NOT CLR_CMAKE_TARGET_ANDROID) -endif(NOT CLR_CMAKE_HOST_ARCH_WASM) +endif(NOT CLR_CMAKE_TARGET_EMSCRIPTEN) diff --git a/eng/native/configuretools.cmake b/eng/native/configuretools.cmake index 72c67de642716f..048085b0d740cb 100644 --- a/eng/native/configuretools.cmake +++ b/eng/native/configuretools.cmake @@ -6,7 +6,7 @@ if (CMAKE_C_COMPILER MATCHES "-?[0-9]+(\.[0-9]+)?$") set(CLR_CMAKE_COMPILER_FILE_NAME_VERSION "${CMAKE_MATCH_0}") endif() -if(NOT WIN32) +if(NOT WIN32 AND NOT CLR_CMAKE_TARGET_ARCH_WASM) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(APPLE) set(TOOLSET_PREFIX "") diff --git a/eng/native/gen-buildsys.sh b/eng/native/gen-buildsys.sh index 4e39d16e8243b4..f27bb33e357785 100755 --- a/eng/native/gen-buildsys.sh +++ b/eng/native/gen-buildsys.sh @@ -87,6 +87,10 @@ if [[ "$scan_build" == "ON" && -n "$SCAN_BUILD_COMMAND" ]]; then cmake_command="$SCAN_BUILD_COMMAND $cmake_command" fi +if [[ "$build_arch" == "wasm" ]]; then + cmake_command="emcmake $cmake_command" +fi + # Include CMAKE_USER_MAKE_RULES_OVERRIDE as uninitialized since it will hold its value in the CMake cache otherwise can cause issues when branch switching $cmake_command \ -G "$generator" \ diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index b3c9613a0e10b0..fcf2e4e082332f 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -61,6 +61,9 @@ elseif (CLR_CMAKE_TARGET_ARCH_I386) add_definitions(-DTARGET_32BIT=1) add_definitions(-DTARGET_X86) add_definitions(-D_FILE_OFFSET_BITS=64) +elseif (CLR_CMAKE_TARGET_ARCH_WASM) + add_definitions(-DTARGET_32BIT=1) + add_definitions(-DTARGET_WASM) elseif (CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DTARGET_64BIT=1) add_definitions(-DTARGET_ARM64) diff --git a/src/libraries/Native/Unix/System.IO.Compression.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.IO.Compression.Native/CMakeLists.txt index 1cd9ca778923a2..3315941e1acebc 100644 --- a/src/libraries/Native/Unix/System.IO.Compression.Native/CMakeLists.txt +++ b/src/libraries/Native/Unix/System.IO.Compression.Native/CMakeLists.txt @@ -1,6 +1,6 @@ project(System.IO.Compression.Native C) -if (CLR_CMAKE_TARGET_WASM) +if (CLR_CMAKE_TARGET_ARCH_WASM) add_definitions(-s USE_ZLIB) elseif (CLR_CMAKE_TARGET_ANDROID) # need special case here since we want to link against libz.so but find_package() would resolve libz.a diff --git a/src/libraries/Native/Unix/System.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Native/CMakeLists.txt index 11d3456ec7c3fe..909d1a283ba8e2 100644 --- a/src/libraries/Native/Unix/System.Native/CMakeLists.txt +++ b/src/libraries/Native/Unix/System.Native/CMakeLists.txt @@ -30,7 +30,7 @@ else () set(NATIVE_SOURCES ${NATIVE_SOURCES} pal_console.c) endif () -if (CLR_CMAKE_TARGET_LINUX) +if (CLR_CMAKE_TARGET_LINUX AND NOT CLR_CMAKE_TARGET_ARCH_WASM) set(NATIVE_SOURCES ${NATIVE_SOURCES} pal_networkchange.c) if (!HAVE_LINUX_RTNETLINK_H) diff --git a/src/libraries/Native/Unix/System.Native/pal_runtimeinformation.c b/src/libraries/Native/Unix/System.Native/pal_runtimeinformation.c index 16ae31faa84eb1..ac83f78656a982 100644 --- a/src/libraries/Native/Unix/System.Native/pal_runtimeinformation.c +++ b/src/libraries/Native/Unix/System.Native/pal_runtimeinformation.c @@ -51,7 +51,7 @@ int32_t SystemNative_GetOSArchitecture() return ARCH_ARM64; #elif defined(TARGET_AMD64) return ARCH_X64; -#elif defined(TARGET_X86) +#elif defined(TARGET_X86) || defined(TARGET_WASM) // TODO: add arch for WASM return ARCH_X86; #else #error Unidentified Architecture @@ -71,7 +71,7 @@ int32_t SystemNative_GetProcessArchitecture() return ARCH_ARM64; #elif defined(TARGET_AMD64) return ARCH_X64; -#elif defined(TARGET_X86) +#elif defined(TARGET_X86) || defined(TARGET_WASM) // TODO: add arch for WASM return ARCH_X86; #else #error Unidentified Architecture diff --git a/src/libraries/Native/Unix/configure.cmake b/src/libraries/Native/Unix/configure.cmake index c97d318fee90a9..59a59e9b539354 100644 --- a/src/libraries/Native/Unix/configure.cmake +++ b/src/libraries/Native/Unix/configure.cmake @@ -10,6 +10,8 @@ include(CheckTypeSize) if (CLR_CMAKE_TARGET_ANDROID) set(PAL_UNIX_NAME \"ANDROID\") +elseif (CLR_CMAKE_TARGET_ARCH_WASM) + set(PAL_UNIX_NAME \"WEBASSEMBLY\") elseif (CLR_CMAKE_TARGET_LINUX) set(PAL_UNIX_NAME \"LINUX\") elseif (CLR_CMAKE_TARGET_OSX) @@ -26,8 +28,6 @@ elseif (CLR_CMAKE_TARGET_FREEBSD) set(CMAKE_REQUIRED_INCLUDES ${CROSS_ROOTFS}/usr/local/include) elseif (CLR_CMAKE_TARGET_NETBSD) set(PAL_UNIX_NAME \"NETBSD\") -elseif (CLR_CMAKE_TARGET_ARCH_WASM) - set(PAL_UNIX_NAME \"WEBASSEMBLY\") else () message(FATAL_ERROR "Unknown platform. Cannot define PAL_UNIX_NAME, used by RuntimeInformation.") endif () @@ -825,7 +825,7 @@ set (CMAKE_REQUIRED_LIBRARIES ${PREVIOUS_CMAKE_REQUIRED_LIBRARIES}) set (HAVE_INOTIFY 0) if (HAVE_INOTIFY_INIT AND HAVE_INOTIFY_ADD_WATCH AND HAVE_INOTIFY_RM_WATCH) set (HAVE_INOTIFY 1) -elseif (CLR_CMAKE_TARGET_LINUX) +elseif (CLR_CMAKE_TARGET_LINUX AND NOT CLR_CMAKE_TARGET_ARCH_WASM) message(FATAL_ERROR "Cannot find inotify functions on a Linux platform.") endif() diff --git a/src/mono/mono.proj b/src/mono/mono.proj index eb0b68ffff3d7f..f6c86af3ddb0e6 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -506,9 +506,11 @@ - + - + + + @@ -685,7 +687,7 @@ - + <_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 From 1da9cc8affdcbc6958f462a68c4f8593e125fc60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Thu, 9 Apr 2020 18:44:34 +0200 Subject: [PATCH 7/8] Bump webassembly image --- eng/pipelines/common/platform-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml index 60865170faf0d5..fe0765b81050e3 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-18.04-webassembly-20200407092345-059fef0 + image: ubuntu-18.04-webassembly-20200409132031-f70ea41 registry: mcr jobParameters: runtimeFlavor: ${{ parameters.runtimeFlavor }} From a4b955f3621651e803843fa678cd4b6db12e5e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Thu, 9 Apr 2020 20:18:37 +0200 Subject: [PATCH 8/8] Use Mono runtime for webassembly builds --- eng/pipelines/libraries/base-job.yml | 5 +---- eng/pipelines/libraries/build-job.yml | 13 +++++-------- eng/pipelines/runtime.yml | 4 +++- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/eng/pipelines/libraries/base-job.yml b/eng/pipelines/libraries/base-job.yml index c1d343e6b8da56..0208840c23ed1d 100644 --- a/eng/pipelines/libraries/base-job.yml +++ b/eng/pipelines/libraries/base-job.yml @@ -63,6 +63,7 @@ jobs: - ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubGroup, ''), eq(parameters.archType, 'arm')) }}: - _runtimeOSArg: /p:RuntimeOS=ubuntu.16.04 + # force a value for OS when cross-building WebAssembly - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - _runtimeOSArg: -os ${{ parameters.osGroup }} @@ -107,10 +108,6 @@ jobs: - _runtimeArtifactsPathArg: ' /p:RuntimeArtifactsPath=$(_runtimeDownloadPath)' - _testRunNamePrefixSuffix: $(runtimeFlavorName)_${{ parameters.liveRuntimeBuildConfig }} - # WebAssembly uses linux implementation detail - - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - - _runtimeArtifactName: 'CoreLib_Linux_x64_${{ parameters.liveRuntimeBuildConfig }}' - # Windows variables - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: - _runtimeOSArg: /p:RuntimeOS=win10 diff --git a/eng/pipelines/libraries/build-job.yml b/eng/pipelines/libraries/build-job.yml index 78660b358158f6..3a1af6d9379a97 100644 --- a/eng/pipelines/libraries/build-job.yml +++ b/eng/pipelines/libraries/build-job.yml @@ -49,14 +49,11 @@ jobs: ${{ if ne(parameters.liveRuntimeBuildConfig, '') }}: dependsOn: - - ${{ if ne(parameters.osGroup, 'WebAssembly') }}: - # Use corelib dependencies for coreclr and non test builds - - ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), eq(parameters.testScope, '')) }}: - - ${{ format('coreclr_corelib_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveRuntimeBuildConfig) }} - - ${{ if or(ne(parameters.runtimeFlavor, 'coreclr'), ne(parameters.testScope, '')) }}: - - ${{ format('{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeFlavor, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveRuntimeBuildConfig) }} - - ${{ if eq(parameters.osGroup, 'WebAssembly') }}: - - ${{ format('coreclr_corelib_build_{1}{2}_{3}_{4}', parameters.runtimeFlavor, 'linux', parameters.osSubgroup, 'x64', parameters.liveRuntimeBuildConfig) }} + # Use corelib dependencies for coreclr and non test builds + - ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), eq(parameters.testScope, '')) }}: + - ${{ format('coreclr_corelib_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveRuntimeBuildConfig) }} + - ${{ if or(ne(parameters.runtimeFlavor, 'coreclr'), ne(parameters.testScope, '')) }}: + - ${{ format('{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeFlavor, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveRuntimeBuildConfig) }} variables: - _subset: libs diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 71aed227de1a6e..9e90f79a461569 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -303,6 +303,7 @@ jobs: - Linux_arm - Linux_arm64 - Linux_musl_x64 + - WebAssembly_wasm # - Linux_musl_arm64 - Windows_NT_x64 # - Windows_NT_x86 @@ -421,6 +422,7 @@ jobs: # - iOS_arm # https://github.com/dotnet/runtime/issues/34465 - iOS_arm64 - iOS_x64 + - WebAssembly_wasm jobParameters: liveRuntimeBuildConfig: release @@ -439,6 +441,7 @@ jobs: # - iOS_arm # https://github.com/dotnet/runtime/issues/34465 - iOS_arm64 - iOS_x64 + - WebAssembly_wasm jobParameters: liveRuntimeBuildConfig: debug @@ -450,7 +453,6 @@ jobs: jobTemplate: /eng/pipelines/libraries/build-job.yml buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - - WebAssembly_wasm - ${{ if eq(variables['isFullMatrix'], false) }}: - Windows_NT_x86 jobParameters: