Files
FlaxEngine/Source/Tools/Flax.Build/Deploy/Deployer.cs
2021-03-13 12:49:13 +01:00

142 lines
5.3 KiB
C#

// Copyright (c) 2012-2020 Flax Engine. All rights reserved.
using System;
using System.IO;
using System.Text;
using Flax.Build;
namespace Flax.Deploy
{
/// <summary>
/// The automation and deployment utility.
/// </summary>
class Deployer
{
public static string PackageOutputPath;
public static int VersionMajor;
public static int VersionMinor;
public static int VersionBuild;
public static bool Run()
{
try
{
Initialize();
if (Configuration.DeployEditor)
{
BuildEditor();
Deployment.Editor.Package();
}
if (Configuration.DeployPlatforms)
{
if (Configuration.BuildPlatforms == null || Configuration.BuildPlatforms.Length == 0)
{
BuildPlatform(TargetPlatform.Linux, TargetArchitecture.x64);
BuildPlatform(TargetPlatform.UWP, TargetArchitecture.x64);
BuildPlatform(TargetPlatform.Windows, TargetArchitecture.x64);
BuildPlatform(TargetPlatform.Android, TargetArchitecture.ARM64);
}
else
{
var architectures = Configuration.BuildArchitectures == null || Configuration.BuildArchitectures.Length == 0 ? Globals.AllArchitectures : Configuration.BuildArchitectures;
foreach (var platform in Configuration.BuildPlatforms)
{
BuildPlatform(platform, architectures);
}
}
}
}
catch (Exception ex)
{
Log.Error("Build failed!");
Log.Exception(ex);
return true;
}
finally
{
Cleanup();
}
return false;
}
static void Initialize()
{
// Read the current engine version
var engineVersion = EngineTarget.EngineVersion;
VersionMajor = engineVersion.Major;
VersionMinor = engineVersion.Minor;
VersionBuild = engineVersion.Build;
// Generate the engine build config
var buildConfigHeader = new StringBuilder();
{
buildConfigHeader.AppendLine("#pragma once");
buildConfigHeader.AppendLine();
buildConfigHeader.AppendLine("#define COMPILE_WITH_DEV_ENV 0");
buildConfigHeader.AppendLine("#define OFFICIAL_BUILD 1");
}
Utilities.WriteFileIfChanged(Path.Combine(Globals.EngineRoot, "Source/Engine/Core/Config.Gen.h"), buildConfigHeader.ToString());
// Prepare the package output
PackageOutputPath = Path.Combine(Globals.EngineRoot, string.Format("Package_{0}_{1:00}_{2:00000}", VersionMajor, VersionMinor, VersionBuild));
Utilities.DirectoryDelete(PackageOutputPath);
Directory.CreateDirectory(PackageOutputPath);
Log.Info(string.Empty);
Log.Info(string.Empty);
}
private static void Cleanup()
{
#if false
// Restore the generated config file (could resource with git but do it here just in case)
using (var writer = new StreamWriter(Path.Combine(ProjectRoot, "Source/Engine/Core/Config.Gen.h")))
{
writer.WriteLine("#pragma once");
writer.WriteLine();
}
#endif
}
private static void BuildEditor()
{
var targetPlatform = Platform.BuildPlatform.Target;
FlaxBuild.Build(Globals.EngineRoot, "FlaxEditor", targetPlatform, TargetArchitecture.x64, TargetConfiguration.Debug);
FlaxBuild.Build(Globals.EngineRoot, "FlaxEditor", targetPlatform, TargetArchitecture.x64, TargetConfiguration.Development);
FlaxBuild.Build(Globals.EngineRoot, "FlaxEditor", targetPlatform, TargetArchitecture.x64, TargetConfiguration.Release);
}
private static bool CannotBuildPlatform(TargetPlatform platform)
{
if (!Platform.BuildPlatform.CanBuildPlatform(platform))
{
Log.Warning(string.Format("Cannot build for {0} on {1}", platform, Platform.BuildPlatform.Target));
return true;
}
return false;
}
private static void BuildPlatform(TargetPlatform platform, params TargetArchitecture[] architectures)
{
if (CannotBuildPlatform(platform))
return;
foreach (var architecture in architectures)
{
if (Platform.IsPlatformSupported(platform, architecture))
{
FlaxBuild.Build(Globals.EngineRoot, "FlaxGame", platform, architecture, TargetConfiguration.Debug);
FlaxBuild.Build(Globals.EngineRoot, "FlaxGame", platform, architecture, TargetConfiguration.Development);
FlaxBuild.Build(Globals.EngineRoot, "FlaxGame", platform, architecture, TargetConfiguration.Release);
}
}
Deployment.Platforms.Package(platform);
}
}
}