diff --git a/eng/native/gen-buildsys.cmd b/eng/native/gen-buildsys.cmd index 83682d69cfc39..eea8bc39be833 100644 --- a/eng/native/gen-buildsys.cmd +++ b/eng/native/gen-buildsys.cmd @@ -109,7 +109,7 @@ if not "%__ConfigureOnly%" == "1" ( ) if /i "%__UseEmcmake%" == "1" ( - call "!EMSDK_PATH!/emsdk_env.cmd" > nul 2>&1 && emcmake "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% + call "!EMSDK_PATH!/pre_emsdk_env.cmd" > nul 2>&1 && call "!EMSDK_PATH!/emsdk_env.cmd" > nul 2>&1 && emcmake "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% ) else ( "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% ) diff --git a/src/mono/browser/browser.proj b/src/mono/browser/browser.proj index 759fa68ae5474..1a787c18c1eab 100644 --- a/src/mono/browser/browser.proj +++ b/src/mono/browser/browser.proj @@ -415,13 +415,13 @@ $(CMakeBuildRuntimeConfigureCmd) -DENABLE_JS_INTEROP_BY_VALUE=1 $(CMakeBuildRuntimeConfigureCmd) $(CMakeConfigurationEmsdkPath) - call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.cmd'))" && $(CMakeBuildRuntimeConfigureCmd) - bash -c 'source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeConfigureCmd)' + call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'pre_emsdk_env.cmd'))" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.cmd'))" && $(CMakeBuildRuntimeConfigureCmd) + bash -c 'source $(EMSDK_PATH)/pre_emsdk_env.sh && source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeConfigureCmd)' -v cmake --build . --config $(Configuration) $(CmakeOptions) - call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.cmd'))" && $(CMakeBuildRuntimeCmd) - bash -c 'source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeCmd)' + call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'pre_emsdk_env.cmd'))" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.cmd'))" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.cmd'))" && $(CMakeBuildRuntimeCmd) + bash -c 'source $(EMSDK_PATH)/pre_emsdk_env.sh && source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeCmd)' <_CmakeEnvironmentVariable Include="ENABLE_JS_INTEROP_BY_VALUE=1" Condition="'$(WasmEnableJsInteropByValue)' != 'false'"/> diff --git a/src/mono/browser/build/BrowserWasmApp.targets b/src/mono/browser/build/BrowserWasmApp.targets index 3b5683433fe86..f15458a9273bf 100644 --- a/src/mono/browser/build/BrowserWasmApp.targets +++ b/src/mono/browser/build/BrowserWasmApp.targets @@ -175,12 +175,25 @@ + + + + + $([System.Text.RegularExpressions.Regex]::Match($(NuGetLocalsOutput), 'global-packages:\s*([^;]+)').Groups[1].Value) + + + $([System.IO.Path]::Combine($(GlobalPackagesPath), 'runtime.$(_portableHostOS)-$(BuildArchitecture).microsoft.netcore.runtime.wasm.node.transport')) <_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenSdkToolsPath)' == '' or !Exists('$(EmscriptenSdkToolsPath)'))">%24(EmscriptenSdkToolsPath)=$(EmscriptenSdkToolsPath) <_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenNodeToolsPath)' == '' or !Exists('$(EmscriptenNodeToolsPath)'))">%24(EmscriptenNodeToolsPath)=$(EmscriptenNodeToolsPath) <_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenUpstreamBinPath)' == '' or !Exists('$(EmscriptenUpstreamBinPath)'))">%24(EmscriptenUpstreamBinPath)=$(EmscriptenUpstreamBinPath) + + + + + <_ToolchainMissingErrorMessage Condition="'$(EMSDK_PATH)' == '' and '$(EmscriptenSdkToolsPath)' == ''">Could not find emscripten sdk. Either set %24(EMSDK_PATH), or use workloads to get the sdk. @@ -189,19 +202,24 @@ <_ToolchainMissingErrorMessage Condition="'$(_ToolchainMissingErrorMessage)' == '' and '$(_UsingEMSDK_PATH)' == 'true' and '$(_EMSDKMissingPaths)' != ''">Specified Emscripten sdk at %24(EMSDK_PATH)=$(EMSDK_PATH) is missing some paths: $(_EMSDKMissingPaths). <_IsToolchainMissing Condition="'$(_ToolchainMissingErrorMessage)' != ''">true + <_ToolchainMissingErrorMessage>$(_ToolchainMissingErrorMessage); [DEBUG] Directories at $(NodeTransportDir): %(NodeTransportDirContents.Identity); Directories at $(PackagesDir): %(PackagesDirContents.Identity); $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath))) $([MSBuild]::NormalizeDirectory($(EmscriptenNodeToolsPath))) $([MSBuild]::NormalizeDirectory($(EmscriptenUpstreamBinPath))) + <_EmscriptenNodePath>$([MSBuild]::NormalizePath($(EmscriptenNodeToolsPath), 'bin', 'node$(_ExeExt)')) + - + + + diff --git a/src/mono/browser/build/EmSdkRepo.Defaults.props b/src/mono/browser/build/EmSdkRepo.Defaults.props index aa94ded228bfc..9e28b902f891f 100644 --- a/src/mono/browser/build/EmSdkRepo.Defaults.props +++ b/src/mono/browser/build/EmSdkRepo.Defaults.props @@ -7,15 +7,20 @@ $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath), 'bin')) $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath), 'emscripten')) + <_PathToNugetsAvailable Condition="'$(NuGetPackageRoot)' != '' and '$(_portableHostOS)' != '' and '$(BuildArchitecture)' != '' and '$(NodePackageVersion)' != ''">true + - $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath), 'node', 'bin')) + $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath), 'node', 'bin')) + $([System.IO.Path]::Combine($(NuGetPackageRoot), 'runtime.$(_portableHostOS)-$(BuildArchitecture).microsoft.netcore.runtime.wasm.node.transport', '$(NodePackageVersion)', 'tools', '$(_portableHostOS)-$(BuildArchitecture)')) <_UsingEMSDK_PATH>true - $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath)python)) + <_PathToNugetsAvailable Condition="'$(NuGetPackageRoot)' != '' and '$(EmsdkVersion)' != '' and '$(BuildArchitecture)' != '' and '$(EmsdkPackageVersion)' != ''">true + $([MSBuild]::NormalizeDirectory($(EmscriptenSdkToolsPath)python)) + $([MSBuild]::NormalizeDirectory($([System.IO.Path]::Combine($(NuGetPackageRoot), 'Microsoft.NET.Runtime.Emscripten.$(EmsdkVersion).Python.win-$(BuildArchitecture)', '$(EmsdkPackageVersion)', 'tools')))) <_EMSDKMissingPaths Condition="'$(_EMSDKMissingPaths)' == '' and ('$(EmscriptenPythonToolsPath)' == '' or !Exists('$(EmscriptenPythonToolsPath)'))">%24(EmscriptenPythonToolsPath)=$(EmscriptenPythonToolsPath) diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 5be3d221fd5b7..885c9cba4f0a6 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -170,127 +170,54 @@ .ps1 $(ProvisionEmscriptenDir) - $([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)', 'browser')) - emsdk %(_VersionLines.Identity) - <_EmsdkPaths Condition="'$(HostOS)' != 'windows'"> -CURRENT_SCRIPT= -DIR="." - -# use shell specific method to get the path -# to the current file being source'd. -# -# To add a shell, add another conditional below, -# then add tests to scripts/test_source_env.sh - -if [ -n "%24{BASH_SOURCE-}" ]%3B then - CURRENT_SCRIPT="%24BASH_SOURCE" -elif [ -n "%24{ZSH_VERSION-}" ]%3B then - CURRENT_SCRIPT="%24{(%):-%x}" -elif [ -n "%24{KSH_VERSION-}" ]%3B then - CURRENT_SCRIPT=%24{.sh.file} -fi - -if [ -n "%24{CURRENT_SCRIPT-}" ]%3B then - DIR=%24(dirname "%24CURRENT_SCRIPT") - if [ -h "%24CURRENT_SCRIPT" ]%3B then - # Now work out actual DIR since this is part of a symlink. - # Since we can't be sure that readlink or realpath - # are available, use tools more likely to be installed. - # (This will still fail if sed is not available.) - SYMDIR=%24(dirname "%24(ls -l "%24CURRENT_SCRIPT" | sed -n "s/.*-> //p")") - if [ -z "%24SYMDIR" ]%3B then - SYMDIR="." - fi - FULLDIR="%24DIR/%24SYMDIR" - DIR=%24(cd "%24FULLDIR" > /dev/null 2>&1%3B /bin/pwd) - unset SYMDIR - unset FULLDIR - fi -fi -unset CURRENT_SCRIPT - -if [ ! -f "%24DIR/emscripten/emcmake.py" ]%3B then - echo "Error: unable to determine 'emsdk' directory. Perhaps you are using a shell or" 1>&2 - echo " environment that this script does not support." 1>&2 - echo 1>&2 - echo "A possible solution is to source this script while in the 'emsdk' directory." 1>&2 - echo 1>&2 - unset DIR - return -fi - -export EMSDK_PATH=%24{DIR}/ -unset DIR - -export DOTNET_EMSCRIPTEN_LLVM_ROOT=%24{EMSDK_PATH}bin/ -export DOTNET_EMSCRIPTEN_NODE_JS=%24{EMSDK_PATH}node/bin/node -export DOTNET_EMSCRIPTEN_BINARYEN_ROOT=%24{EMSDK_PATH} - - - <_EmsdkPaths Condition="'$(HostOS)' == 'windows'"> -@echo off - -set CURRENT_SCRIPT=%~dp0 -set EMSDK_PATH=%CURRENT_SCRIPT:~0,-1%\ - -set EMSDK_PYTHON=%EMSDK_PATH%python\python.exe -set DOTNET_EMSCRIPTEN_LLVM_ROOT=%EMSDK_PATH%bin\ -set DOTNET_EMSCRIPTEN_NODE_JS=%EMSDK_PATH%node\bin\node -set DOTNET_EMSCRIPTEN_NODE_PATH=%EMSDK_PATH%node\bin\ -set DOTNET_EMSCRIPTEN_BINARYEN_ROOT=%EMSDK_PATH% - - - <_EmscriptenPaths> -import os - -emsdk_path = os.path.dirname(os.path.dirname(os.path.realpath(os.getenv('EM_CONFIG')).replace('\\', '/'))) - -LLVM_ROOT = emsdk_path + '/bin' -NODE_JS = emsdk_path + '/node/bin/node' -BINARYEN_ROOT = emsdk_path - -FROZEN_CACHE = bool(os.getenv('EM_FROZEN_CACHE', 'True')) - -COMPILER_ENGINE = NODE_JS -JS_ENGINES = [NODE_JS] - - setlocal EnableDelayedExpansion && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env$(ScriptExt)'))" && !EMSDK_PYTHON! + setlocal EnableDelayedExpansion && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'pre_emsdk_env$(ScriptExt)'))" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env$(ScriptExt)'))" && !EMSDK_PYTHON! + $([MSBuild]::EnsureTrailingSlash('$(EMSDK_PATH)').Replace('\', '/')) + $([MSBuild]::EnsureTrailingSlash('$(NuGetPackageRoot)').Replace('\', '/')) + $([MSBuild]::EnsureTrailingSlash('$(EMSDK_PATH)bin').Replace('/', '\')) + $(NuGetPackageRoot)runtime.$(_portableHostOS)-$(BuildArchitecture).microsoft.netcore.runtime.wasm.node.transport/$(NodePackageVersion)/tools/$(_portableHostOS)-$(BuildArchitecture)/bin + $(DOTNET_EMSCRIPTEN_NODE_PATH)/node + $(EM_FROZEN_CACHE) + true + $(NuGetPackageRoot)Microsoft.NET.Runtime.Emscripten.$(EmsdkVersion).Python.win-$(BuildArchitecture)/$(EmsdkPackageVersion)/tools/python.exe + <_PreEmsdkEnvScriptPath>$(EMSDK_PATH)pre_emsdk_env$(ScriptExt) + <_SetOrExport Condition="'$(HostOS)' != 'windows'">export + <_SetOrExport Condition="'$(HostOS)' == 'windows'">set - + + + <_PreEmsdkEnvScriptLines Include="@echo off" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) EMSDK_PYTHON=$(EMSDK_PYTHON)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) EM_BINARYEN_ROOT=$(EMSDK_PATH)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) DOTNET_EMSCRIPTEN_NODE_PATH=$(DOTNET_EMSCRIPTEN_NODE_PATH)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) EM_NODE_JS=$(DOTNET_EMSCRIPTEN_NODE_JS)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) EM_LLVM_ROOT=$(DOTNET_EMSCRIPTEN_LLVM_ROOT)" /> + + + <_PreEmsdkEnvScriptLines Include="#!/bin/bash" /> + + + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) EMSDK_PATH=$(EMSDK_PATH)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) DOTNET_EMSCRIPTEN_NODE_JS=$(DOTNET_EMSCRIPTEN_NODE_JS)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) DOTNET_EMSCRIPTEN_LLVM_ROOT=$(DOTNET_EMSCRIPTEN_LLVM_ROOT)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) DOTNET_EMSCRIPTEN_BINARYEN_ROOT=$(EMSDK_PATH)" /> + <_PreEmsdkEnvScriptLines Include="$(_SetOrExport) FROZEN_CACHE=$(DOTNET_EMSCRIPTEN_CACHE)" /> + + + + - - + - - - - - - - - - - - - - - - + false - + @@ -351,8 +278,8 @@ JS_ENGINES = [NODE_JS] See https://github.com/llvm/llvm-project/pull/98373 See https://github.com/dotnet/runtime/issues/104773 --> - @@ -726,6 +653,8 @@ JS_ENGINES = [NODE_JS] <_MonoCFLAGSOption>-DCMAKE_C_FLAGS="@(_MonoCPPFLAGS, ' ') @(_MonoCFLAGS, ' ')" <_MonoCXXFLAGSOption>-DCMAKE_CXX_FLAGS="@(_MonoCPPFLAGS, ' ') @(_MonoCXXFLAGS, ' ')" + <_ScriptExecutor Condition="'$(HostOS)' != 'windows'">. + <_ScriptExecutor Condition="'$(HostOS)' == 'windows'">call <_MonoCMakeArgs Include="$(_MonoCFLAGSOption)"/> @@ -733,8 +662,8 @@ JS_ENGINES = [NODE_JS] - $([MSBuild]::EnsureTrailingSlash('$(EMSDK_PATH)').Replace('\', '/')) <_EmsdkEnvScriptPath>$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env$(ScriptExt)')) + <_PreEmsdkEnvScriptPath>$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'pre_emsdk_env$(ScriptExt)')) <_MonoCMakeConfigureCommand>cmake @(_MonoCMakeArgs, ' ') $(MonoCMakeExtraArgs) "$(MonoProjectRoot.TrimEnd('\/'))" <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' != 'true' and '$(TargetsWasi)' != 'true' and '$(_MonoSkipInitCompiler)' != 'true' and '$(HostOS)' != 'windows'">sh -c 'build_arch="$(_CompilerTargetArch)" compiler="$(MonoCCompiler)" . "$(RepositoryEngineeringCommonDir)native/init-compiler.sh" && @(_MonoBuildEnv, ' ') $(_MonoCMakeConfigureCommand)' @@ -742,11 +671,12 @@ JS_ENGINES = [NODE_JS] <_MonoCMakeConfigureCommand Condition="'$(TargetsWasi)' == 'true'">$(_MonoCMakeConfigureCommand) -DWASI_SDK_PREFIX=$(WASI_SDK_PATH) -DCMAKE_SYSROOT=$(WASI_SDK_PATH)share/wasi-sysroot -DCMAKE_TOOLCHAIN_FILE=$(WASI_SDK_PATH)/share/cmake/wasi-sdk-p2.cmake -DCMAKE_CXX_FLAGS="--sysroot=$(WASI_SDK_PATH)share/wasi-sysroot" <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' != 'true' and '$(TargetsWasi)' != 'true' and '$(HostOS)' == 'windows'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" $(_CompilerTargetArch) && cd /D "$(MonoObjDir)" && @(_MonoBuildEnv, ' ') $(_MonoCMakeConfigureCommand) - <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' == 'true' and '$(HostOS)' != 'windows'">bash -c 'source $(_EmsdkEnvScriptPath) 2>&1 && emcmake $(_MonoCMakeConfigureCommand)' - <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' == 'true' and '$(HostOS)' == 'windows'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$(_EmsdkEnvScriptPath)" && emcmake $(_MonoCMakeConfigureCommand) + <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' == 'true' and '$(HostOS)' != 'windows'">bash -c 'source $(_PreEmsdkEnvScriptPath) && source $(_EmsdkEnvScriptPath) 2>&1 && emcmake $(_MonoCMakeConfigureCommand)' + <_MonoCMakeConfigureCommand Condition="'$(TargetsBrowser)' == 'true' and '$(HostOS)' == 'windows'">call "$(_PreEmsdkEnvScriptPath)" && call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$(_EmsdkEnvScriptPath)" && emcmake $(_MonoCMakeConfigureCommand) <_MonoCMakeConfigureCommand Condition="'$(TargetsWasi)' == 'true' and '$(HostOS)' == 'windows'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && cmake $(_MonoCMakeConfigureCommand) <_MonoCMakeBuildCommand>cmake --build . --target install --config $(Configuration) + <_MonoCMakeBuildCommand Condition="'$(TargetsBrowser)' == 'true'">$(_ScriptExecutor) "$(_PreEmsdkEnvScriptPath)" && $(_MonoCMakeBuildCommand) <_MonoCMakeBuildCommand Condition="'$(MonoVerboseBuild)' == 'true'">$(_MonoCMakeBuildCommand) --verbose <_MonoCMakeBuildCommand Condition="'$(_MonoUseNinja)' != 'true'">$(_MonoCMakeBuildCommand) --parallel $([System.Environment]::ProcessorCount) <_MonoCMakeBuildCommand Condition="'$(TargetsBrowser)' != 'true' and '$(TargetsWasi)' != 'true' and '$(HostOS)' != 'windows'">@(_MonoBuildEnv, ' ') $(_MonoCMakeBuildCommand) @@ -992,6 +922,7 @@ JS_ENGINES = [NODE_JS] <_MonoAotCMakeConfigureCommand Condition="'$(_MonoSkipInitCompiler)' == 'true' and '$(HostOS)' != 'windows'">$(_MonoAOTCCOption) $(_MonoAOTCXXOption) @(_MonoAotBuildEnv, ' ') $(_MonoAotCMakeConfigureCommand) <_MonoAotCMakeConfigureCommand Condition="'$(HostOS)' == 'windows'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" $(_CompilerTargetArch) && cd /D "$(MonoObjCrossDir)" && @(_MonoAotBuildEnv, ' ') $(_MonoAotCMakeConfigureCommand) <_MonoAotCMakeBuildCommand>cmake --build . --target install --config $(Configuration) + <_MonoAotCMakeBuildCommand Condition="'$(TargetsBrowser)' == 'true'">$(_ScriptExecutor) "$(_PreEmsdkEnvScriptPath)" && $(_MonoAotCMakeBuildCommand) <_MonoAotCMakeBuildCommand Condition="'$(MonoVerboseBuild)' == 'true'">$(_MonoAotCMakeBuildCommand) --verbose <_MonoAotCMakeBuildCommand Condition="'$(_MonoUseNinja)' != 'true'">$(_MonoAotCMakeBuildCommand) --parallel $([System.Environment]::ProcessorCount) <_MonoAotCMakeBuildCommand Condition="'$(HostOS)' != 'windows'">@(_MonoAotBuildEnv, ' ') $(_MonoAotCMakeBuildCommand) diff --git a/src/native/libs/build-native.proj b/src/native/libs/build-native.proj index 36bfccbfe07ad..ba2ff4564afe1 100644 --- a/src/native/libs/build-native.proj +++ b/src/native/libs/build-native.proj @@ -78,10 +78,15 @@ BeforeTargets="Build" Condition="$([MSBuild]::IsOsPlatform(Windows))"> - <_BuildNativeArgs Condition="'$(Ninja)' == 'false'">$(_BuildNativeArgs) msbuild + <_BuildNativeArgs Condition="'$(Ninja)' == 'false'">$(_BuildNativeArgs) msbuild + $([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)', '..', '..', 'mono', 'browser', 'emsdk')) + $(ProvisionEmscriptenDir.Replace('\', '/')) + $(EMSDK_PATH)bin + $(NuGetPackageRoot)runtime.$(_portableHostOS)-$(BuildArchitecture).microsoft.netcore.runtime.wasm.node.transport/$(NodePackageVersion)/tools/$(_portableHostOS)-$(BuildArchitecture)/bin/node + <_BuildNativeEnvironmentVariables>$(_BuildNativeEnvironmentVariables);DOTNET_EMSCRIPTEN_LLVM_ROOT=$(DOTNET_EMSCRIPTEN_LLVM_ROOT);EM_LLVM_ROOT=$(DOTNET_EMSCRIPTEN_LLVM_ROOT);DOTNET_EMSCRIPTEN_NODE_JS=$(DOTNET_EMSCRIPTEN_NODE_JS);DOTNET_EMSCRIPTEN_BINARYEN_ROOT=$(EMSDK_PATH) - + diff --git a/src/native/libs/build-native.sh b/src/native/libs/build-native.sh index 5169732c2d641..4fe7539da80a8 100755 --- a/src/native/libs/build-native.sh +++ b/src/native/libs/build-native.sh @@ -62,6 +62,7 @@ if [[ "$__TargetOS" == browser ]]; then exit 1 fi fi + source "$EMSDK_PATH"/pre_emsdk_env.sh source "$EMSDK_PATH"/emsdk_env.sh export CLR_CC=$(which emcc) elif [[ "$__TargetOS" == wasi ]]; then diff --git a/src/tasks/WasmAppBuilder/RunWithEmSdkEnv.cs b/src/tasks/WasmAppBuilder/RunWithEmSdkEnv.cs index e17e01f870fac..6e90f67b303c1 100644 --- a/src/tasks/WasmAppBuilder/RunWithEmSdkEnv.cs +++ b/src/tasks/WasmAppBuilder/RunWithEmSdkEnv.cs @@ -25,19 +25,25 @@ public override bool Execute() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { + string preEnvScriptPath = Path.Combine(EmSdkPath, "pre_emsdk_env.cmd"); + if (!CheckEnvScript(preEnvScriptPath)) + return false; string envScriptPath = Path.Combine(EmSdkPath, "emsdk_env.cmd"); if (!CheckEnvScript(envScriptPath)) return false; - Command = $"@cmd /c \"call \"{envScriptPath}\" > nul 2>&1 && {Command}\""; + Command = $"@cmd /c \"call \"{preEnvScriptPath}\" > nul 2>&1 && call \"{envScriptPath}\" > nul 2>&1 && {Command}\""; } else { + string preEnvScriptPath = Path.Combine(EmSdkPath, "pre_emsdk_env.sh"); + if (!CheckEnvScript(preEnvScriptPath)) + return false; string envScriptPath = Path.Combine(EmSdkPath, "emsdk_env.sh"); if (!CheckEnvScript(envScriptPath)) return false; - Command = $"bash -c 'source {envScriptPath} > /dev/null 2>&1 && {Command}'"; + Command = $"bash -c 'source {preEnvScriptPath} > /dev/null 2>&1 && source {envScriptPath} > /dev/null 2>&1 && {Command}'"; } var workingDir = string.IsNullOrEmpty(WorkingDirectory) ? Directory.GetCurrentDirectory() : WorkingDirectory;