private static void CreateBuilderAndGenerate(BuildContext.BaseBuildContext buildContext, Argument parameters, bool generateDebugSolution) { using (Builder builder = CreateBuilder(buildContext, parameters, allowCleanBlobs: true, generateDebugSolution: generateDebugSolution)) { if (parameters.CleanBlobsOnly) { LogWriteLine("success:"); LogWriteLine(" blobs {0,4} cleaned, {1,3} already cleaned", Project.BlobCleaned, Project.BlobAlreadyCleaned); } else if (parameters.BlobOnly) { LogWriteLine("success:"); LogWriteLine(" blobs {0,4} generated, {1,3} up-to-date", Project.BlobGenerated, Project.BlobUpdateToDate); } else { IDictionary <Type, GenerationOutput> outputs; using (Builder.Instance.CreateProfilingScope("Generate")) outputs = builder.Generate(); foreach (var output in outputs) { if (output.Value.Exception != null) { throw new Error(output.Value.Exception, "Error encountered while generating {0}", output.Key); } } if (!string.IsNullOrEmpty(parameters.ProfileFile)) { builder.DumpTraceFile(parameters.ProfileFile); } if (parameters.DumpDependency) { DependencyTracker.Instance.DumpGraphs(outputs); } LogWriteGenerateResults(outputs); } } LogWriteLine(" time: {0:0.00} sec.", (DateTime.Now - s_startTime).TotalSeconds); LogWriteLine(" completed on {0}.", DateTime.Now); }
public static Builder CreateBuilder(BuildContext.BaseBuildContext context, Argument parameters, bool allowCleanBlobs, bool generateDebugSolution = false) { Builder builder = new Builder( context, parameters.Multithreaded, parameters.DumpDependency, allowCleanBlobs && parameters.CleanBlobsOnly, parameters.BlobOnly, parameters.SkipInvalidPath, parameters.Diagnostics, Program.GetGeneratorsManager, parameters.Defines ); // Allow message log from builder. builder.EventOutputError += ErrorWrite; builder.EventOutputWarning += WarningWrite; builder.EventOutputMessage += LogWrite; builder.EventOutputDebug += DebugWrite; if (parameters.ProfileOutput) { builder.EventOutputProfile += LogWrite; } try { // Generate debug solution if (generateDebugSolution) { DebugProjectGenerator.GenerateDebugSolution(parameters.Sources, builder.Arguments, parameters.DebugSolutionStartArguments); builder.BuildProjectAndSolution(); return(builder); } // Load user input (either files or pre-built assemblies) switch (parameters.Input) { case Argument.InputType.File: builder.ExecuteEntryPointInAssemblies <Main>(builder.LoadSharpmakeFiles(parameters.Sources)); break; case Argument.InputType.Assembly: builder.ExecuteEntryPointInAssemblies <Main>(builder.LoadAssemblies(parameters.Assemblies)); break; default: throw new Error("Sharpmake input missing, use /sources() or /assemblies()"); } if (builder.Arguments.TypesToGenerate.Count == 0) { throw new Error("Sharpmake has nothing to generate!" + Environment.NewLine + $" Make sure to have a static entry point method flagged with [{typeof(Main).FullName}] attribute, and add 'arguments.Generate<[your_class]>();' in it."); } builder.Context.ConfigureOrder = builder.Arguments.ConfigureOrder; // Call all configuration's methods and resolve project/solution member's values builder.BuildProjectAndSolution(); return(builder); } catch { builder.Dispose(); throw; } }
public static Builder CreateBuilder(BuildContext.BaseBuildContext context, Argument parameters, bool allowCleanBlobs, bool generateDebugSolution = false) { Builder builder = new Builder( context, parameters.Multithreaded, parameters.DumpDependency, allowCleanBlobs && parameters.CleanBlobsOnly, parameters.BlobOnly, parameters.SkipInvalidPath, parameters.Diagnostics, debugScripts: true, // warning: some code that rely on callstacks misbehaves in release, because methods can completely disappear due to optimizations, so force disable for now getGeneratorsManagerCallBack: GetGeneratorsManager, defines: parameters.Defines ); // Allow message log from builder. builder.EventOutputError += ErrorWrite; builder.EventOutputWarning += WarningWrite; builder.EventOutputMessage += LogWrite; builder.EventOutputDebug += DebugWrite; if (!string.IsNullOrEmpty(parameters.ProfileFile)) { builder.EnableProfiling(); } try { // Generate debug solution using (Builder.Instance.CreateProfilingScope("Debug solution")) { if (generateDebugSolution) { LogWriteLine("Generate debug solution..."); DebugProjectGenerator.GenerateDebugSolution(parameters.Sources, builder.Arguments, parameters.DebugSolutionStartArguments, parameters.Defines.ToArray()); builder.BuildProjectAndSolution(); return(builder); } } // Load user input (either files or pre-built assemblies) using (Builder.Instance.CreateProfilingScope("EntryPoints")) { switch (parameters.Input) { case Argument.InputType.File: builder.ExecuteEntryPointInAssemblies <Main>(builder.LoadSharpmakeFiles(parameters.Sources)); break; case Argument.InputType.Assembly: builder.ExecuteEntryPointInAssemblies <Main>(builder.LoadAssemblies(parameters.Assemblies)); break; case Argument.InputType.Undefined: default: throw new Error("Sharpmake input missing, use /sources() or /assemblies()"); } } if (builder.Arguments.TypesToGenerate.Count == 0) { throw new Error("Sharpmake has nothing to generate!" + Environment.NewLine + $" Make sure to have a static entry point method flagged with [{typeof(Main).FullName}] attribute, and add 'arguments.Generate<[your_class]>();' in it."); } builder.Context.ConfigureOrder = builder.Arguments.ConfigureOrder; // Call all configuration's methods and resolve project/solution member's values using (Builder.Instance.CreateProfilingScope("Build")) builder.BuildProjectAndSolution(); return(builder); } catch { builder.Dispose(); throw; } }
public static Builder CreateBuilder(BuildContext.BaseBuildContext context, Argument parameters, bool allowCleanBlobs, bool generateDebugSolution = false) { Builder builder = new Builder( context, parameters.Multithreaded, parameters.DumpDependency, allowCleanBlobs && parameters.CleanBlobsOnly, parameters.BlobOnly, parameters.SkipInvalidPath, parameters.Diagnostics, Program.GetGeneratorsManager); // Allow message log from builder. builder.EventOutputError += ErrorWrite; builder.EventOutputWarning += WarningWrite; builder.EventOutputMessage += LogWrite; builder.EventOutputDebug += DebugWrite; if (parameters.ProfileOutput) { builder.EventOutputProfile += LogWrite; } // generate debug solution if (generateDebugSolution) { DebugProjectGenerator.GenerateDebugSolution(parameters.Sources, builder.Arguments); builder.BuildProjectAndSolution(); return(builder); } switch (parameters.Input) { case Argument.InputType.File: { try { builder.LoadSharpmakeFiles(parameters.Sources); } catch (Exception) { builder.Dispose(); throw; } } break; case Argument.InputType.Assembly: { try { builder.LoadAssemblies(parameters.Assemblies); } catch (Exception) { builder.Dispose(); throw; } } break; default: builder.Dispose(); throw new Error("sharpmake input missing, use /sources() or /assemblies()"); } return(builder); }