Commit Graph

106 Commits

Author SHA1 Message Date
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
Hugo Locurcio 7b678b961c
Set `execinfo=no` by default when compiling for Linux/*BSD
Alpine 3.17 and later no longer provide execinfo in its repositories,
making compilation impossible unless you pass `execinfo=no`.
2024-05-11 00:25:13 +02:00
Jakub Marcowski 7699d678c4
Fix `builtin_embree=no` build linking the wrong version of Embree 2024-05-08 00:40:45 +02:00
Thaddeus Crews e0e8ce1fc0
SCons: Colorize warnings/errors during generation 2024-04-28 16:24:48 -05:00
Rémi Verschelde 2ecf0eba95
Merge pull request #88520 from LinuxUserGD/execinfo
Disable the crash handler if `execinfo=no` scons option is set
2024-03-05 16:54:37 +01:00
Rémi Verschelde 033821c595
Merge pull request #88245 from shana/simplify-mono-support-detection
C#: Let platforms signal if they support the mono module or not
2024-02-19 00:08:07 +01:00
LinuxUserGD f1a677fb4c
Disable the crash handler if execinfo=no scons option is set 2024-02-18 21:42:05 +01:00
Thaddeus Crews 633dcf6dfd
SCons: "Environment" to "SConsEnvironment" 2024-02-14 09:26:47 -06:00
Andreia Gaita 21e524a798 C#: Let platforms signal if they support it or not
Instead of hardcoding platform names that support C#, let platforms
set a flag indicating if they support it. All public platforms
except web already support it, and it's a pain to maintain a patch
for this list just to add additional names of proprietary console
platforms.

This makes adding new platforms or variants or existing platforms
much easier, as the platform can signal what it supports/doesn't
support directly, and we can avoid harcoding platform names.
2024-02-13 22:48:43 +01:00
Rémi Verschelde 11964fb569
Merge pull request #87464 from bruvzg/pck_section
[Linux] Add support for PCK embedding section with non GNU-ld linkers.
2024-02-08 10:53:36 +01:00
Hugo Locurcio 7b0f2a5f53
Silence wayland-scanner check in buildsystem
This prevents a wayland-scanner message from appearing every build
when `wayland=yes` is used (the default). The error message when
wayland-scanner is still printed as it's not printed by
wayland-scanner itself.
2024-02-06 19:49:34 +01:00
Riteo c3d6cc57be Wayland: disable backend at build-time if wayland-scanner is missing
This allows previous X11-only setups to still build Godot with default
settings. Note that compilation will still abort if wayland-scanner is
present but not the various Wayland libraries.
2024-01-31 02:08:33 +01:00
Riteo 7e0f7d3abd Add Wayland support
Not everything is yet implemented, either for Godot or personal
limitations (I don't have all hardware in the world). A brief list of
the most important issues follows:

- Single-window only: the `DisplayServer` API doesn't expose enough
information for properly creating XDG shell windows.

- Very dumb rendering loop: this is very complicated, just know that
the low consumption mode is forced to 2000 Hz and some clever hacks are
in place to overcome a specific Wayland limitation. This will be
improved to the extent possible both downstream and upstream.

- Features to implement yet: IME, touch input, native file dialog,
drawing tablet (commented out due to a refactor), screen recording.

- Mouse passthrough can't be implement through a poly API, we need a
rect-based one.

- The cursor doesn't yet support fractional scaling.

- Auto scale is rounded up when using fractional scaling as we don't
have a per-window scale query API (basically we need
`DisplayServer::window_get_scale`).

- Building with `x11=no wayland=yes opengl=yes openxr=yes` fails.

This also adds a new project property and editor setting for selecting the
default DisplayServer to start, to allow this backend to start first in
exported projects (X11 is still the default for now). The editor setting
always overrides the project setting.

Special thanks to Drew Devault, toger5, Sebastian Krzyszkowiak, Leandro
Benedet Garcia, Subhransu, Yury Zhuravlev and Mara Huldra.
2024-01-30 16:44:47 +01:00
bruvzg 625c4bdace
[Linux] Add support for PCK embedding section with non GNU-ld linkers. 2024-01-24 12:21:05 +02:00
jsjtxietian 078bfae6a4 Add RD_ENABLED when VULKAN_ENABLED or D3D12_ENABLED is added 2023-12-25 11:13:01 +08:00
Rémi Verschelde 63153c9d36
Linux: Remove hardcoded lib path for x86 cross-compilation
This breaks the build with our updated i686 Linux SDK which doesn't contain
this path, and may not be needed at all.

This might need further work to be robust, and there's an open PR already
adding -march flags for all supported architectures, but for now we're
playing it safe for 4.2.
2023-11-01 14:14:01 +01: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 b362976504
SCons: Fix Python 3.12 SyntaxError with regex escape sequences 2023-09-25 10:39:30 +02:00
Yuri Sizov 661c3954a6 Merge pull request #73443 from akien-mga/unbundle-openxr
Allow unbundling OpenXR (for Linux distros)
2023-07-12 17:15:25 +02:00
Rémi Verschelde 79b31a8357
Merge pull request #79105 from akien-mga/linux-libsquish-lacks-pkgconfig
Linux: Link libsquish directly when unbundling, .pc file unreliable
2023-07-08 18:22:18 +02:00
Rémi Verschelde b3b4f4c1c9
Linux: Link libsquish directly when unbundling, .pc file unreliable 2023-07-06 15:32:42 +02:00
Rémi Verschelde 153c4a4c4f
Linux: Allow unbundling brotli to use system library 2023-07-06 15:26:38 +02:00
Rémi Verschelde 90446fe9f3
SCons: Move platform logo/run icon to `export` folder
Follow-up to #75932.
Since these icons are only used by the export plugin, it makes sense to
move them and generate the headers there.

The whole `detect.is_active()` logic seems to be a leftover from before
times, as far back as 1.0-stable it already wasn't used for anything.

So I'm removing it and moving the export icon generation to
`platform_methods`, where it makes more sense.
2023-06-20 13:16:37 +02:00
Rémi Verschelde 34a07b81ae
Allow unbundling OpenXR (for Linux distros)
Copy XrMatrix4x4f_CreateProjectionFov to our OpenXRUtil, instead of relying
on a private header.
2023-06-16 16:25:04 +02:00
bruvzg 628f3b2f79
[OS] Implement and expose to scripting APIs `get_memory_info` method instead of old `get_free_static_memory`. 2023-04-24 14:08:55 +03:00
bruvzg a5128e71bb
[Export docs] Move docs to platform folders. 2023-04-20 11:02:12 +03:00
Rémi Verschelde 015cec0a6b
Merge pull request #74666 from akien-mga/scons-linux-cleanup-pulseaudio-defines
SCons: Cleanup pulseaudio defines for Linux
2023-03-10 14:03:53 +01:00
Rémi Verschelde a35586779e
SCons: Cleanup pulseaudio defines for Linux
No need to define _REENTRANT manually when using the system lib,
it's part of the pkgconfig cflags.
And we were then defining PULSEAUDIO_ENABLED twice.
2023-03-09 16:05:52 +01:00
Omar Polo ac04a0761e change some sys.exit() to be fatal
- when not all freetype deps are builtin (or provided externally)
- when attempting to build on an unsupported CPU architecture
2023-03-09 14:30:45 +01:00
Rémi Verschelde afb8693715
Linux: Don't try to link system embree3 on unsupported archs 2023-03-03 14:02:05 +01:00
Rémi Verschelde cefe1e0654
Merge pull request #73441 from akien-mga/linux-unbundling-fixes
Fix includes of thirdparty libs which can be unbundled on Linux
2023-02-17 09:56:02 +01:00
Rémi Verschelde e2fc0acd36
Fix includes of thirdparty libs which can be unbundled on Linux
Changes `builtin_icu` and `builtin_recast` to match the folder names in
`thirdparty`.
2023-02-16 15:52:13 +01:00
bruvzg dd068794c3
[Linux] Make SO wrapper usage optional. 2023-02-16 16:38:47 +02:00
Hugo Locurcio 074d87d718
Update PCK embedding SCons warning message to mention mold linker
mold is now part of the SCons `linker` option.
2023-02-13 10:55:37 +01:00
bruvzg 5c4fe6339b
[Linux/BSD] Include headers for dynamically loaded libraries to simplify build dependencies. 2023-01-23 16:37:43 +02:00
bruvzg daad4aed62
Cleanup and unify keyboard input.
- Unify keycode values (secondary label printed on a key), remove unused hardcoded Latin-1 codes.
- Unify IME behaviour, add inline composition string display on Windows and X11.
- Add key_label (localized label printed on a key) value to the key events, and allow mapping actions to the unshifted Unicode events.
- Add support for physical keyboard (Bluetooth or Sidecar) handling on iOS.
- Add support for media key handling on macOS.

Co-authored-by: Raul Santos <raulsntos@gmail.com>
2023-01-23 15:08:12 +02:00
Rémi Verschelde 5b1df48c6c
Convert en_GB spelling to en_US with codespell 2023-01-23 11:02:20 +01:00
robfram 9faa92bda0 Exclude atomic lib under FreeBSD using LLVM 2023-01-20 20:52:19 +00:00
Rémi Verschelde 91a54cdbc1
Linux/BSD: Add LINUXBSD_ENABLED define for non X11-related checks 2023-01-16 17:01:35 +01:00
Riteo 3960c6b8f9 Allow building X11 without Vulkan
This limit was likely introduced when Vulkan was the only option.
2022-12-27 21:47:26 +01:00
Riteo 2dd5a792bb Load X11 dynamically
The loaders have been generated through hpvb's dynload-wrapper, although
they had to be heavily handpatched to workaround some already reported
issues with it. I added a note to each generated file to account for
that.

As GLAD uses X11 stuff directly, I had to define the GLAD_GLX_NO_X11
macro to not let do it that, and handle myself the display loading and
screen handling part myself, which wasn't that hard but it's still
something worth saying.

I plan to improve greatly the X11 backend (including this aspect) but,
as the release isn't that far and I'm also working on the Wayland
backend, this will do for now, I hope.
2022-12-03 19:23:43 +01:00
Riteo Siuga dc2919d57b Load GLX dynamically with GLAD
This is accomplished through the addition of a GLAD GLX loader in the
`thirdparty` directory.

This is another step towards a nice Wayland/X11 interoperation.
2022-11-15 13:55:30 +01:00
Riteo a3b5353892 Actually set the execinfo flag on non-glibc systems 2022-10-11 21:45:29 +02:00
Hugo Locurcio 8e04bffbcf
Automatically use execinfo for crash handler on *BSD and musl-based Linux
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2022-10-04 19:40:19 +02:00
Jiri Suchan c5bd2f9dce ci: add Python static analysis check via mypy 2022-09-30 19:03:17 +07:00
Rémi Verschelde 39facb35a0 SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.

New `target` presets
====================

The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:

- `editor`: Replaces `tools=yes target=release_debug`.
  * Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
  * Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
  * Defines: `-O3`/`/O2`

New `dev_build` option
======================

The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:

- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
  enables generating debug symbols, does not define `NDEBUG` so `assert()`
  works in thirdparty libraries, adds a `.dev` suffix to the binary name.

Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.

Changed binary names
====================

The name of generated binaries and object files are changed too, to follow
this format:

`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`

For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`

Be sure to update your links/scripts/IDE config accordingly.

More flexible `optimize` and `debug_symbols` options
====================================================

The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:

`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-26 16:31:46 +02:00
Rémi Verschelde 35a15e6191 SCons: Refactor handling of `production` flag and per-platform LTO defaults
Fixup to #63288.
See #65583 for the bug report.

Co-authored-by: Cyberrebell <chainsaw75@web.de>
2022-09-19 18:11:29 +02:00
Rémi Verschelde c2c659db32 SCons: Refactor LTO options with `lto=<none|thin|full>`
Adds support for LTO on macOS and Android. We don't have much experience
with LTO on these platforms so for now we keep it disabled by default
even when `production=yes` is set.

Similarly for iOS where we ship object files for the user to link in
Xcode so LTO makes builds extremely slow to link.

`production=yes` defaults to full LTO.
ThinLTO is much faster for LLVM-based compilers but seems to produce
bigger binaries (at least for the Web platform).
2022-09-08 10:00:02 +02:00
Raul Santos 471c9c2969
Add support for system dark mode (Linux)
- Use `org.freedesktop.appearance color-scheme` to support system dark mode.
2022-09-02 16:49:21 +02:00