182 lines
8.4 KiB
C#
182 lines
8.4 KiB
C#
// Copyright (c) 2012-2020 Flax Engine. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using Flax.Build;
|
|
using Ionic.Zip;
|
|
using Ionic.Zlib;
|
|
|
|
namespace Flax.Deploy
|
|
{
|
|
partial class Deployment
|
|
{
|
|
public class Editor
|
|
{
|
|
private static string RootPath;
|
|
private static string OutputPath;
|
|
|
|
public static void Package()
|
|
{
|
|
// Prepare
|
|
RootPath = Globals.EngineRoot;
|
|
OutputPath = Path.Combine(Deployer.PackageOutputPath, "Editor");
|
|
Directory.CreateDirectory(OutputPath);
|
|
Log.Info(string.Empty);
|
|
Log.Info("Deploy editor files");
|
|
Log.Info(string.Empty);
|
|
|
|
// Deploy binaries
|
|
DeployEditorBinaries(TargetConfiguration.Debug);
|
|
DeployEditorBinaries(TargetConfiguration.Development);
|
|
DeployEditorBinaries(TargetConfiguration.Release);
|
|
{
|
|
var binariesSubDir = "Binaries/Tools";
|
|
var src = Path.Combine(RootPath, binariesSubDir);
|
|
var dst = Path.Combine(OutputPath, binariesSubDir);
|
|
|
|
DeployFile(src, dst, "Flax.Build.exe");
|
|
DeployFile(src, dst, "Flax.Build.xml");
|
|
DeployFile(src, dst, "Ionic.Zip.Reduced.dll");
|
|
DeployFile(src, dst, "Newtonsoft.Json.dll");
|
|
}
|
|
|
|
// Deploy content
|
|
DeployFolder(RootPath, OutputPath, "Content");
|
|
|
|
// Deploy Mono runtime data files
|
|
if (Platform.BuildPlatform.Target == TargetPlatform.Windows)
|
|
{
|
|
DeployFolder(RootPath, OutputPath, "Source/Platforms/Editor/Windows/Mono");
|
|
}
|
|
else
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
// Deploy DotNet deps
|
|
{
|
|
var subDir = "Source/Platforms/DotNet";
|
|
DeployFile(RootPath, OutputPath, subDir, "Newtonsoft.Json.dll");
|
|
DeployFile(RootPath, OutputPath, subDir, "Newtonsoft.Json.xml");
|
|
}
|
|
|
|
// Deploy sources
|
|
{
|
|
// Modules public files
|
|
var rules = Builder.GenerateRulesAssembly();
|
|
var files = new List<string>();
|
|
foreach (var module in rules.Modules)
|
|
{
|
|
module.GetFilesToDeploy(files);
|
|
files.Add(module.FilePath);
|
|
foreach (var file in files)
|
|
{
|
|
var src = Path.GetDirectoryName(file);
|
|
var dst = Path.Combine(OutputPath, Utilities.MakePathRelativeTo(src, RootPath));
|
|
var filename = Path.GetFileName(file);
|
|
DeployFile(src, dst, filename);
|
|
}
|
|
files.Clear();
|
|
}
|
|
|
|
// Shader includes
|
|
var shaders = Directory.GetFiles(Path.Combine(RootPath, "Source/Shaders"), "*.hlsl", SearchOption.AllDirectories);
|
|
foreach (var shader in shaders)
|
|
{
|
|
var localPath = Utilities.MakePathRelativeTo(shader, RootPath);
|
|
DeployFile(shader, Path.Combine(OutputPath, localPath));
|
|
}
|
|
|
|
// Custom engine files
|
|
DeployFile(RootPath, OutputPath, "Source/ThirdParty", "concurrentqueue.h");
|
|
DeployFile(RootPath, OutputPath, "Source", ".editorconfig");
|
|
DeployFile(RootPath, OutputPath, "Source", "flax.natvis");
|
|
DeployFile(RootPath, OutputPath, "Source", "FlaxEditor.Build.cs");
|
|
DeployFile(RootPath, OutputPath, "Source", "FlaxEngine.Gen.h");
|
|
DeployFile(RootPath, OutputPath, "Source", "FlaxGame.Build.cs");
|
|
|
|
// Mark deployed sources as already prebuilt
|
|
Utilities.ReplaceInFile(Path.Combine(OutputPath, "Source/FlaxEditor.Build.cs"), "IsPreBuilt = false;", "IsPreBuilt = true;");
|
|
Utilities.ReplaceInFile(Path.Combine(OutputPath, "Source/FlaxGame.Build.cs"), "IsPreBuilt = false;", "IsPreBuilt = true;");
|
|
}
|
|
|
|
// Deploy project
|
|
DeployFile(RootPath, OutputPath, "Flax.flaxproj");
|
|
|
|
// Compress
|
|
Log.Info(string.Empty);
|
|
Log.Info("Compressing editor files...");
|
|
var editorPackageZipPath = Path.Combine(Deployer.PackageOutputPath, "Editor.zip");
|
|
using (ZipFile zip = new ZipFile())
|
|
{
|
|
zip.AddDirectory(OutputPath);
|
|
|
|
zip.CompressionLevel = CompressionLevel.BestCompression;
|
|
zip.Comment = string.Format("Flax Editor {0}.{1}.{2}\nDate: {3}", Deployer.VersionMajor, Deployer.VersionMinor, Deployer.VersionBuild, DateTime.UtcNow);
|
|
|
|
zip.Save(editorPackageZipPath);
|
|
}
|
|
Log.Info("Compressed editor package size: " + Utilities.GetFileSize(editorPackageZipPath));
|
|
|
|
Log.Info("Compressing editor debug symbols files...");
|
|
editorPackageZipPath = Path.Combine(Deployer.PackageOutputPath, "EditorDebugSymbols.zip");
|
|
using (ZipFile zip = new ZipFile())
|
|
{
|
|
zip.AddDirectory(Path.Combine(Deployer.PackageOutputPath, "EditorDebugSymbols"));
|
|
|
|
zip.CompressionLevel = CompressionLevel.BestCompression;
|
|
zip.Comment = string.Format("Flax Editor {0}.{1}.{2}\nDate: {3}", Deployer.VersionMajor, Deployer.VersionMinor, Deployer.VersionBuild, DateTime.UtcNow);
|
|
|
|
zip.Save(editorPackageZipPath);
|
|
}
|
|
Log.Info("Compressed editor debug symbols package size: " + Utilities.GetFileSize(editorPackageZipPath));
|
|
|
|
// Cleanup
|
|
Utilities.DirectoryDelete(OutputPath);
|
|
Utilities.DirectoryDelete(Path.Combine(Deployer.PackageOutputPath, "EditorDebugSymbols"));
|
|
}
|
|
|
|
private static void DeployEditorBinaries(TargetConfiguration configuration)
|
|
{
|
|
if (Platform.BuildPlatform.Target == TargetPlatform.Windows)
|
|
{
|
|
var binariesSubDir = "Binaries/Editor/Win64/" + configuration;
|
|
var src = Path.Combine(RootPath, binariesSubDir);
|
|
var dst = Path.Combine(OutputPath, binariesSubDir);
|
|
var dstDebug = Path.Combine(Deployer.PackageOutputPath, "EditorDebugSymbols/Win64/" + configuration);
|
|
Directory.CreateDirectory(dst);
|
|
Directory.CreateDirectory(dstDebug);
|
|
|
|
// Validate that build editor app has a valid version number
|
|
var editorExeName = "FlaxEditor.exe";
|
|
var version = FileVersionInfo.GetVersionInfo(Path.Combine(src, editorExeName));
|
|
if (version.FileMajorPart != Deployer.VersionMajor || version.FileMinorPart != Deployer.VersionMinor || version.FileBuildPart != Deployer.VersionBuild)
|
|
{
|
|
throw new InvalidDataException("Invalid engine build number. Output " + editorExeName + " has not matching version number.");
|
|
}
|
|
|
|
// Deploy binaries
|
|
DeployFile(src, dst, editorExeName);
|
|
DeployFile(src, dst, "FlaxEditor.Build.json");
|
|
DeployFile(src, dst, "FlaxEditor.lib");
|
|
DeployFile(src, dst, "FlaxEngine.CSharp.pdb");
|
|
DeployFile(src, dst, "FlaxEngine.CSharp.xml");
|
|
DeployFile(src, dst, "Newtonsoft.Json.pdb");
|
|
DeployFiles(src, dst, "*.dll");
|
|
|
|
// Deploy debug symbols files
|
|
DeployFiles(src, dstDebug, "*.pdb");
|
|
File.Delete(Path.Combine(dstDebug, "FlaxEngine.CSharp.pdb"));
|
|
File.Delete(Path.Combine(dstDebug, "Newtonsoft.Json.pdb"));
|
|
}
|
|
else
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|