Fix using proper engine native module for importing symbols

This commit is contained in:
Wojtek Figat
2023-01-20 15:42:32 +01:00
parent 1c72798229
commit 02e3697817
3 changed files with 22 additions and 3 deletions

View File

@@ -135,9 +135,14 @@ bool MCore::LoadEngine()
return false; return false;
// Prepare managed side // Prepare managed side
const StringAnsi hostExecutable(Platform::GetExecutableFilePath());
CoreCLR::CallStaticMethodByName<void>(TEXT("Init")); CoreCLR::CallStaticMethodByName<void>(TEXT("Init"));
CoreCLR::RegisterNativeLibrary("FlaxEngine", hostExecutable.Get()); #ifdef MCORE_MAIN_MODULE_NAME
// MCORE_MAIN_MODULE_NAME define is injected by Scripting.Build.cs on platforms that use separate shared library for engine symbols
const StringAnsi flaxLibraryPath(Platform::GetMainDirectory() / TEXT(MACRO_TO_STR(MCORE_MAIN_MODULE_NAME)));
#else
const StringAnsi flaxLibraryPath(Platform::GetExecutableFilePath());
#endif
CoreCLR::RegisterNativeLibrary("FlaxEngine", flaxLibraryPath.Get());
MRootDomain = New<MDomain>("Root"); MRootDomain = New<MDomain>("Root");
MDomains.Add(MRootDomain); MDomains.Add(MRootDomain);

View File

@@ -16,9 +16,20 @@ public class Scripting : EngineModule
if (EngineConfiguration.WithCSharp(options)) if (EngineConfiguration.WithCSharp(options))
{ {
if (EngineConfiguration.WithDotNet(options)) if (EngineConfiguration.WithDotNet(options))
{
options.PublicDependencies.Add("nethost"); options.PublicDependencies.Add("nethost");
if (options.Target is EngineTarget engineTarget && engineTarget.UseSeparateMainExecutable(options))
{
// Build target doesn't support linking again main executable (eg. Linux) thus additional shared library is used for the engine (eg. libFlaxEditor.so)
var fileName = options.Platform.GetLinkOutputFileName(engineTarget.OutputName, LinkerOutput.SharedLibrary);
options.CompileEnv.PreprocessorDefinitions.Add("MCORE_MAIN_MODULE_NAME=" + fileName);
}
}
else else
{
options.PublicDependencies.Add("mono"); options.PublicDependencies.Add("mono");
}
} }
options.PrivateDependencies.Add("Utilities"); options.PrivateDependencies.Add("Utilities");

View File

@@ -125,7 +125,10 @@ namespace Flax.Build
#endif #endif
} }
private bool UseSeparateMainExecutable(BuildOptions buildOptions) /// <summary>
/// Returns true if this build target should use separate (aka main-only) executable file and separate runtime (in shared library). Used on platforms that don't support linking again executable file but only shared library (see HasExecutableFileReferenceSupport).
/// </summary>
public bool UseSeparateMainExecutable(BuildOptions buildOptions)
{ {
return UseSymbolsExports && OutputType == TargetOutputType.Executable && !buildOptions.Platform.HasExecutableFileReferenceSupport && !Configuration.BuildBindingsOnly; return UseSymbolsExports && OutputType == TargetOutputType.Executable && !buildOptions.Platform.HasExecutableFileReferenceSupport && !Configuration.BuildBindingsOnly;
} }