From 6cad1e33093d53579586954eb6b108c3fa154e19 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 15 Nov 2023 23:22:26 +0100 Subject: [PATCH] Add better win32 resource file injection to be done during linker call --- Source/FlaxEditor.Build.cs | 2 - Source/{FlaxEditor.rc => FlaxEngine.rc} | 8 +- Source/FlaxGame.Build.cs | 3 +- Source/FlaxGame.rc | 102 ------------------ Source/Tools/Flax.Build/Build/EngineTarget.cs | 2 + .../Build/NativeCpp/LinkEnvironment.cs | 3 +- .../Platforms/Windows/WindowsToolchain.cs | 22 ++-- 7 files changed, 19 insertions(+), 123 deletions(-) rename Source/{FlaxEditor.rc => FlaxEngine.rc} (91%) delete mode 100644 Source/FlaxGame.rc diff --git a/Source/FlaxEditor.Build.cs b/Source/FlaxEditor.Build.cs index 85facb2a6..a27ae42b3 100644 --- a/Source/FlaxEditor.Build.cs +++ b/Source/FlaxEditor.Build.cs @@ -14,7 +14,6 @@ public class FlaxEditor : EngineTarget { base.Init(); - // Initialize IsEditor = true; OutputName = "FlaxEditor"; ConfigurationName = "Editor"; @@ -31,7 +30,6 @@ public class FlaxEditor : EngineTarget TargetArchitecture.ARM64, }; GlobalDefinitions.Add("USE_EDITOR"); - Win32ResourceFile = Path.Combine(Globals.EngineRoot, "Source", "FlaxEditor.rc"); Modules.Add("Editor"); Modules.Add("CSG"); diff --git a/Source/FlaxEditor.rc b/Source/FlaxEngine.rc similarity index 91% rename from Source/FlaxEditor.rc rename to Source/FlaxEngine.rc index fc44418ba..0097e76a7 100644 --- a/Source/FlaxEditor.rc +++ b/Source/FlaxEngine.rc @@ -70,12 +70,12 @@ BEGIN BLOCK "040004b0" BEGIN VALUE "CompanyName", FLAXENGINE_COMPANY - VALUE "FileDescription", "Flax Editor" + VALUE "FileDescription", PRODUCT_NAME VALUE "FileVersion", FLAXENGINE_VERSION_TEXT - VALUE "InternalName", "FlaxEditor" + VALUE "InternalName", PRODUCT_NAME_INTERNAL VALUE "LegalCopyright", FLAXENGINE_COPYRIGHT - VALUE "OriginalFilename", "FlaxEditor.exe" - VALUE "ProductName", "Flax Editor" + VALUE "OriginalFilename", ORIGINAL_FILENAME + VALUE "ProductName", PRODUCT_NAME VALUE "ProductVersion", FLAXENGINE_VERSION_TEXT END END diff --git a/Source/FlaxGame.Build.cs b/Source/FlaxGame.Build.cs index 8f2bc2b3d..590773244 100644 --- a/Source/FlaxGame.Build.cs +++ b/Source/FlaxGame.Build.cs @@ -14,11 +14,10 @@ public class FlaxGame : EngineTarget { base.Init(); - // Initialize OutputName = "FlaxGame"; ConfigurationName = "Game"; IsPreBuilt = false; - Win32ResourceFile = Path.Combine(Globals.EngineRoot, "Source", "FlaxGame.rc"); + IsMonolithicExecutable = false; } /// diff --git a/Source/FlaxGame.rc b/Source/FlaxGame.rc deleted file mode 100644 index 6d1e4d480..000000000 --- a/Source/FlaxGame.rc +++ /dev/null @@ -1,102 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" -#include "FlaxEngine.Gen.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Polish (Poland) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PLK) -LANGUAGE LANG_POLISH, SUBLANG_DEFAULT - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -// Icon -IDR_MAINFRAME ICON "Icon.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FLAXENGINE_VERSION_MAJOR,FLAXENGINE_VERSION_MINOR,FLAXENGINE_VERSION_BUILD - PRODUCTVERSION FLAXENGINE_VERSION_MAJOR,FLAXENGINE_VERSION_MINOR,FLAXENGINE_VERSION_BUILD - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040004b0" - BEGIN - VALUE "CompanyName", FLAXENGINE_COMPANY - VALUE "FileDescription", "Flax Engine" - VALUE "FileVersion", FLAXENGINE_VERSION_TEXT - VALUE "InternalName", "FlaxEngine" - VALUE "LegalCopyright", FLAXENGINE_COPYRIGHT - VALUE "OriginalFilename", "FlaxGame.exe" - VALUE "ProductName", "Flax Engine" - VALUE "ProductVersion", FLAXENGINE_VERSION_TEXT - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x400, 1200 - END -END - -#endif -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Source/Tools/Flax.Build/Build/EngineTarget.cs b/Source/Tools/Flax.Build/Build/EngineTarget.cs index b8dff9ce0..8c7c4a58a 100644 --- a/Source/Tools/Flax.Build/Build/EngineTarget.cs +++ b/Source/Tools/Flax.Build/Build/EngineTarget.cs @@ -70,6 +70,7 @@ namespace Flax.Build Modules.Add("Main"); Modules.Add("Engine"); + Win32ResourceFile = Path.Combine(Globals.EngineRoot, "Source", "FlaxEngine.rc"); } /// @@ -194,6 +195,7 @@ namespace Flax.Build mainModuleOptions.SourcePaths.Add(mainModule.FolderPath); mainModule.Setup(mainModuleOptions); mainModuleOptions.MergeSourcePathsIntoSourceFiles(); + mainModuleOptions.CompileEnv.PrecompiledHeaderUsage = PrecompiledHeaderFileUsage.None; mainModuleOptions.CompileEnv.PreprocessorDefinitions.Add("FLAXENGINE_API=" + buildOptions.Toolchain.DllImport); Builder.BuildModuleInner(buildData, mainModule, mainModuleOptions, false); diff --git a/Source/Tools/Flax.Build/Build/NativeCpp/LinkEnvironment.cs b/Source/Tools/Flax.Build/Build/NativeCpp/LinkEnvironment.cs index 92f08d71f..2734034c9 100644 --- a/Source/Tools/Flax.Build/Build/NativeCpp/LinkEnvironment.cs +++ b/Source/Tools/Flax.Build/Build/NativeCpp/LinkEnvironment.cs @@ -127,8 +127,7 @@ namespace Flax.Build.NativeCpp LinkAsConsoleProgram = LinkAsConsoleProgram, GenerateDocumentation = GenerateDocumentation }; - foreach (var e in InputFiles) - clone.InputFiles.Add(e); + clone.InputFiles.AddRange(InputFiles); clone.DocumentationFiles.AddRange(DocumentationFiles); clone.InputLibraries.AddRange(InputLibraries); clone.LibraryPaths.AddRange(LibraryPaths); diff --git a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs index e21a1ce1a..2807dcb11 100644 --- a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs +++ b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchain.cs @@ -43,12 +43,12 @@ namespace Flax.Build.Platforms } /// - public override void PreBuild(TaskGraph graph, BuildOptions options) + public override void LinkFiles(TaskGraph graph, BuildOptions options, string outputFilePath) { - base.PreBuild(graph, options); - // Compile and include resource file if need to - if (options.Target.Win32ResourceFile != null && !options.Target.IsPreBuilt && options.Target.OutputType == TargetOutputType.Executable) + if (options.Target.Win32ResourceFile != null && + !options.Target.IsPreBuilt && + (options.LinkEnv.Output == LinkerOutput.Executable || options.LinkEnv.Output == LinkerOutput.SharedLibrary)) { var task = graph.Add(); var args = new List(); @@ -62,24 +62,22 @@ namespace Flax.Build.Platforms // Add preprocessor definitions foreach (var definition in options.CompileEnv.PreprocessorDefinitions) - { args.Add(string.Format("/D \"{0}\"", definition)); - } + args.Add(string.Format("/D \"ORIGINAL_FILENAME=\\\"{0}\\\"\"", Path.GetFileName(outputFilePath))); + args.Add(string.Format("/D \"PRODUCT_NAME=\\\"{0}\\\"\"", options.Target.ProjectName + " " + options.Target.ConfigurationName)); + args.Add(string.Format("/D \"PRODUCT_NAME_INTERNAL=\\\"{0}\\\"\"", options.Target.Name)); // Add include paths foreach (var includePath in options.CompileEnv.IncludePaths) - { AddIncludePath(args, includePath); - } // Add the resource file to the produced item list - var outputFile = Path.Combine(options.IntermediateFolder, Path.GetFileNameWithoutExtension(sourceFile) + ".res"); + var outputFile = Path.Combine(options.IntermediateFolder, Path.GetFileName(outputFilePath) + ".res"); args.Add(string.Format("/Fo\"{0}\"", outputFile)); options.LinkEnv.InputFiles.Add(outputFile); // Request included files to exist - var includes = IncludesCache.FindAllIncludedFiles(sourceFile); - task.PrerequisiteFiles.AddRange(includes); + task.PrerequisiteFiles.AddRange(IncludesCache.FindAllIncludedFiles(sourceFile)); // Add the source file args.Add(string.Format("\"{0}\"", sourceFile)); @@ -91,6 +89,8 @@ namespace Flax.Build.Platforms task.PrerequisiteFiles.Add(sourceFile); task.Cost = 1; } + + base.LinkFiles(graph, options, outputFilePath); } } }