_some prog with dynamic linking perhaps
Some checks failed
Build Android / Game (Android, Release ARM64) (push) Has been cancelled
Build iOS / Game (iOS, Release ARM64) (push) Has been cancelled
Build Linux / Editor (Linux, Development x64) (push) Has been cancelled
Build Linux / Game (Linux, Release x64) (push) Has been cancelled
Build macOS / Editor (Mac, Development ARM64) (push) Has been cancelled
Build macOS / Game (Mac, Release ARM64) (push) Has been cancelled
Build Windows / Editor (Windows, Development x64) (push) Has been cancelled
Build Windows / Game (Windows, Release x64) (push) Has been cancelled
Cooker / Cook (Mac) (push) Has been cancelled
Tests / Tests (Linux) (push) Has been cancelled
Tests / Tests (Windows) (push) Has been cancelled
Some checks failed
Build Android / Game (Android, Release ARM64) (push) Has been cancelled
Build iOS / Game (iOS, Release ARM64) (push) Has been cancelled
Build Linux / Editor (Linux, Development x64) (push) Has been cancelled
Build Linux / Game (Linux, Release x64) (push) Has been cancelled
Build macOS / Editor (Mac, Development ARM64) (push) Has been cancelled
Build macOS / Game (Mac, Release ARM64) (push) Has been cancelled
Build Windows / Editor (Windows, Development x64) (push) Has been cancelled
Build Windows / Game (Windows, Release x64) (push) Has been cancelled
Cooker / Cook (Mac) (push) Has been cancelled
Tests / Tests (Linux) (push) Has been cancelled
Tests / Tests (Windows) (push) Has been cancelled
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
using Mono.Cecil;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -420,7 +421,18 @@ namespace Flax.Build
|
||||
rmdir /S /Q %command%
|
||||
"""
|
||||
);
|
||||
/*Utilities.WriteFileIfChanged(Path.Combine(Path.GetDirectoryName(inputFiles[0]), "rm.bat"),
|
||||
"""
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
set command=%*
|
||||
set command=!command:~3!
|
||||
del /F /Q /S %command%
|
||||
rmdir /S /Q %command%
|
||||
"""
|
||||
);*/
|
||||
|
||||
ConcurrentBag<string> outputStaticLibraryFiles = new ();
|
||||
var compileAssembly = (string assemblyPath) =>
|
||||
{
|
||||
//if (!assemblyPath.Contains("Newtonsoft"))
|
||||
@@ -493,8 +505,9 @@ namespace Flax.Build
|
||||
// Copy AOT build products
|
||||
foreach (var outputFile in options.OutputFiles)
|
||||
{
|
||||
outputStaticLibraryFiles.Add(outputFile);
|
||||
// Skip if deployed file is already valid
|
||||
var deployedFilePath = Path.Combine(dotnetOutputPath, Path.GetFileName(outputFile));
|
||||
/*var deployedFilePath = Path.Combine(dotnetOutputPath, Path.GetFileName(outputFile));
|
||||
if (!File.Exists(deployedFilePath) || File.GetLastWriteTime(outputFile) > File.GetLastWriteTime(deployedFilePath))
|
||||
{
|
||||
// Copy to the destination folder
|
||||
@@ -502,7 +515,7 @@ namespace Flax.Build
|
||||
if (useDebug && File.Exists(outputFile + ".pdb"))
|
||||
Utilities.FileCopy(outputFile + ".pdb", Path.Combine(dotnetOutputPath, Path.GetFileName(outputFile + ".pdb")));
|
||||
validCache = false;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -554,6 +567,65 @@ namespace Flax.Build
|
||||
throw new Exception("Mono AOT failed to link static libraries into a shared module");
|
||||
}
|
||||
}
|
||||
else if (Configuration.AOTMode == DotNetAOTModes.MonoAOTDynamic)
|
||||
{
|
||||
var linkAssembly = (string outputFile) =>
|
||||
{
|
||||
Log.Info("");
|
||||
Log.Warning(" " + Path.GetFileNameWithoutExtension(outputFile));
|
||||
Log.Info("");
|
||||
|
||||
// Get output file path for this assembly (platform can use custom extension)
|
||||
var options = new Toolchain.CSharpOptions
|
||||
{
|
||||
Action = Toolchain.CSharpOptions.ActionTypes.MonoLink,
|
||||
InputFiles = [Path.Combine(Path.GetDirectoryName(outputFile), Path.GetFileNameWithoutExtension(outputFile))],
|
||||
OutputFiles = [outputFile],
|
||||
AssembliesPath = aotAssembliesPath,
|
||||
//ClassLibraryPath = dotnetLibPath,
|
||||
PlatformToolsPath = Path.GetDirectoryName(outputFile),
|
||||
//EnableDebugSymbols = useDebug,
|
||||
//EnableToolDebug = dotnetAotDebug,
|
||||
};
|
||||
if (!File.Exists(outputFile) && buildToolchain.CompileCSharp(ref options))
|
||||
{
|
||||
Log.Error("Failed to run linker on assembly " + outputFile);
|
||||
failed = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip if deployed file is already valid
|
||||
var deployedFilePath = Path.Combine(dotnetOutputPath, Path.GetFileName(outputFile));
|
||||
if (!File.Exists(deployedFilePath) || File.GetLastWriteTime(outputFile) > File.GetLastWriteTime(deployedFilePath))
|
||||
{
|
||||
// Copy to the destination folder
|
||||
Utilities.FileCopy(outputFile, deployedFilePath);
|
||||
if (/*useDebug &&*/ File.Exists(outputFile + ".pdb"))
|
||||
Utilities.FileCopy(outputFile + ".pdb", Path.Combine(dotnetOutputPath, Path.GetFileName(outputFile + ".pdb")));
|
||||
validCache = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Run final linking with single-threaded as this is very memory intensive process
|
||||
if (Configuration.MaxConcurrency > 1 && Configuration.ConcurrencyProcessorScale > 0.0f && !dotnetAotDebug)
|
||||
{
|
||||
// Multi-threaded
|
||||
var outputFiles = outputStaticLibraryFiles.OrderBy(x => x.Contains("System.Private.CoreLib") || x.Contains("System.Linq") || x.Contains("System.Private.Xml") ? 0 : 1).ToArray(); // Process the file which takes longest time first
|
||||
System.Threading.Tasks.Parallel.ForEach(outputFiles/*, new System.Threading.Tasks.ParallelOptions() { MaxDegreeOfParallelism = Math.Min(8, Configuration.MaxConcurrency) }*/, linkAssembly);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var outputFile in outputStaticLibraryFiles)
|
||||
{
|
||||
linkAssembly(outputFile);
|
||||
if (failed)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (failed)
|
||||
throw new Exception($"Failed to run AOT. See log ({Configuration.LogFile}).");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -321,12 +321,12 @@ namespace Flax.Build.Platforms
|
||||
var initialMemory = Configuration.WebInitialMemory;
|
||||
//if (options.CompileEnv.Sanitizers.HasFlag(Sanitizer.Address))
|
||||
// initialMemory = Math.Max(initialMemory, 64); // Address Sanitizer needs more memory
|
||||
/*args.Add($"-sINITIAL_MEMORY={initialMemory}MB");
|
||||
args.Add($"-sINITIAL_MEMORY={initialMemory}MB");
|
||||
args.Add("-sSTACK_SIZE=4MB");
|
||||
args.Add("-sALLOW_MEMORY_GROWTH=1");
|
||||
|
||||
// Setup file access (Game Cooker packs files with file_packager tool)
|
||||
args.Add("-sFORCE_FILESYSTEM");*/
|
||||
args.Add("-sFORCE_FILESYSTEM");
|
||||
//args.Add("-sLZ4");
|
||||
|
||||
// https://emscripten.org/docs/compiling/Dynamic-Linking.html#dynamic-linking
|
||||
@@ -342,6 +342,12 @@ namespace Flax.Build.Platforms
|
||||
}
|
||||
}
|
||||
|
||||
args.Add("-O0");
|
||||
|
||||
args.Add("--verbose");
|
||||
|
||||
//args.Add("--trace");
|
||||
|
||||
args.Add("-Wl,--allow-multiple-definition"); // Multiple pthread-related definitions in dotnet runtime
|
||||
|
||||
args.Add("-Wl,--start-group");
|
||||
@@ -380,6 +386,12 @@ namespace Flax.Build.Platforms
|
||||
args.Add(string.Format("\"-l{0}\"", GetLibName(library)));
|
||||
libraryPaths.Add(dir); // FIXME
|
||||
}*/
|
||||
|
||||
/*if (library.Contains("net10.0"))
|
||||
{
|
||||
if (!library.Contains("System.Private.CoreLib"))
|
||||
continue;
|
||||
}*/
|
||||
args.Add(library.Replace(Path.DirectorySeparatorChar, '/') + Platform.StaticLibraryFileExtension);
|
||||
}
|
||||
|
||||
@@ -415,7 +427,9 @@ namespace Flax.Build.Platforms
|
||||
//task.CommandPath = _compilerPath;
|
||||
//task.CommandArguments = string.Join(" ", args);
|
||||
|
||||
int result = Utilities.Run(NativeCompilerPath, $"{string.Join(" ", args)}", null, Path.GetDirectoryName(options.OutputFiles[0]), Utilities.RunOptions.AppMustExist | Utilities.RunOptions.ConsoleLogOutput);
|
||||
//int result = Utilities.Run(NativeCompilerPath, $"{string.Join(" ", args)}", null, Path.GetDirectoryName(options.OutputFiles[0]), Utilities.RunOptions.AppMustExist | Utilities.RunOptions.ConsoleLogOutput);
|
||||
int result = Utilities.Run(NativeCompilerPath, $"{string.Join(" ", args)}", null, options.PlatformToolsPath, Utilities.RunOptions.AppMustExist | Utilities.RunOptions.ConsoleLogOutput);
|
||||
|
||||
if (result != 0)
|
||||
return true;
|
||||
|
||||
@@ -441,9 +455,9 @@ namespace Flax.Build.Platforms
|
||||
|
||||
string outputFile;
|
||||
{
|
||||
if (Configuration.AOTMode == DotNetAOTModes.MonoAOTDynamic)
|
||||
/*if (Configuration.AOTMode == DotNetAOTModes.MonoAOTDynamic)
|
||||
outputFile = inputFile + Platform.SharedLibraryFileExtension;
|
||||
else
|
||||
else*/
|
||||
outputFile = Path.Combine(Path.GetDirectoryName(inputFile), Platform.StaticLibraryFilePrefix + Path.GetFileName(inputFile) + Platform.StaticLibraryFileExtension);
|
||||
}
|
||||
|
||||
@@ -452,15 +466,17 @@ namespace Flax.Build.Platforms
|
||||
bool useLLVM = true;
|
||||
//if (useLLVM)
|
||||
debugSymbols = false;
|
||||
var llvmPath = "\"C:\\Program Files\\LLVM\\bin\"";//Path.Combine(EmscriptenSdk.Instance.EmscriptenPath, "bin");
|
||||
//var llvmPath = "\"C:\\Program Files\\LLVM\\bin\"";//Path.Combine(EmscriptenSdk.Instance.EmscriptenPath, "bin");
|
||||
var llvmPath = "\"" + Path.Combine(EmscriptenSdk.Instance.EmscriptenPath, "bin") + "\"";
|
||||
|
||||
var monoAotMode = "full";
|
||||
if (useLLVM)
|
||||
monoAotMode = "llvmonly";
|
||||
monoAotMode = "no-opt,llvmonly";//"llvmonly";
|
||||
//if ("mscorlib.dll" == "")
|
||||
// monoAotMode = "interp";
|
||||
|
||||
var monoDebugMode = debugSymbols ? "soft-debug" : "nodebug";
|
||||
//var aotCompilerArgs = $"{(useLLVM ? "--llvm" : "")} --aot={monoAotMode},asmonly,verbose,stats,print-skipped,{monoDebugMode}{(useLLVM ? $",llvm-path={llvmPath},llvm-outfile=" + Path.GetFileName(outputFile) : "")} -O=float32";
|
||||
var aotCompilerArgs = $"{(useLLVM ? "--llvm" : "")} --aot={monoAotMode},asmonly,verbose,stats,print-skipped,{monoDebugMode}{(useLLVM ? $",llvm-path={llvmPath},llvm-outfile=" + Path.GetFileName(outputFile) : "")} -O=float32";
|
||||
|
||||
//aotCompilerArgs += " --verbose";
|
||||
@@ -479,13 +495,28 @@ namespace Flax.Build.Platforms
|
||||
}
|
||||
|
||||
//envVars["MONO_DEBUG"] = "gen-seq-points";
|
||||
|
||||
|
||||
|
||||
// Run cross-compiler compiler (outputs assembly code)
|
||||
//int result = 0;
|
||||
int result = Utilities.Run(aotCompilerPath, $"{aotCompilerArgs} \"{inputFile}\"", null, inputFileFolder, Utilities.RunOptions.AppMustExist | Utilities.RunOptions.ConsoleLogOutput, envVars);
|
||||
if (result != 0)
|
||||
return true;
|
||||
|
||||
/*CSharpOptions soOptions = new CSharpOptions()
|
||||
{
|
||||
Action = CSharpOptions.ActionTypes.MonoLink,
|
||||
InputFiles = [Path.Combine(Path.GetDirectoryName(inputFile), Platform.StaticLibraryFilePrefix + Path.GetFileName(inputFile))],
|
||||
OutputFiles = [ inputFile + Platform.SharedLibraryFileExtension ],
|
||||
AssembliesPath = options.AssembliesPath,
|
||||
PlatformToolsPath = inputFileFolder,
|
||||
};
|
||||
return CompileCSharp(ref soOptions);*/
|
||||
|
||||
/*result = Utilities.Run(aotCompilerPath, $"{aotCompilerArgs} \"{inputFile}\"", null, inputFileFolder, Utilities.RunOptions.AppMustExist | Utilities.RunOptions.ConsoleLogOutput, envVars);
|
||||
if (result != 0)
|
||||
return true;*/
|
||||
|
||||
// Get build args for iOS
|
||||
/*var clangArgs = new List<string>();
|
||||
AddArgsCommon(null, clangArgs);
|
||||
|
||||
Reference in New Issue
Block a user