Optimize Web export size
This commit is contained in:
@@ -276,7 +276,6 @@ namespace Flax.Build
|
||||
case TargetPlatform.Linux:
|
||||
case TargetPlatform.iOS:
|
||||
case TargetPlatform.Mac:
|
||||
// TODO: try to disable this on more platforms! (eg. LocalizationService::OnLocalizationChanged uses it)
|
||||
options.CompileEnv.EnableExceptions = true;
|
||||
break;
|
||||
}
|
||||
@@ -288,7 +287,6 @@ namespace Flax.Build
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("BUILD_DEBUG");
|
||||
options.CompileEnv.FunctionLevelLinking = false;
|
||||
options.CompileEnv.Optimization = false;
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.Neither;
|
||||
options.CompileEnv.DebugInformation = true;
|
||||
options.CompileEnv.RuntimeChecks = true;
|
||||
options.CompileEnv.StringPooling = false;
|
||||
@@ -306,7 +304,8 @@ namespace Flax.Build
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("BUILD_DEVELOPMENT");
|
||||
options.CompileEnv.FunctionLevelLinking = true;
|
||||
options.CompileEnv.Optimization = true;
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.FastCode;
|
||||
if (options.CompileEnv.FavorSizeOrSpeed == FavorSizeOrSpeed.Neither)
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.FastCode;
|
||||
options.CompileEnv.DebugInformation = true;
|
||||
options.CompileEnv.RuntimeChecks = false;
|
||||
options.CompileEnv.StringPooling = true;
|
||||
@@ -324,7 +323,8 @@ namespace Flax.Build
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("BUILD_RELEASE");
|
||||
options.CompileEnv.FunctionLevelLinking = true;
|
||||
options.CompileEnv.Optimization = true;
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.FastCode;
|
||||
if (options.CompileEnv.FavorSizeOrSpeed == FavorSizeOrSpeed.Neither)
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.FastCode;
|
||||
options.CompileEnv.DebugInformation = false;
|
||||
options.CompileEnv.RuntimeChecks = false;
|
||||
options.CompileEnv.StringPooling = true;
|
||||
|
||||
@@ -113,6 +113,7 @@ namespace Flax.Deps.Dependencies
|
||||
{
|
||||
BuildStarted(platform, architecture);
|
||||
|
||||
var isMSVC = Platform.GetPlatform(platform, true) is Build.Platforms.WindowsPlatformBase;
|
||||
var buildDir = Path.Combine(root, "build-" + architecture);
|
||||
var installDir = Path.Combine(root, "install-" + architecture);
|
||||
var depsFolder = GetThirdPartyFolder(options, platform, architecture);
|
||||
@@ -120,7 +121,11 @@ namespace Flax.Deps.Dependencies
|
||||
SetupDirectory(buildDir, true);
|
||||
File.Delete(Path.Combine(root, "CMakeCache.txt"));
|
||||
|
||||
Dictionary<string, string> envVars = null;
|
||||
var envVars = new Dictionary<string, string>
|
||||
{
|
||||
{ "CXXFLAGS", isMSVC ? "/EH- /GR-" : "-fno-exceptions -fno-rtti" }, // Disable exceptions and RTTI
|
||||
{ "CMAKE_BUILD_PARALLEL_LEVEL", CmakeBuildParallel },
|
||||
};
|
||||
var libName = "libmsdfgen-core.a";
|
||||
var cmakeArgs = string.Join(" ", args);
|
||||
switch (platform)
|
||||
@@ -131,13 +136,9 @@ namespace Flax.Deps.Dependencies
|
||||
libName = "msdfgen-core.lib";
|
||||
break;
|
||||
case TargetPlatform.Linux:
|
||||
envVars = new Dictionary<string, string>
|
||||
{
|
||||
{ "CC", "clang-" + Configuration.LinuxClangMinVer },
|
||||
{ "CC_FOR_BUILD", "clang-" + Configuration.LinuxClangMinVer },
|
||||
{ "CXX", "clang++-" + Configuration.LinuxClangMinVer },
|
||||
{ "CMAKE_BUILD_PARALLEL_LEVEL", CmakeBuildParallel },
|
||||
};
|
||||
envVars["CC"] = "clang-" + Configuration.LinuxClangMinVer;
|
||||
envVars["CC_FOR_BUILD"] = "clang-" + Configuration.LinuxClangMinVer;
|
||||
envVars["CXX"] = "clang++-" + Configuration.LinuxClangMinVer;
|
||||
cmakeArgs += " -DCMAKE_POSITION_INDEPENDENT_CODE=ON";
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,11 @@ namespace Flax.Build.Platforms
|
||||
private string _compilerPath;
|
||||
private Version _compilerVersion;
|
||||
|
||||
public static bool WithExceptions(NativeCpp.BuildOptions options)
|
||||
{
|
||||
return EngineConfiguration.WithCSharp(options);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WebToolchain"/> class.
|
||||
/// </summary>
|
||||
@@ -102,8 +107,10 @@ namespace Flax.Build.Platforms
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("__EMSCRIPTEN__");
|
||||
if (Configuration.WebThreads)
|
||||
options.CompileEnv.PreprocessorDefinitions.Add("__EMSCRIPTEN_PTHREADS__");
|
||||
options.CompileEnv.EnableExceptions = false;
|
||||
options.CompileEnv.EnableExceptions = WithExceptions(options);
|
||||
options.CompileEnv.CpuArchitecture = CpuArchitecture.SSE4_2;
|
||||
if (options.Configuration == TargetConfiguration.Release)
|
||||
options.CompileEnv.FavorSizeOrSpeed = FavorSizeOrSpeed.SmallCode;
|
||||
}
|
||||
|
||||
private void AddSharedArgs(List<string> args, BuildOptions options, bool debugInformation, bool optimization)
|
||||
@@ -114,15 +121,17 @@ namespace Flax.Build.Platforms
|
||||
args.Add("-g0");
|
||||
|
||||
if (options.CompileEnv.FavorSizeOrSpeed == FavorSizeOrSpeed.SmallCode)
|
||||
args.Add("-Os");
|
||||
args.Add("-Oz");
|
||||
if (options.CompileEnv.FavorSizeOrSpeed == FavorSizeOrSpeed.FastCode)
|
||||
args.Add("-O3");
|
||||
else if (optimization && options.Configuration == TargetConfiguration.Release)
|
||||
args.Add("-O3");
|
||||
else if (optimization)
|
||||
args.Add("-O2");
|
||||
else if (options.CompileEnv.DebugInformation)
|
||||
args.Add("-Og");
|
||||
else
|
||||
args.Add("-O0");
|
||||
args.Add("-O1");
|
||||
|
||||
if (options.CompileEnv.RuntimeTypeInfo)
|
||||
args.Add("-frtti");
|
||||
@@ -169,10 +178,8 @@ namespace Flax.Build.Platforms
|
||||
args.Add("-fsanitize=address");
|
||||
if (sanitizers.HasFlag(Sanitizer.Undefined))
|
||||
args.Add("-fsanitize=undefined");
|
||||
//if (sanitizers == Sanitizer.None && options.Configuration != TargetConfiguration.Release)
|
||||
// args.Add("-fsanitize=null -fsanitize-minimal-runtime"); // Minimal Runtime
|
||||
if (sanitizers == Sanitizer.None) // TODO: fix random memory issues around malloc (eg. when resizing canvas) that are not happening when using Address sanitizer (wierd)
|
||||
args.Add("-fsanitize=address");
|
||||
if (sanitizers == Sanitizer.None && options.Configuration != TargetConfiguration.Release)
|
||||
args.Add("-fsanitize=null -fsanitize-minimal-runtime"); // Minimal Runtime
|
||||
|
||||
if (Configuration.WebThreads)
|
||||
args.Add("-pthread");
|
||||
@@ -283,8 +290,17 @@ namespace Flax.Build.Platforms
|
||||
{
|
||||
args.Add(string.Format("-o \"{0}\"", outputFilePath.Replace('\\', '/')));
|
||||
|
||||
//args.Add("--minify=0");
|
||||
|
||||
AddSharedArgs(args, options, options.LinkEnv.DebugInformation, options.LinkEnv.Optimization);
|
||||
|
||||
// Strip unused things
|
||||
args.Add("-sAUTO_JS_LIBRARIES=0");
|
||||
args.Add("-sGL_ENABLE_GET_PROC_ADDRESS=0");
|
||||
args.Add("-sUSE_GLFW=0");
|
||||
args.Add("-sUSE_WEBGL2=0");
|
||||
args.Add("-sERROR_ON_UNDEFINED_SYMBOLS=0");
|
||||
|
||||
// Setup memory
|
||||
var initialMemory = Configuration.WebInitialMemory;
|
||||
if (options.CompileEnv.Sanitizers.HasFlag(Sanitizer.Address))
|
||||
@@ -303,11 +319,18 @@ namespace Flax.Build.Platforms
|
||||
args.Add("-sLZ4");
|
||||
|
||||
// https://emscripten.org/docs/compiling/Dynamic-Linking.html#dynamic-linking
|
||||
// TODO: use -sMAIN_MODULE=2 and -sSIDE_MODULE=2 to strip unused code (mark public APIs with EMSCRIPTEN_KEEPALIVE)
|
||||
if (options.LinkEnv.Output == LinkerOutput.Executable)
|
||||
if (!options.Target.UseSymbolsExports)
|
||||
{
|
||||
// Strip unused code
|
||||
args.Add("-sMAIN_MODULE=2");
|
||||
}
|
||||
else if (options.LinkEnv.Output == LinkerOutput.Executable)
|
||||
{
|
||||
args.Add("-sMAIN_MODULE");
|
||||
args.Add("-sEXPORT_ALL");
|
||||
//args.Add("-sEXPORT_ALL");
|
||||
|
||||
// Uncomment to debug dynamic library loading issues
|
||||
//args.Add("-sDYLINK_DEBUG=1");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user