/// <summary> /// Compiles a D project. /// </summary> public BuildResult Build (DProject Project, ConfigurationSelector BuildConfigurationSelector) { this.Project = Project; BuildConfig = Project.GetConfiguration (BuildConfigurationSelector) as DProjectConfiguration; if(Ide.IdeApp.Workbench == null) _currentConfig = BuildConfig.Selector; if (BuildConfig.Project != Project) throw new InvalidOperationException ("Wrong project configuration"); commonMacros = new PrjPathMacroProvider { slnPath = Project.ParentSolution != null ? EnsureCorrectPathSeparators(Project.ParentSolution.BaseDirectory) : "" }; BuiltObjects.Clear (); if (Compiler == null) { var targetBuildResult = new BuildResult (); targetBuildResult.AddError ("Project compiler \"" + Project.UsedCompilerVendor + "\" not found"); targetBuildResult.FailedBuildCount++; _currentConfig = null; return targetBuildResult; } var absDir = AbsoluteObjectDirectory (BuildConfig); if (!Directory.Exists (absDir)) Directory.CreateDirectory (absDir); BuildResult result; if (CanDoOneStepBuild) result = DoOneStepBuild (); else result = DoStepByStepBuild (); _currentConfig = null; return result; }
public static string BuildOneStepBuildString(DProject prj, IEnumerable<string> builtObjects, ConfigurationSelector sel) { var cfg = prj.GetConfiguration (sel) as DProjectConfiguration; var target = prj.GetOutputFileName (sel); var rawArgumentString = new StringBuilder(); var s = GenAdditionalAttributes (prj.Compiler, cfg); if(!string.IsNullOrWhiteSpace(s) ) rawArgumentString.Append(s.Trim()).Append(' '); rawArgumentString.Append(BuildArguments(cfg).OneStepBuildArguments.Trim()); if(!string.IsNullOrEmpty(cfg.ExtraCompilerArguments)) rawArgumentString.Append(' ').Append(cfg.ExtraCompilerArguments.Trim()); if (!string.IsNullOrEmpty(cfg.ExtraLinkerArguments)) rawArgumentString.Append(' ').Append(PrefixedExtraLinkerFlags(cfg)); var commonMacros = new PrjPathMacroProvider { slnPath = prj.ParentSolution != null ? EnsureCorrectPathSeparators(prj.ParentSolution.BaseDirectory) : "" }; var res = FillInMacros(rawArgumentString.ToString(), new OneStepBuildArgumentMacroProvider { ObjectsStringPattern = prj.Compiler.ArgumentPatterns.ObjectFileLinkPattern, IncludesStringPattern = prj.Compiler.ArgumentPatterns.IncludePathPattern, SourceFiles = builtObjects, Includes = FillInMacros(prj.IncludePaths,commonMacros), Libraries = GetLibraries(cfg, prj.Compiler), RelativeTargetDirectory = cfg.OutputDirectory.ToRelative(prj.BaseDirectory), ObjectsDirectory = ObjectDirectory(cfg), TargetFile = target, }, commonMacros); return res; }
public static string TraceLogFile(DProject project) { if(project == null) return null; var config = project.GetConfiguration(Ide.IdeApp.Workspace.ActiveConfiguration) as DProjectConfiguration; if (config == null || config.CompileTarget != DCompileTarget.Executable || !project.Compiler.HasProfilerSupport) { return null; } string file = Path.Combine(config.OutputDirectory, "trace.log"); if (!File.Exists (file)) return null; return file; }
/// <summary> /// Compiles a D project. /// </summary> public BuildResult Build(DProject Project, ConfigurationSelector BuildConfigurationSelector) { this.Project = Project; BuildConfig = Project.GetConfiguration (BuildConfigurationSelector) as DProjectConfiguration; commonMacros = new PrjPathMacroProvider { slnPath = Project.ParentSolution != null ? EnsureCorrectPathSeparators(Project.ParentSolution.BaseDirectory) : "" }; BuiltObjects.Clear (); if (Compiler == null) { var targetBuildResult = new BuildResult (); targetBuildResult.AddError ("Project compiler \"" + Project.UsedCompilerVendor + "\" not found"); targetBuildResult.FailedBuildCount++; return targetBuildResult; } if (!Directory.Exists (AbsoluteObjectDirectory)) Directory.CreateDirectory (AbsoluteObjectDirectory); if (CanDoOneStepBuild) return DoOneStepBuild (); else return DoStepByStepBuild (); }