Commit Graph

138 Commits

Author SHA1 Message Date
1e8ead50dc Use pkg-config for recast flags
Now that recastnavigation upstream ships a pkg-config file, Godot can
rely on it for getting the build-time configuration.
2025-10-25 15:52:41 +02:00
f3ebee1f79 Merge pull request #111211 from superherointj/enet-warning
System-provided ENet warning
2025-10-16 12:48:07 -05:00
0a584250ae Fix: Libgodot build on Linux. 2025-10-10 04:31:14 -05:00
7c033002b0 Merge pull request #110863 from kisg/libgodot_migeran_core
LibGodot: Core - Build Godot Engine as a Library
2025-10-08 13:56:34 -05:00
24f23c5cdb System-provided ENet warning
Warning from documentation: https://github.com/godotengine/godot/tree/master/thirdparty#enet
2025-10-08 08:51:09 -03:00
6c44c80c62 LibGodot: Core - Build Godot Engine as a Library
* Add a new GodotInstance GDCLASS that provides startup and iteration commands to control a Godot instance.
* Adds a libgodot_create_godot_instance entry point that creates a new Godot instance and returns a GodotInstance object.
* Adds a libgodot_destroy_godot_instance entry point that destroys the Godot instance.

Sample Apps: https://github.com/migeran/libgodot_project

Developed by [Migeran](https://migeran.com)

Sponsors & Acknowledgements:

* Initial development sponsored by [Smirk Software](https://www.smirk.gg/)
* Rebasing to Godot 4.3 and further development sponsored by [Xibbon Inc.](https://xibbon.com)
* The GDExtension registration of the host process & build system changes were based
  on @Faolan-Rad's LibGodot PR: https://github.com/godotengine/godot/pull/72883
* Thanks to Ben Rog-Wilhelm (Zorbathut) for creating a smaller, minimal version for easier review.
* Thanks to Ernest Lee (iFire) for his support

Co-Authored-By: Gabor Koncz <gabor.koncz@migeran.com>
Co-Authored-By: Ben Rog-Wilhelm <zorba-github@pavlovian.net>
2025-10-07 02:15:41 +02:00
b17aa3343a Revert "SCons: Add CPPEXTPATH for external includes" 2025-10-06 13:09:22 -05:00
be11bf1d6b Merge pull request #110540 from akien-mga/linux-system-libturbojpeg
Linux: Allow unbundling libjpeg-turbo to use system package
2025-09-18 21:02:31 -05:00
4dec6af2c8 Merge pull request #108613 from Repiteo/scons/fix-defines
SCons: Ensure `CPPDEFINES` is properly utilized
2025-09-16 11:44:45 -05:00
6d8aa8582f Linux: Allow unbundling libjpeg-turbo to use system package 2025-09-15 23:52:48 +02:00
0e19ad507e Fix the usage of libudev and dbus with SDL
Previously, libudev was ignored if SOWRAP_ENABLED was defined (it is defined by default) because otherwise it would crash CI builds due to a missing header, and dbus was always linked dynamically. This commit should fix this issue and make libudev usable again
2025-07-31 15:05:06 +05:00
61956f2e06 SCons: Ensure CPPDEFINES is properly utilized 2025-07-14 13:07:53 -05:00
71dd7b5712 Fix SDL threading on macOS/Linux.
And fixup pkg-config check for SDL on Linux.

Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-06-25 10:36:39 +02:00
0b3496fb4f Add support for SDL3 joystick input driver
Made possible by EIREXE, xsellier and the SDL team.

This commit includes statically linked SDL3 for Windows, Linux and macOS.
The vendored copy of SDL3 was setup to only build the required subsystems
for gamepad/joystick support, with some patches to be able to make it as
minimal as possible and reduce the impact on binary size and code size.

Co-authored-by: Álex Román Núñez <eirexe123@gmail.com>
Co-authored-by: Xavier Sellier <xsellier@gmail.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2025-06-25 01:28:50 +02:00
cc9761c3f0 Merge pull request #107188 from berarma/moviewriter-add-theora
Add Ogg Theora support to MovieWriter
2025-06-10 16:22:57 +02:00
a16b04fe07 Add Ogg Theora support to MovieWriter
Movie Maker mode can now record files in `.ogv` format, which can be
directly viewed in Godot's VideoStreamPlayer node along with most
video players. This is a lossy format with inter-frame compression,
unlike AVI + MJPEG which only performs intra-frame compression.

Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
Co-authored-by: Leo de Penning <leo.depenning@illuminoo.com>
2025-06-10 15:52:24 +02:00
c596d93478 Merge pull request #106175 from akien-mga/linux-build-no-dbus
Linux: Fix build with `dbus=no` or `threads=no`
2025-06-09 00:44:12 +02:00
1de9789806 Linux: Drop ppc32 (32-bit PowerPC) architecture support
This was added together with `ppc64le` in #54490, but seemingly only for the
purpose of getting it to compile on a Linux distro that aims at maximizing
support for all CPU architectures.

I don't think anyone has ever _run_ Godot on a `ppc32` system (do those even
support OpenGL ES 3.0?) and so I don't think we should aim to support it.

Debian dropped support for its PowerPC (`ppc32`) arch in Debian 9, released
in 2017.
2025-05-14 10:22:12 +02:00
e9e8ddc5be Linux: Fix build with dbus=no or threads=no 2025-05-09 15:26:13 +02:00
1fbc0c5631 [Buildsystem] Add EnumVariable(ignorecase=2) 2025-04-29 13:35:40 -04:00
4310cb82b8 AccessKit integration for macOS, Linux, and Windows. 2025-04-08 20:25:47 +03:00
f25fc34439 SCons: Add CPPEXTPATH for external includes 2025-04-02 07:29:08 -05:00
19a30bb723 Wayland: Fix build config with so_wrap disabled
We should only include the vendored headers for Wayland and libdecor-0 when
we use `so_wrap`, i.e. when we *don't* build against system libraries.

The libdecor-0 pkg-config file includes the `libdecor-0/` prefix already,
so its header should be included without it, and likewise in our so wrappers.
Fixes #102671.
2025-02-10 21:42:25 +01:00
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
7fe0609118 Linux: Relax interdependency between freetype, libpng, and zlib for unvendored builds
This restriction was added to fix #7373 back then, which was a symbol conflict
between FreeType's bundled copy of gzip/zlib, and distro packages.

But we also unbundled FreeType's zlib in #69395 so this is no longer an issue.

On the other hand recent issues pointed out that using system-provided icu4c
or harfbuzz can cause issues (#91401, #100301). We still allow it for now but
raise a warning.
2025-01-09 00:28:46 +01:00
b9f0e0cfa3 Fixed Mold-search in older systems 2024-12-28 13:49:56 +07:00
d8761f2c79 SCons: Improve colored output 2024-12-10 11:44:48 -06:00
e0693f8ad8 Add loongarch64 support 2024-12-06 00:18:26 +08:00
a42b8e2413 Buildsystem: Use pkg-config for miniupnpc and mbedtls
Miniupnpc added pkg-config files in 2.2.3 but we require 2.2.8
5a398006b9

MbedTLS added pkg-config files in 3.6.0 while we require 3.6.1
https://github.com/Mbed-TLS/mbedtls/blob/development/ChangeLog

Signed-off-by: Yevhen Babiichuk (DustDFG) <dfgdust@gmail.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2024-11-13 15:25:42 +02:00
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
2167157aaf Replace squish with bcdec for BC decompression 2024-09-26 14:42:54 +02:00
52a2836861 Disable FP contraction. 2024-07-23 14:33:51 +03:00
896b003cc8 SCons: Convert platform get_flags to dictionary 2024-05-22 13:53:20 -05:00
d9f8ef68df Update pre-commit hooks configuration to use ruff instead of black 2024-05-21 18:02:29 -05:00
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
7699d678c4 Fix builtin_embree=no build linking the wrong version of Embree 2024-05-08 00:40:45 +02:00
e0e8ce1fc0 SCons: Colorize warnings/errors during generation 2024-04-28 16:24:48 -05:00
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
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
f1a677fb4c Disable the crash handler if execinfo=no scons option is set 2024-02-18 21:42:05 +01:00
633dcf6dfd SCons: "Environment" to "SConsEnvironment" 2024-02-14 09:26:47 -06:00
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
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
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
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
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
625c4bdace [Linux] Add support for PCK embedding section with non GNU-ld linkers. 2024-01-24 12:21:05 +02:00
078bfae6a4 Add RD_ENABLED when VULKAN_ENABLED or D3D12_ENABLED is added 2023-12-25 11:13:01 +08:00
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
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