in Sharpmake.Generators/FastBuild/MasterBff.cs [711:805]
private static void WriteMasterCompilerSection(FileGenerator masterBffGenerator, MasterBffInfo masterBffInfo)
{
var sortedMasterCompileSettings = masterBffInfo.CompilerSettings.OrderBy(x => x.Value.CompilerName);
foreach (var compiler in sortedMasterCompileSettings)
{
var compilerSettings = compiler.Value;
var compilerPlatform = compilerSettings.PlatformFlags;
string fastBuildCompilerFamily = UtilityMethods.GetFBuildCompilerFamily(compilerSettings.FastBuildCompilerFamily);
string fastBuildCompilerUseRelativePaths = FileGeneratorUtilities.RemoveLineTag;
if (FastBuildSettings.CompilersUsingRelativePaths.Contains(compiler.Key))
{
fastBuildCompilerUseRelativePaths = "true";
}
string fastBuildCompilerAdditionalSettings = FileGeneratorUtilities.RemoveLineTag;
if (FastBuildSettings.AdditionalCompilerSettings.TryGetValue(compiler.Key, out List<string> extraOptions) &&
extraOptions.Any())
{
fastBuildCompilerAdditionalSettings = string.Join(Environment.NewLine, extraOptions.Select(option => " " + option));
}
// Check if we got a dependent custom property group referenced by the compiler section
if (FastBuildSettings.AdditionalCompilerPropertyGroups.TryGetValue(compiler.Key, out string extraCompilerPropertyGroupName))
{
if (FastBuildSettings.AdditionalPropertyGroups.TryGetValue(extraCompilerPropertyGroupName, out List<string> extraPropertySection) &&
extraPropertySection.Any())
{
// Only write each section once.
if (masterBffInfo.WrittenAdditionalPropertyGroups.Add(extraCompilerPropertyGroupName))
{
string section = UtilityMethods.FBuildFormatList(extraPropertySection, 0, UtilityMethods.FBuildFormatListOptions.None);
masterBffGenerator.Write(Environment.NewLine);
masterBffGenerator.Write(extraCompilerPropertyGroupName);
masterBffGenerator.Write(Environment.NewLine);
masterBffGenerator.Write(section);
masterBffGenerator.Write(Environment.NewLine);
}
}
else
{
Builder.Instance.LogErrorLine("Additional property group '{0}' is not registered or empty", extraCompilerPropertyGroupName);
}
}
using (masterBffGenerator.Declare("fastbuildCompilerName", compiler.Key))
using (masterBffGenerator.Declare("fastBuildCompilerRootPath", compilerSettings.RootPath))
using (masterBffGenerator.Declare("fastBuildCompilerExecutable", string.IsNullOrEmpty(compilerSettings.Executable) ? FileGeneratorUtilities.RemoveLineTag : compilerSettings.Executable))
using (masterBffGenerator.Declare("fastBuildExtraFiles", compilerSettings.ExtraFiles.Count > 0 ? UtilityMethods.FBuildCollectionFormat(compilerSettings.ExtraFiles, 28) : FileGeneratorUtilities.RemoveLineTag))
using (masterBffGenerator.Declare("fastBuildCompilerFamily", string.IsNullOrEmpty(fastBuildCompilerFamily) ? FileGeneratorUtilities.RemoveLineTag : fastBuildCompilerFamily))
using (masterBffGenerator.Declare("fastBuildCompilerUseRelativePaths", fastBuildCompilerUseRelativePaths))
using (masterBffGenerator.Declare("fastBuildCompilerAdditionalSettings", fastBuildCompilerAdditionalSettings))
{
masterBffGenerator.Write(Bff.Template.ConfigurationFile.CompilerSetting);
foreach (var compilerConfiguration in compilerSettings.Configurations.OrderBy(x => x.Key))
{
var compConf = compilerConfiguration.Value;
string fastBuildLinkerType = UtilityMethods.GetFBuildLinkerType(compConf.FastBuildLinkerType);
using (masterBffGenerator.Declare("fastBuildConfigurationName", compilerConfiguration.Key))
using (masterBffGenerator.Declare("fastBuildBinPath", compConf.BinPath))
using (masterBffGenerator.Declare("fastBuildLinkerPath", compConf.LinkerPath))
using (masterBffGenerator.Declare("fastBuildResourceCompiler", compConf.ResourceCompiler))
using (masterBffGenerator.Declare("fastBuildResourceCompilerName", compConf.ResourceCompiler != FileGeneratorUtilities.RemoveLineTag ? "RC" + compilerConfiguration.Key : FileGeneratorUtilities.RemoveLineTag))
using (masterBffGenerator.Declare("fastBuildMasmCompiler", compConf.Masm))
using (masterBffGenerator.Declare("fastBuildMasmCompilerName", "ML" + compilerConfiguration.Key))
// TODOANT make sure we have nasm compiler found and used.
using (masterBffGenerator.Declare("fastBuildNasmCompiler", compConf.Nasm))
using (masterBffGenerator.Declare("fastBuildNasmCompilerName", "Nasm" + compilerConfiguration.Key))
using (masterBffGenerator.Declare("fastBuildCompilerName", compConf.Compiler != FileGeneratorUtilities.RemoveLineTag ? compConf.Compiler : compiler.Key))
using (masterBffGenerator.Declare("fastBuildLibrarian", compConf.Librarian))
using (masterBffGenerator.Declare("fastBuildLinker", compConf.Linker))
using (masterBffGenerator.Declare("fastBuildLinkerType", string.IsNullOrEmpty(fastBuildLinkerType) ? FileGeneratorUtilities.RemoveLineTag : fastBuildLinkerType))
using (masterBffGenerator.Declare("fastBuildPlatformLibPaths", string.IsNullOrWhiteSpace(compConf.PlatformLibPaths) ? FileGeneratorUtilities.RemoveLineTag : compConf.PlatformLibPaths))
using (masterBffGenerator.Declare("fastBuildExecutable", compConf.Executable))
using (masterBffGenerator.Declare("fastBuildUsing", compConf.UsingOtherConfiguration))
{
if (compConf.ResourceCompiler != FileGeneratorUtilities.RemoveLineTag)
masterBffGenerator.Write(Bff.Template.ConfigurationFile.ResourceCompilerSettings);
if (!string.IsNullOrEmpty(compConf.Masm))
masterBffGenerator.Write(Bff.Template.ConfigurationFile.MasmCompilerSettings);
// TODOANT
if (!string.IsNullOrEmpty(compConf.Nasm))
masterBffGenerator.Write(Bff.Template.ConfigurationFile.NasmCompilerSettings);
masterBffGenerator.Write(Bff.Template.ConfigurationFile.CompilerConfiguration);
}
}
}
}
}