[wasm] Add support for using emscripten from packages (#50077)
authorAnkit Jain <radical@gmail.com>
Wed, 24 Mar 2021 21:15:34 +0000 (17:15 -0400)
committerGitHub <noreply@github.com>
Wed, 24 Mar 2021 21:15:34 +0000 (21:15 +0000)
commitc547790624d41c9d2a20bd5ed27dba84b9ad5d37
tree47c9d042ab6c7cfec886e8e6a1dc338ce60d1402
parent4645ecf69b223889a1ec7e80c20ecf1b50663cb1
[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
src/mono/wasm/build/WasmApp.targets