[mtouch] Give BuildTasks enough information to determine if the task is up-to-date or not.
This commit is contained in:
Родитель
1f7ce2e445
Коммит
a52f18ec3b
|
@ -40,6 +40,9 @@ namespace Xamarin.Bundler
|
||||||
public IEnumerable<BuildTask> NextTasks;
|
public IEnumerable<BuildTask> NextTasks;
|
||||||
|
|
||||||
protected abstract void Execute ();
|
protected abstract void Execute ();
|
||||||
|
|
||||||
|
// A list of input files (not a list of all the dependencies that would make this task rebuild).
|
||||||
|
public abstract IEnumerable<string> Inputs { get; }
|
||||||
|
|
||||||
public IEnumerable<BuildTask> Run ()
|
public IEnumerable<BuildTask> Run ()
|
||||||
{
|
{
|
||||||
|
@ -47,9 +50,21 @@ namespace Xamarin.Bundler
|
||||||
return NextTasks;
|
return NextTasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool IsUptodate ()
|
public virtual bool IsUptodate {
|
||||||
{
|
get {
|
||||||
return false;
|
return Application.IsUptodate (FileDependencies, Outputs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A list of all the files that causes the task to rebuild.
|
||||||
|
// This should at least include all the 'Inputs', and potentially other files as well.
|
||||||
|
public virtual IEnumerable<string> FileDependencies {
|
||||||
|
get {
|
||||||
|
return Inputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A list of files that this task outputs.
|
||||||
|
public abstract IEnumerable<string> Outputs { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,5 +299,12 @@ namespace Xamarin.Utils
|
||||||
WriteArguments (args);
|
WriteArguments (args);
|
||||||
return args.ToString ();
|
return args.ToString ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void PopulateInputs ()
|
||||||
|
{
|
||||||
|
var args = new StringBuilder ();
|
||||||
|
Inputs = new List<string> ();
|
||||||
|
WriteArguments (args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,8 +282,10 @@ namespace Xamarin.Bundler {
|
||||||
|
|
||||||
return new BuildTask [] { new AOTTask ()
|
return new BuildTask [] { new AOTTask ()
|
||||||
{
|
{
|
||||||
|
Assembly = this,
|
||||||
AssemblyName = s,
|
AssemblyName = s,
|
||||||
AddBitcodeMarkerSection = App.FastDev && App.EnableMarkerOnlyBitCode,
|
AddBitcodeMarkerSection = App.FastDev && App.EnableMarkerOnlyBitCode,
|
||||||
|
AotOutputs = outputs,
|
||||||
AssemblyPath = asm,
|
AssemblyPath = asm,
|
||||||
ProcessStartInfo = Driver.CreateStartInfo (App, aotCompiler, aotArgs, Path.GetDirectoryName (s)),
|
ProcessStartInfo = Driver.CreateStartInfo (App, aotCompiler, aotArgs, Path.GetDirectoryName (s)),
|
||||||
NextTasks = nextTasks
|
NextTasks = nextTasks
|
||||||
|
|
|
@ -88,13 +88,19 @@ namespace Xamarin.Bundler
|
||||||
public string MainM;
|
public string MainM;
|
||||||
public IList<string> RegistrationMethods;
|
public IList<string> RegistrationMethods;
|
||||||
|
|
||||||
public IEnumerable<string> Inputs {
|
public override IEnumerable<string> Inputs {
|
||||||
get {
|
get {
|
||||||
foreach (var asm in Target.Assemblies)
|
foreach (var asm in Target.Assemblies)
|
||||||
yield return asm.FullPath;
|
yield return asm.FullPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
yield return MainM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Execute ()
|
protected override void Execute ()
|
||||||
{
|
{
|
||||||
Driver.GenerateMain (Target.App, Target.Assemblies, Target.App.AssemblyName, Abi, MainM, RegistrationMethods);
|
Driver.GenerateMain (Target.App, Target.Assemblies, Target.App.AssemblyName, Abi, MainM, RegistrationMethods);
|
||||||
|
@ -123,6 +129,20 @@ namespace Xamarin.Bundler
|
||||||
public string RegistrarM;
|
public string RegistrarM;
|
||||||
public string RegistrarH;
|
public string RegistrarH;
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
foreach (var asm in Target.Assemblies)
|
||||||
|
yield return asm.FullPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
yield return RegistrarH;
|
||||||
|
yield return RegistrarM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Execute ()
|
protected override void Execute ()
|
||||||
{
|
{
|
||||||
Target.StaticRegistrar.Generate (Target.Assemblies.Select ((a) => a.AssemblyDefinition), RegistrarH, RegistrarM);
|
Target.StaticRegistrar.Generate (Target.Assemblies.Select ((a) => a.AssemblyDefinition), RegistrarH, RegistrarM);
|
||||||
|
@ -131,6 +151,16 @@ namespace Xamarin.Bundler
|
||||||
|
|
||||||
class CompileRegistrarTask : CompileTask
|
class CompileRegistrarTask : CompileTask
|
||||||
{
|
{
|
||||||
|
public string RegistrarM;
|
||||||
|
public string RegistrarH;
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
yield return RegistrarH;
|
||||||
|
yield return RegistrarM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void CompilationFailed (int exitCode)
|
protected override void CompilationFailed (int exitCode)
|
||||||
{
|
{
|
||||||
throw ErrorHelper.CreateError (4109, "Failed to compile the generated registrar code. Please file a bug report at http://bugzilla.xamarin.com");
|
throw ErrorHelper.CreateError (4109, "Failed to compile the generated registrar code. Please file a bug report at http://bugzilla.xamarin.com");
|
||||||
|
@ -139,9 +169,44 @@ namespace Xamarin.Bundler
|
||||||
|
|
||||||
public class AOTTask : ProcessTask
|
public class AOTTask : ProcessTask
|
||||||
{
|
{
|
||||||
|
public Assembly Assembly;
|
||||||
public string AssemblyName;
|
public string AssemblyName;
|
||||||
public bool AddBitcodeMarkerSection;
|
public bool AddBitcodeMarkerSection;
|
||||||
public string AssemblyPath; // path to the .s file.
|
public string AssemblyPath; // path to the .s file.
|
||||||
|
List<string> inputs;
|
||||||
|
public IEnumerable<string> AotOutputs;
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
return AotOutputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
yield return Assembly.FullPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> FileDependencies {
|
||||||
|
get {
|
||||||
|
if (inputs == null) {
|
||||||
|
inputs = new List<string> ();
|
||||||
|
if (Assembly.HasDependencyMap)
|
||||||
|
inputs.AddRange (Assembly.DependencyMap);
|
||||||
|
inputs.Add (AssemblyName);
|
||||||
|
inputs.Add (Driver.GetAotCompiler (Assembly.App, Assembly.Target.Is64Build));
|
||||||
|
}
|
||||||
|
return inputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsUptodate {
|
||||||
|
get {
|
||||||
|
// We can only check dependencies if we know the assemblies this assembly depend on (otherwise always rebuild).
|
||||||
|
return Assembly.HasDependencyMap && base.IsUptodate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// executed with Parallel.ForEach
|
// executed with Parallel.ForEach
|
||||||
protected override void Execute ()
|
protected override void Execute ()
|
||||||
|
@ -181,6 +246,19 @@ namespace Xamarin.Bundler
|
||||||
public string OutputFile;
|
public string OutputFile;
|
||||||
public CompilerFlags CompilerFlags;
|
public CompilerFlags CompilerFlags;
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
CompilerFlags.PopulateInputs ();
|
||||||
|
return CompilerFlags.Inputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
yield return OutputFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Execute ()
|
protected override void Execute ()
|
||||||
{
|
{
|
||||||
// always show the native linker warnings since many of them turn out to be very important
|
// always show the native linker warnings since many of them turn out to be very important
|
||||||
|
@ -245,6 +323,19 @@ namespace Xamarin.Bundler
|
||||||
public string InstallName;
|
public string InstallName;
|
||||||
public string Language;
|
public string Language;
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
CompilerFlags.PopulateInputs ();
|
||||||
|
return CompilerFlags.Inputs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
yield return OutputFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsAssembler {
|
public bool IsAssembler {
|
||||||
get {
|
get {
|
||||||
return Language == "assembler";
|
return Language == "assembler";
|
||||||
|
@ -414,6 +505,18 @@ namespace Xamarin.Bundler
|
||||||
public Abi Abi { get; set; }
|
public Abi Abi { get; set; }
|
||||||
public Version DeploymentTarget { get; set; }
|
public Version DeploymentTarget { get; set; }
|
||||||
|
|
||||||
|
public override IEnumerable<string> Inputs {
|
||||||
|
get {
|
||||||
|
yield return Input;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> Outputs {
|
||||||
|
get {
|
||||||
|
yield return OutputFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Execute ()
|
protected override void Execute ()
|
||||||
{
|
{
|
||||||
new BitcodeConverter (Input, OutputFile, Platform, Abi, DeploymentTarget).Convert ();
|
new BitcodeConverter (Input, OutputFile, Platform, Abi, DeploymentTarget).Convert ();
|
||||||
|
|
|
@ -724,6 +724,8 @@ namespace Xamarin.Bundler
|
||||||
Abi = abi,
|
Abi = abi,
|
||||||
InputFile = registrar_m,
|
InputFile = registrar_m,
|
||||||
OutputFile = ofile,
|
OutputFile = ofile,
|
||||||
|
RegistrarM = registrar_m,
|
||||||
|
RegistrarH = registrar_h,
|
||||||
SharedLibrary = false,
|
SharedLibrary = false,
|
||||||
Language = "objective-c++",
|
Language = "objective-c++",
|
||||||
};
|
};
|
||||||
|
|
Загрузка…
Ссылка в новой задаче