Commit Graph

65 Commits

Author SHA1 Message Date
Adam Scott 793258919b
[Web] Fix Emscripten for WebXR and update minimum version 2025-07-22 14:02:44 -04:00
Adam Scott 8420468647
[Web] Disable GDScript LSP 2025-07-18 11:14:58 -04:00
A Thousand Ships b616e857aa
[Web] Fix build failure on Windows 2025-06-17 11:05:45 +02:00
Rémi Verschelde d9cda33090
Merge pull request #107415 from adamscott/add-emscripten-version-to-log-header
[Web] Add Web-build specific stdout header
2025-06-13 18:37:37 +02:00
Rémi Verschelde e0072e9169
Merge pull request #105800 from adamscott/add-emscripten-include-path
[Web] Include emscripten headers by default
2025-06-12 22:48:40 +02:00
Adam Scott f411c5b2f1
[Web] Add Web-build specific stdout header 2025-06-12 13:00:36 -04:00
Adam Scott 64b0d5c1c2
[Web] Add required exported functions and runtime methods for emscripten 2025-06-04 09:53:05 -04:00
Rémi Verschelde 2df41d8144
Merge pull request #104458 from marcosc90/fix-thread-collision-shape-3d
[Web] Use actual `PThread` pool size for `get_default_thread_pool_size()`
2025-06-01 00:31:44 +02:00
Marcos Casagrande a7d18f51a2 Web: Add godot_pool_size/emscripten_pool_size config 2025-05-30 20:38:24 +02:00
Adam Scott b0e472c8e4
[Web] Include emscripten headers by default 2025-05-20 10:53:28 -04:00
Thaddeus Crews fb39aa4fd3
Merge pull request #105833 from marcosc90/perf-web-shader-source
[Web] Optimize `GL.getSource` for known-length shader sources
2025-05-14 09:44:08 -05:00
Adam Scott f114a8d1d1
Add WebAssembly SIMD support 2025-05-13 07:35:53 -04:00
Marcos Casagrande 197b307061 [Web] Optimize GL.getSource for known-length shader sources 2025-04-27 17:44:08 +02:00
Adam Scott ce4f64583a
Add the equivalent of `-Werror` for `wasm-ld` 2025-04-10 11:49:03 -04:00
Thaddeus Crews 10ed66f28c
SCons: Add emitter to declutter build objects 2025-03-15 12:08:24 -05:00
Thaddeus Crews 77e9f55c51
Merge pull request #102676 from adamscott/add-web-library-emitter
[Web] Add library emitter to make sources dependent of compiler version
2025-03-11 16:53:53 -05:00
Thaddeus Crews 0bb1f138f2
Merge pull request #100525 from adamscott/set-closure-language-to-default
Remove custom `--language-in` arg for the Closure compiler
2025-03-11 14:00:35 -05:00
Adam Scott 02cc1ec95b
[Web] Add library emitter to make sources dependent of compiler version 2025-02-10 16:18:35 -05:00
Rémi Verschelde 90208f7dd4 SCons: Fix handling of platform-specific tools, notably `mingw`
Add optional `detect.py` `get_tools` method to let platforms register SCons
tools they need.

This helps move this logic out of SConstruct, keeping platforms more self
contained, and helping thirdparty platforms define their own custom tools.

This logic was also unreliable (the `use_mingw` one would only work if
passed manually on the command line, not in e.g. `get_flags`).

Co-authored-by: Thaddeus Crews <repiteo@outlook.com>
2025-01-25 13:59:30 +01:00
Rémi Verschelde 26db0bb15f SCons: Make `lto=auto` prefer ThinLTO over full LTO for LLVM targets
This speeds up build time considerably for these platforms compared to
using `lto=full`, which is sadly single-threaded with LLVM, unlike GCC.

Changes to default behavior of `lto=auto` (i.e. `production=yes`):
- Linux: Prefer ThinLTO for LLVM
- Web: Prefer ThinLTO
- Windows: Prefer ThinLTO for llvm-mingw

The following LLVM targets don't use LTO by default currently, which
needs to be assessed further (gains from LLVM LTO on performance need
to be weighed against the potential size increase from heavy inlining):
- Android
- iOS
- macOS
- Windows clang-cl
2025-01-09 13:03:58 +01:00
Adam Scott 3011717e14
Remove custom `--language-in` arg for the Closure compiler 2024-12-17 13:52:30 -05:00
Thaddeus Crews d8761f2c79
SCons: Improve colored output 2024-12-10 11:44:48 -06:00
Fabio Alessandrelli 9383610ad1 [Web] Disable UNIX sockets
They are not supported anyway, emscripten has an emulation layer that
implements them over WebSocket/WebRTC, which is really surprising for
users, and also not very useful since we have proper WebSocket and
WebRTC support.

This can make the build smaller, if we also disable the UPNP module
(which will otherwise include a third party library referencing "socket"
thus forcing emscripten to include the compatibility layer)
2024-11-13 10:28:08 +01:00
Yevhen Babiichuk (DustDFG) 7aacdaa071 Build System: Extract `validate_arch` helper function
Signed-off-by: Yevhen Babiichuk (DustDFG) <dfgdust@gmail.com>
2024-10-06 07:50:49 +03:00
Adam Scott a1e409c58b
Update minimum requirements for emscripten to 3.1.62 2024-09-26 10:19:48 -04:00
Fabio Alessandrelli 26f17c33a5 [Web] Add workaround for missing export in threaded builds
The offending symbol gets stripped away by wasm-dce but it's used on the
JavaScript side and causes and undefined symbol which also causes the
closure compiler to throw an error.
2024-07-26 12:28:36 +02:00
Rémi Verschelde 8897c77d50
SCons: Default `optimize` to `auto`, fixing `target`/`dev_build` inference for Web
Fixes #94087.
2024-07-09 00:21:29 +02:00
David Snopek 8e242fe7c1 Disable `*glGetProcAddress()` on the web 2024-06-24 10:57:22 -05:00
Fabio Alessandrelli 7af8c494ab [Web] Force emcc to use "wasm" longjmp mode
SUPPORT_LONGJMP have changed since emscripten 3.1.32 to default to
"wasm" mode when exceptions are enabled, and "emscripten" mode when
disabled.

While we generally doesn't use exception in core, linked libraries may
need them, and emscripten don't plan to support WASM EH + Emscripten
SjLj in the long term.
2024-06-14 16:03:56 +02:00
Fabio Alessandrelli e874cd84f0 [Web] Remove space between emscripten "-s" flags and the option 2024-06-14 16:03:56 +02:00
Adam Scott 5a01c2e954
Replace deprecated `USE_WEBGL2` linker flag 2024-06-10 12:14:27 -04:00
Thaddeus Crews 5d265e9a7e
SCons: Minor fixes/adjustments for web compilation 2024-05-24 12:30:24 -05:00
Thaddeus Crews 896b003cc8
SCons: Convert platform `get_flags` to dictionary 2024-05-22 13:53:20 -05:00
Jakub Marcowski d9f8ef68df
Update pre-commit hooks configuration to use `ruff` instead of `black` 2024-05-21 18:02:29 -05:00
Thaddeus Crews e0e8ce1fc0
SCons: Colorize warnings/errors during generation 2024-04-28 16:24:48 -05:00
Yevhen Babiichuk (DustDFG) ca60255d8c Fix platform name in the message about unsupported CPU architecture
Signed-off-by: Yevhen Babiichuk (DustDFG) <dfgdust@gmail.com>
2024-03-17 09:28:53 +02:00
Adam Scott 3ae524fa9e
Add `WASM_BIGINT` linker flag to the web build 2024-02-20 08:19:56 -05:00
Thaddeus Crews 633dcf6dfd
SCons: "Environment" to "SConsEnvironment" 2024-02-14 09:26:47 -06:00
Rémi Verschelde d29b0d90e0
Web: Bump closure compiler spec to ECMASCRIPT_2021
Fixes #88008.
2024-02-06 09:19:07 +01:00
Rémi Verschelde d3352813ea
Merge pull request #87981 from adamscott/add-emscripten--sgl_enable_get_proc_address-linker-flag
Fix emscripten 3.1.51 breaking change about `*glGetProcAddress()`
2024-02-05 18:06:15 +01:00
Adam Scott 5922ac0fb1
Fix emscripten 3.1.51 breaking change about `*glGetProcAddress()` 2024-02-05 11:55:03 -05:00
Adam Scott 656bc22e28
Add workaround for emscripten >= 3.1.47 LTO build 2024-02-04 15:24:24 -05:00
Adam Scott bd70b8e1f6
Add THREADS_ENABLED macro in order to compile Godot to run on the main thread 2024-01-17 13:58:29 -05:00
nikitalita 6788bc6bc2
SCons: Add `stack_size` and `default_pthread_stack_size` options to Web target 2024-01-03 14:11:24 +01:00
Adam Scott 8e5fbd4348
Set what were default values for some emscripten linkflags
- Set `-sSTACK_SIZE` to what it was before emscripten 3.1.27.
  It was renamed in 3.1.25 so also set `-sTOTAL_SIZE` for older
  versions for consistency.
- Set `-sDEFAULT_PTHREAD_STACK_SIZE` to what it was before 3.1.30.

Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2023-12-11 19:53:11 +01:00
Adam Scott 230cebb4b7
Revert to `proxy_to_pthread=no` as default
Currently, `proxy_to_pthread=yes` option as default breaks WebXR
support.
2023-10-23 08:45:45 -04:00
Fabio Alessandrelli e9df955e39 [Web] Fix closure compiler builds using BIGINT
When using proxy_to_pthread we add BIGINT support (to support exchanging
64 bits integers between wasm and JS).

Bigint though, is part of ECMAScript 2020, and the closure compiler was
using ECMAScript 6 instead.

This commit update the CC configuration to use ECMAScript 2020 instead.
2023-10-21 14:02:22 +02:00
Adam Scott 78c2a08fae
Add `proxy_to_pthread` option to `platform=web`
Co-authored-by: Fabio Alessandrelli <fabio.alessandrelli@gmail.com>
2023-10-09 11:50:01 -04:00
Mario Liebisch 426e18fd37
Updated compiler version detection
This fixes multiple issues/inconsistencies around  `get_compiler_version()`:
* With no shell allocated, launching the compiler could fail even
  with proper paths being set.
* The return value was described as "an array of version numbers as ints",
  but the function actually returned a `Dictionary` (or `None`).
* Not all calls were properly handling a `None` return value in case of errors.
  On Windows this broke compiling for me since #81869 with default settings.
* Some calls defined inconsistent defaults/fallbacks (`0` or `-1`).
2023-09-25 21:17:20 +02:00
Rémi Verschelde bafcd32f15
Merge pull request #81716 from akien-mga/web-disable-raycast-embree
Web: Disable raycast module by default (no occlusion culling)
2023-09-22 22:03:55 +02:00