Example #1
0
		/// <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;
		}
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
0
        /// <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 ();
        }