private bool BuildSourceBuilder(SourceBuilder Builder) { if (Builder.Rules.DependencyModulesName != null) { foreach (string dep in Builder.Rules.DependencyModulesName) { if (!sourceBuilders.ContainsKey(dep)) { ConsoleHelper.WriteLineWarning("Dependency [" + dep + "] doesn't exists"); continue; } SourceBuilder builder = sourceBuilders[dep]; if (builder == null) { return(false); } if (!BuildSourceBuilder(builder)) { return(false); } } } return(Builder.Build()); }
private void GenerateAndBuildProjectFile() { LogInfo(); VCProjectFileGenerator vcproj = new VCProjectFileGenerator(); vcproj.AssemblyName = rules.TargetName; vcproj.OutputType = LibraryUseTypesToOutputType(rules.LibraryUseType); vcproj.OutputPath = BinariesPath; vcproj.Optimization = VCProjectFileGenerator.Optimizations.Disabled; vcproj.MinimalRebuild = true; vcproj.PlatformType = BuildSystem.PlatformType; vcproj.BuildConfiguration = BuildSystem.BuildConfiguration; if (vcproj.BuildConfiguration == VCProjectFileGenerator.BuildConfigurations.Debug) { vcproj.GenerateDebugInformation = true; //if (rules.LibraryUseType == BuildRules.LibraryUseTypes.Executable) // vcproj.RuntimeLibrary = VCProjectFileGenerator.RuntimeLibraries.MultiThreadedDebug; //else vcproj.RuntimeLibrary = VCProjectFileGenerator.RuntimeLibraries.MultiThreadedDebugDLL; } else { vcproj.GenerateDebugInformation = false; } { //if (rules.LibraryUseType == BuildRules.LibraryUseTypes.Executable) // vcproj.RuntimeLibrary = VCProjectFileGenerator.RuntimeLibraries.MultiThreaded; //else vcproj.RuntimeLibrary = VCProjectFileGenerator.RuntimeLibraries.MultiThreadedDLL; } vcproj.PlatformType = VCProjectFileGenerator.PlatformTypes.Win32; vcproj.IncludeDirectories += sourcePathRoot; vcproj.IncludeDirectories += generatedFilesPath; if (rules.DependencyModulesName != null) { foreach (string dep in rules.DependencyModulesName) { if (!BuildSystem.SourceBuilders.ContainsKey(dep)) { continue; } SourceBuilder builder = BuildSystem.SourceBuilders[dep]; vcproj.IncludeDirectories += builder.sourcePathRoot; if (builder.rules.LibraryUseType == BuildRules.LibraryUseTypes.UseOnly) { string[] libFiles = builder.rules.OutputsFilePath; if (libFiles != null) { foreach (string libFile in libFiles) { vcproj.IncludeLibraries += builder.sourcePathRoot + libFile; } } } else { vcproj.PreprocessorDefinitions += GetAPIPreprocessor(builder.rules, true); string[] libFiles = FileSystemUtilites.GetAllFiles(builder.BinariesPath, "*" + LibExtension); if (libFiles != null) { foreach (string libFile in libFiles) { vcproj.IncludeLibraries += libFile; } } } } } vcproj.PreprocessorDefinitions += GetAPIPreprocessor(rules, false); if (rules.PreprocessorDefinitions != null) { foreach (string def in rules.PreprocessorDefinitions) { vcproj.PreprocessorDefinitions += def; } } if (rules.DependencyStaticLibraries != null) { foreach (string lib in rules.DependencyStaticLibraries) { vcproj.IncludeLibraries += lib; } } bool isThisCommonModule = (rules.TargetName == "Common"); string[] files = FileSystemUtilites.GetAllFiles(sourcePathRoot, "*.h*"); foreach (string file in files) { if (BuildSystem.GenerateReflection && !isThisCommonModule) { string outputBaseFileName = generatedFilesPath + Path.GetFileNameWithoutExtension(file) + ".Reflection"; if (ParseForReflection(file, outputBaseFileName)) { vcproj.AddIncludeFile(outputBaseFileName + ".h"); vcproj.AddCompileFile(outputBaseFileName + ".cpp"); } } vcproj.AddIncludeFile(file); } if (rules.IncludeModulesName != null) { foreach (string moduleName in rules.IncludeModulesName) { SourceBuilder builder = BuildSystem.SourceBuilders[moduleName]; vcproj.IncludeDirectories += builder.sourcePathRoot; vcproj.PreprocessorDefinitions += GetEmptyAPIPreprocessor(builder.rules); } } if (rules.AdditionalCompileFile != null) { foreach (string file in rules.AdditionalCompileFile) { string fileInfo = FileSystemUtilites.PathSeperatorCorrection(file); int index = fileInfo.IndexOf(EnvironmentHelper.PathSeparator); vcproj.AddCompileFile(BuildSystem.SourceBuilders[fileInfo.Remove(index)].sourcePathRoot + fileInfo.Substring(index + 1)); } } files = FileSystemUtilites.GetAllFiles(sourcePathRoot, "*.c", "*.cpp", "*.cxx"); foreach (string file in files) { vcproj.AddCompileFile(file); } string vcprojPath = intermediateModulePath + rules.TargetName + ".vcxproj"; vcproj.Generate(vcprojPath); BuildProjectFile(vcprojPath); }