1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00
Commit Graph

185 Commits

Author SHA1 Message Date
Thaddeus Crews
0cd7bb51e9 Merge pull request #96146 from raulsntos/dotnet/resolve-hostfxr-path-from-command-line
C#: Resolve the hostfxr path using dotnet CLI
2025-06-09 12:31:27 -05:00
Raul Santos
5a2c033914 C#: Resolve the hostfxr path using dotnet CLI
Instead of trying to get the location of the dotnet CLI from PATH (which is unavailable in some platforms that don't allow reading environment variables), we execute the dotnet CLI to list the available SDKs and find the hostfxr location that way.
2025-06-09 06:35:20 +02:00
Rémi Verschelde
25a3c27c41 Merge pull request #105628 from rsanchezsaez/apple/ios-visionos-4.5
Native visionOS platform support
2025-05-20 23:09:07 +02:00
Ricardo Sanchez-Saez
457299449d Introduce 'drivers/apple_embedded' abstract platform for code reuse 2025-05-19 15:37:13 -07:00
Thaddeus Crews
2bf7ac76cf Merge pull request #106456 from Repiteo/style/remove-DEBUG_METHODS_ENABLED
Style: Remove redundant `DEBUG_METHODS_ENABLED` macro
2025-05-19 08:01:35 -05:00
Thaddeus Crews
d57050c66d Merge pull request #106502 from TCROC/fix-aot-crash
Fix crash on aot unloading
2025-05-19 08:01:26 -05:00
Travis Lange
15c684aad9 fix crash on aot unloading 2025-05-16 16:26:40 -04:00
Thaddeus Crews
d237e31a89 Style: Remove redundant DEBUG_METHODS_ENABLED
• Replaced with functionally identical and far more ubiquitous `DEBUG_ENABLED`
2025-05-15 13:09:41 -05:00
Raul Santos
b941c2d013 [.NET] Add a preload hook to load .NET assemblies from the APK
Avoids using assemblies extracted to a temporary directory in Android.
2025-04-10 21:10:51 +02:00
Thaddeus Crews
1cb3cfaa8e Style: Convert namespaces to PascalCase 2025-03-23 19:10:24 -05:00
Thaddeus Crews
0c8f4f3d91 Merge pull request #97908 from atlasapplications/just-linux-bionic
Add `linux-bionic` RID export option
2025-03-07 15:12:32 -06:00
Thaddeus Crews
c937b6d180 Merge pull request #102419 from Ivorforce/std-size
Use `std::size` instead of `sizeof(a) / sizeof(a[0])` pattern throughout the codebase.
2025-03-07 15:12:25 -06:00
Lukas Tenbrink
e34f1f504c Use std::size instead of sizeof(a) / sizeof(a[0]) pattern throughout the codebase. 2025-02-07 14:57:48 +01:00
Justin Sasso
8a4bc9881f Add linux-bionic RID Export Option
Adds an export option to enable the linux-bionic RID so Android can export with NativeAOT enabled.
2025-01-28 12:54:10 -05:00
Lukas Tenbrink
512abc38b2 Remove implicit conversions from String, Char16String and CharString to data pointers. Make conversions to StrRange implicit to aid transition. 2025-01-17 17:31:58 +01:00
Raul Santos
63960e1ed6 [.NET] Update required .NET SDK version in error messages
Also, replaces the download URL with a shorter one since links are not clickable so I thought it'd be more convenient.
2024-12-20 21:57:38 +01:00
Rémi Verschelde
c92a6c7e27 CI: Update clang-format pre-commit hook to 19.1.0 2024-09-26 11:46:12 +02:00
Raul Santos
5860ec553d C#: Use char * with CoreCLR/MonoVM APIs 2024-09-17 17:51:17 +02:00
Raul Santos
0aa46e19c5 C#: Fallback to CoreCLR/MonoVM hosting APIs when hostfxr/NativeAOT fails
Some platforms don't support hostfxr but we can use the coreclr/monosgen library directly to initialize the runtime.

Android exports now use the `android` runtime identifier instead of `linux-bionic`, this removes the restrictions we previously had:
- Adds support for all Android architectures (arm32, arm64, x32, and x64), previously only the 64-bit architectures were supported.
- Loads `System.Security.Cryptography.Native.Android` (the .NET library that binds to the Android OS crypto functions).
2024-09-16 17:07:03 +02:00
A Thousand Ships
aff2e47bff [C#] Unexpose GodotSharp
This class seems to have been exposed accidentally, and breaks
documentation on non-mono builds, requiring hacks
2024-05-04 14:09:42 +02:00
Rémi Verschelde
736696b533 Merge pull request #87679 from raulsntos/dotnet/remove-unused
C#: Remove unused code
2024-01-30 17:48:07 +01:00
Raul Santos
82380ec700 C#: Remove unused code
- Remove `AotBuilder` that was used for MonoAOT in 3.x.
- Remove `PlaySettings` that was used for IDE support in 3.x.
- Remove `ApiAssembliesInfo` that was used for Project generation in 3.x.
- Remove pieces of the old iOS support from 3.x.
2024-01-28 16:09:59 +01:00
Zae
e868a9f577 C#: Fix not assigning runtime_initialized when initializing with AOT. 2024-01-26 05:44:40 +08:00
Rémi Verschelde
6afd320984 Merge pull request #78157 from RedworkDE/net-shutting-down-abruptly
C#: Fix crash with `DisposablesTracker_OnGodotShuttingDown`
2023-10-31 20:52:27 +01:00
Raul Santos
be1dfd3b3a C#: Allow exporting games without C#
When exporting a game that contains a C# solution, a feature is added so the exported game can check if it should initialize the .NET module. Otherwise, the module initialization is skipped so games without C# won't check for the assemblies and won't show alerts when they're missing.
2023-10-16 05:07:11 +02:00
Andreia Gaita
ee9a735c26 Add C# iOS support
This support is experimental and requires .NET 8

Known issues:
- Requires macOS due to use of lipo and xcodebuild
- arm64 simulator templates are not currently included
  in the official packaging
2023-10-09 18:22:56 +02:00
Raul Santos
ef0e279fbb Show alert if .NET assemblies dir does not exist 2023-08-03 13:52:13 +02:00
RedworkDE
7c456d2d0d C#: Remove old and unused android support code for mono 2023-06-28 22:34:14 +02:00
RedworkDE
e0f644a48d C#: Fix editor integration breaking and causing error spam when reloading assemblies fails
- Do not reload scripts from non-collectible assemblies
- Do not load GodotTools as collectible
- Do not attempt to reload the same project assembly forever
2023-06-21 12:47:52 +02:00
Rémi Verschelde
25b2f1780a Style: Harmonize header includes in modules
This applies our existing style guide, and adds a new rule to that style
guide for modular components such as platform ports and modules:

Includes from the platform port or module ("local" includes) should be listed
first in their own block using relative paths, before Godot's "core" includes
which use "absolute" (project folder relative) paths, and finally thirdparty
includes.

Includes in `#ifdef`s come after their relevant section, i.e. the overall
structure is:

- Local includes
  * Conditional local includes
- Core includes
  * Conditional core includes
- Thirdparty includes
  * Conditional thirdparty includes
2023-06-15 14:35:45 +02:00
RedworkDE
92f13ba9ea C#: Unify project name handling and fix issues with the handling of some special characters
Co-authored-by: Raul Santos <raulsntos@gmail.com>
2023-06-14 21:07:58 +02:00
RedworkDE
d515fcc47a C#: Fix crash with DisposablesTracker_OnGodotShuttingDown 2023-06-13 07:49:21 +02:00
Raul Santos
a1f454fee3 C#: Add global class support
Co-authored-by: willnationsdev <willnationsdev@gmail.com>
2023-05-29 19:04:02 +02:00
RedworkDE
6b050a3502 C#: Fix editor crashing without a message when .NET is not installed 2023-02-23 13:52:45 +01:00
Juan Linietsky
6f0e210093 Refactor ProjectSetting overrides
* Overrides no longer happen for set/get.
* They must be checked with a new function: `ProjectSettings::get_setting_with_override()`.
* GLOBAL_DEF/GLOBAL_GET updated to use this

This change solves many problems:
* General confusion about getting the actual or overriden setting.
* Feature tags available after settings are loaded were being ignored, they are now considered.
* Hacks required for the Project Settings editor to work.

Fixes #64100. Fixes #64014. Fixes #61908.
2023-01-13 15:13:56 +01:00
Rémi Verschelde
d95794ec8a One Copyright Update to rule them all
As many open source projects have started doing it, we're removing the
current year from the copyright notice, so that we don't need to bump
it every year.

It seems like only the first year of publication is technically
relevant for copyright notices, and even that seems to be something
that many companies stopped listing altogether (in a version controlled
codebase, the commits are a much better source of date of publication
than a hardcoded copyright statement).

We also now list Godot Engine contributors first as we're collectively
the current maintainers of the project, and we clarify that the
"exclusive" copyright of the co-founders covers the timespan before
opensourcing (their further contributions are included as part of Godot
Engine contributors).

Also fixed "cf." Frenchism - it's meant as "refer to / see".
2023-01-05 13:25:55 +01:00
Ignacio Roldán Etcheverry
f784fb2000 C#: Replace libnethost dependency to find hostfxr
We want to replace libnethost as it gives us issues with some compilers.
Our implementation tries to mimic libnethost's hostfxr_resolver search
logic. We try to use the same function names for easier comparing in
case we need to update this in the future.
2022-09-07 16:36:36 +02:00
Aaron Franke
10a56981dc Rename String plus_file to path_join 2022-08-29 19:38:13 -05:00
Ignacio Roldán Etcheverry
051f24b067 Merge pull request #65049 from paulloz/dotnet/win10-export
C#: Fix .NET export template compilation on Windows
2022-08-29 18:34:02 +02:00
Paul Joannon
ab5807d722 Fix .NET export template compilation on Windows 10 2022-08-29 17:49:37 +02:00
Raul Santos
b0274d0ee7 Fix .NET exporting in Linux
- Fix platform detection after Linux OS name was renamed from `LinuxBSD`
to `Linux`
- Fix arch detection after renaming `64` to `x86_64`
- Fix typo in `find_hostfxr`
2022-08-28 15:44:05 +02:00
Raul Santos
c56b157c61 Avoid trying to load non-existent assembly
If the project assembly does not exist, return `false` directly instead
of trying to load it.
This prevents the `System.InvalidOperationException` thrown for failing
to locate managed application.
2022-08-22 11:48:12 +02:00
Ignacio Roldán Etcheverry
2c180f62d9 C#: Replace P/Invoke with delegate pointers
- Moves interop functions to UnmanagedCallbacks struct that
  contains the function pointers and is passed to C#.

- Implements UnmanagedCallbacksGenerator, a C# source generator that
  generates the UnmanagedCallbacks struct in C# and the body for the
  NativeFuncs methods (their implementation just calls the function
  pointer in the UnmanagedCallbacks). The generated methods are needed
  because .NET pins byref parameters of native calls, even if they are
  'ref struct's, which don't need pinning. The generated methods use
  `Unsafe.AsPointer` so that we can benefit from byref parameters
  without suffering overhead of pinning.

Co-authored-by: Raul Santos <raulsntos@gmail.com>
2022-08-22 03:36:52 +02:00
Ignacio Roldán Etcheverry
1bf4397e5b C#: Use custom project setting for C# project files name
The setting is initially assigned the name of the Godot project,
but it's kept freezed to prevent issues when renaming the Godot
project.

The user can always rename the C# project and solution manually and
change the setting to the new name.
2022-08-22 03:36:52 +02:00
Ignacio Roldán Etcheverry
97713ff77a C#: Add source generator for signals as events
Changed the signal declaration signal to:

```
// The following generates a MySignal event
[Signal] public delegate void MySignalEventHandler(int param);
```
2022-08-22 03:36:52 +02:00
Ignacio Roldán Etcheverry
e235cef09f C#: Re-implement assembly reloading with ALCs 2022-08-22 03:36:51 +02:00
Ignacio Roldán Etcheverry
4b90d16250 C#: Initial NativeAOT support
This commit adds initial support for games exported as NativeAOT shared
libraries.

At this moment, the NativeAOT runtime is experimental. Additionally,
Godot is not trim-safe as it still makes some use of reflection.
For the time being, a rd.xml file is needed to prevent code triming:

```
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="GodotSharp" Dynamic="Required All" />
    <Assembly Name="GAME_ASSEMBLY" Dynamic="Required All" />
  </Application>
</Directives>
```

These are the csproj changes for publishing:

```
  <PropertyGroup>
    <NativeLib>Shared</NativeLib>
  </PropertyGroup>
  <ItemGroup>
    <RdXmlFile Include="rd.xml" />
    <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="7.0.0-*" />
  </ItemGroup>
```

More info:
- https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/compiling.md
- https://github.com/dotnet/runtimelab/tree/feature/NativeAOT/samples/NativeLibrary
- https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/rd-xml-format.md
2022-08-22 03:36:51 +02:00
Ignacio Roldán Etcheverry
778007a358 C#: Re-introduce exception logging and error stack traces in editor
These two had been disabled while moving to .NET 5, as the previous
implementation relied on Mono embedding APIs.
2022-08-22 03:36:51 +02:00
Ignacio Roldán Etcheverry
67db89988d C#: Ensure we only create one CSharpScript per type
Previously, for each scripts class instance that was created from code
rather than by the engine, we were constructing, configuring and
assigning a new CSharpScript.
This has changed now and we make sure there's only one CSharpScript
associated to each type.
2022-08-22 03:36:51 +02:00
Ignacio Roldán Etcheverry
88e367a406 C#/netcore: Add base desktop game export implementation
This base implementation is still very barebones but it defines the path
for how exporting will work (at least when embedding the .NET runtime).

Many manual steps are still needed, which should be automatized in the
future. For example, in addition to the API assemblies, now you also
need to copy the GodotPlugins assembly to each game project.
2022-08-22 03:36:51 +02:00