[wasm] Add support for using emscripten from packages (#50077)
* [wasm] Add support for using emscripten from packages
When using a workload that has the emscripten packages, certain
properties get set. If that isn't set then we fallback to using
`$(EMSDK_PATH)`.
This should allow being able to use emscripten from workloads, but for
other cases where we depend on an installed emscripten, that should work
too.
* Fix setting PATH on windows
* Using msbuild NormalizeDirectory to construct dir path
* fix setting PATH on windows, when paths have trailing slash
* [wasm] Improve checking emscripten from workload, and EMSDK_PATH
- If a workload pack is being used, then ignore `EMSDK_PATH`
- And error in that order too
- Emit better error messages
Example messages:
- Missing python dir when relinking:
`warning : Specified Emscripten sdk at $(EMSDK_PATH)=. is missing some paths: $(EmscriptenPythonToolsPath)=/Users/radical/dev/r3/artifacts/bin/Wasm.Build.Tests/net6.0-Release/browser-wasm/e10djxv0.wdr/python/3.7.4-2_64bit/ . Emscripten SDK is required for building native files.`
- Missing node directory, or the wrong version dir:
`warning : Specified Emscripten sdk at $(EMSDK_PATH)=/Users/radical/dev/r3/src/mono/wasm/emsdk is missing some paths: $(EmscriptenNodeToolsPath)=/Users/radical/dev/r3/src/mono/wasm/emsdk/node/12.18.1_64bit/ . Emscripten SDK is required for building native files.`
- Empty `EMSDK_PATH`
`Error : Could not find Emscripten sdk at $(EMSDK_PATH)=/Users/radical/dev/r3/src/mono/wasm/emsdk/. Emscripten SDK is required for AOT'ing assemblies.`
- Bad `EMSDK_PATH`
`error : Specified Emscripten sdk at $(EMSDK_PATH)=. is missing some paths: $(EmscriptenPythonToolsPath)=/Users/radical/dev/r3/artifacts/bin/Wasm.Build.Tests/net6.0-Release/browser-wasm/l2mcsipf.isn/python/3.7.4-2_64bit/ . Emscripten SDK is required for AOT'ing assemblies.`
* [wasm] Don't hardcode versions for python/node bundled in emsdk
.. and listen to @lewing's suggestions!
* [wasm] GetDirectories doesn't like non-existant paths
* Fix the earlier fix
* improve errors when some paths are missing
* cleanup
* debugging on ci
* [wasm] emscripten uses system python on linux, so don't try to find it in emscripten sdk