// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. #pragma once #include "CookingData.h" #include "Engine/Core/Collections/Dictionary.h" #include "Editor/Scripting/ScriptsBuilder.h" #include "Engine/Graphics/PixelFormat.h" class TextureBase; /// /// The platform support tools base interface. /// class FLAXENGINE_API PlatformTools { public: /// /// Finalizes an instance of the class. /// virtual ~PlatformTools() = default; /// /// Gets the name of the platform for UI and logging. /// /// The name. virtual const Char* GetDisplayName() const = 0; /// /// Gets the name of the platform for filesystem cache directories, deps folder. /// /// The name. virtual const Char* GetName() const = 0; /// /// Gets the type of the platform. /// /// The platform type. virtual PlatformType GetPlatform() const = 0; /// /// Gets the architecture of the platform. /// /// The architecture type. virtual ArchitectureType GetArchitecture() const = 0; /// /// Gets the value indicating whenever platform requires AOT. /// /// True if platform uses AOT and needs C# assemblies to be precompiled, otherwise false. virtual bool UseAOT() const { return false; } /// /// Gets the texture format that is supported by the platform for a given texture. /// /// The cooking data. /// The texture. /// The texture format. /// The target texture format for the platform. virtual PixelFormat GetTextureFormat(CookingData& data, TextureBase* texture, PixelFormat format) { return format; } /// /// Checks if the given file is a native code. /// /// The cooking data. /// The file path. /// True if it's a native file, otherwise false. virtual bool IsNativeCodeFile(CookingData& data, const String& file) { return false; } public: /// /// Called when game building starts. /// /// The cooking data. virtual void OnBuildStarted(CookingData& data) { } /// /// Called when game building ends. /// /// The cooking data. /// True if build failed, otherwise false. virtual void OnBuildEnded(CookingData& data, bool failed) { } /// /// Called before scripts compilation. Can be used to inject custom configuration or prepare data. /// /// The cooking data. /// True if failed, otherwise false. virtual bool OnScriptsCompilationStart(CookingData& data) { return false; } /// /// Called after scripts compilation. Can be used to cleanup or prepare data. /// /// The cooking data. /// True if failed, otherwise false. virtual bool OnScriptsCompilationEnd(CookingData& data) { return false; } /// /// Called after compiled scripts deploy. Can be used to override or patch the output files. /// /// The cooking data. /// True if failed, otherwise false. virtual bool OnScriptsStepDone(CookingData& data) { return false; } /// /// Called during binaries deployment. /// /// The cooking data. /// True if failed, otherwise false. virtual bool OnDeployBinaries(CookingData& data) { return false; } /// /// The C# scripts AOT configuration options. /// struct AotConfig { String AotCompilerPath; String AotCompilerArgs; String AssemblerPath; String AssemblerArgs; String ArchiverPath; String ArchiverArgs; String AuxToolPath; String AuxToolArgs; String AotCachePath; Dictionary EnvVars; Array AssembliesSearchDirs; Array Assemblies; AotConfig(CookingData& data) { Platform::GetEnvironmentVariables(EnvVars); EnvVars[TEXT("MONO_PATH")] = data.DataOutputPath / TEXT("Mono/lib/mono/4.5"); AssembliesSearchDirs.Add(data.DataOutputPath / TEXT("Mono/lib/mono/4.5")); } }; /// /// Called to configure AOT options. /// /// The cooking data. /// The configuration. virtual void OnConfigureAOT(CookingData& data, AotConfig& config) { } /// /// Called to execute AOT for the given assembly. /// /// The cooking data. /// The configuration. /// The input managed library file path. /// True if failed, otherwise false. virtual bool OnPerformAOT(CookingData& data, AotConfig& config, const String& assemblyPath) { return false; } /// /// Called after AOT execution for the assemblies. /// /// The cooking data. /// The configuration. /// True if failed, otherwise false. virtual bool OnPostProcessAOT(CookingData& data, AotConfig& config) { return false; } /// /// Called during staged build post-processing. /// /// The cooking data. /// True if failed, otherwise false. virtual bool OnPostProcess(CookingData& data) { return false; } /// /// Called to run the cooked game build on device. /// /// The cooking data. /// The game executable file path to run (or tool path to run if build should run on remote device). Empty if not supported. /// The command line for executable file. Use `{0}` to insert custom command line for passing to the cooked game. /// Overriden custom working directory to use. Leave empty if use cooked data output folder. virtual void OnRun(CookingData& data, String& executableFile, String& commandLineFormat, String& workingDir) { } };