Cosmos/source/Cosmos.Build.Common/BuildProperties.cs
2017-03-19 09:29:46 -05:00

474 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Cosmos.Build.Common
{
public class BuildProperties : PropertiesBase
{
static public List<string> PropNames = new List<string>();
static BuildProperties()
{
var xFields = typeof(BuildPropertyNames).GetRuntimeFields();
foreach (var xField in xFields)
{
// IsLiteral determines if its value is written at compile time and not changeable.
// Consts are static even if we dont use static keyword.
// IsInitOnly determine if the field can be set in the body of the constructor
// for C# a field which is readonly keyword would have both true but a const field would have only IsLiteral equal to true
if (xField.IsLiteral && !xField.IsInitOnly && xField.FieldType == typeof(string))
{
string xName = (string)xField.GetValue(null);
if (xName != BuildPropertyNames.ProfileString)
{
PropNames.Add(xName);
}
}
}
}
/// <summary>
/// Gets array of project names which are project independent.
/// </summary>
public override string[] ProjectIndependentProperties
{
get
{
return new string[] { BuildPropertyNames.BinFormatString };
}
}
/// <summary>
/// Save properties under selected profile.
/// </summary>
/// <param name="aName">Name of the profile for which save properties.</param>
public void SaveProfile(string aName)
{
foreach (var xName in BuildProperties.PropNames)
{
// Skip project independent properties.
if (this.ProjectIndependentProperties.Contains(xName))
{
continue;
}
string xValue = GetProperty(xName);
if (!string.IsNullOrWhiteSpace(xValue))
{
SetProperty(aName + "_" + xName, xValue);
}
}
}
/// <summary>
/// Load properties for the given profile.
/// </summary>
/// <param name="aName">Name of the profile for which load properties.</param>
public void LoadProfile(string aName)
{
foreach (var xName in BuildProperties.PropNames)
{
string xValue;
// Skip project independent properties.
if (this.ProjectIndependentProperties.Contains(xName))
{
xValue = GetProperty(xName);
}
else
{
xValue = GetProperty(aName + "_" + xName);
}
if (!string.IsNullOrWhiteSpace(xValue))
{
SetProperty(xName, xValue);
}
}
// Reforce fixed settings for presets on each load.
if (aName == "ISO")
{
Description = "Creates a bootable ISO image which can be burned to a DVD."
+ " After running the selected project, an explorer window will open containing the ISO file."
+ " The ISO file can then be burned to a CD or DVD and used to boot a physical or virtual system.";
Deployment = DeploymentType.ISO;
Launch = LaunchType.None;
}
else if (aName == "USB")
{
Description = "Makes a USB device such as a flash drive or external hard disk bootable.";
Deployment = DeploymentType.USB;
Launch = LaunchType.None;
}
else if (aName == "VMware")
{
Description = "Use VMware Player or Workstation to deploy and debug.";
Deployment = DeploymentType.ISO;
Launch = LaunchType.VMware;
}
else if (aName == "PXE")
{
Description =
"Creates a PXE setup and hosts a DCHP and TFTP server to deploy directly to physical hardware. Allows debugging with a serial cable.";
Deployment = DeploymentType.PXE;
Launch = LaunchType.None;
}
else if (aName == "Bochs")
{
Description = "Use Bochs emulator to deploy and debug.";
Deployment = DeploymentType.ISO;
Launch = LaunchType.Bochs;
}
else if (aName == "IntelEdison")
{
Description = "Connect to Intel Edison device to deploy and debug.";
Deployment = DeploymentType.BinaryImage;
Launch = LaunchType.IntelEdison;
}
}
public void DeleteProfile(string aPrefix)
{
foreach (var xName in BuildProperties.PropNames)
{
mPropTable.Remove(aPrefix + "_" + xName);
}
}
// Profile
public string Profile
{
get
{
return GetProperty(BuildPropertyNames.ProfileString, "VMware");
}
set
{
SetProperty(BuildPropertyNames.ProfileString, value);
}
}
public string Name
{
get
{
return GetProperty(BuildPropertyNames.NameString, "");
}
set
{
SetProperty(BuildPropertyNames.NameString, value);
}
}
public string Description
{
get
{
return GetProperty(BuildPropertyNames.DescriptionString, "");
}
set
{
SetProperty(BuildPropertyNames.DescriptionString, value);
}
}
// Deployment
public DeploymentType Deployment
{
get
{
return GetProperty(BuildPropertyNames.DeploymentString, DeploymentType.ISO);
}
set
{
SetProperty(BuildPropertyNames.DeploymentString, value);
}
}
// Launch
public LaunchType Launch
{
get
{
return GetProperty(BuildPropertyNames.LaunchString, LaunchType.VMware);
}
set
{
SetProperty(BuildPropertyNames.LaunchString, value);
}
}
public bool ShowLaunchConsole
{
get
{
return GetProperty(BuildPropertyNames.ShowLaunchConsoleString, false);
}
set
{
SetProperty(BuildPropertyNames.ShowLaunchConsoleString, value);
}
}
// Debug
public bool DebugEnabled
{
get
{
return GetProperty(BuildPropertyNames.DebugEnabledString, true);
}
set
{
SetProperty(BuildPropertyNames.DebugEnabledString, value);
}
}
public bool StackCorruptionDetectionEnabled
{
get
{
return GetProperty(BuildPropertyNames.StackCorruptionDetectionEnabledString, true);
}
set
{
SetProperty(BuildPropertyNames.StackCorruptionDetectionEnabledString, value);
}
}
public StackCorruptionDetectionLevel StackCorruptionDetectionLevel
{
get
{
return GetProperty(BuildPropertyNames.StackCorruptionDetectionLevelString, StackCorruptionDetectionLevel.MethodFooters);
}
set
{
SetProperty(BuildPropertyNames.StackCorruptionDetectionLevelString, value);
}
}
public DebugMode DebugMode
{
get
{
return GetProperty(BuildPropertyNames.DebugModeString, DebugMode.Source);
}
set
{
SetProperty(BuildPropertyNames.DebugModeString, value);
}
}
public bool IgnoreDebugStubAttribute
{
get
{
return GetProperty(BuildPropertyNames.IgnoreDebugStubAttributeString, false);
}
set
{
SetProperty(BuildPropertyNames.IgnoreDebugStubAttributeString, value);
}
}
public string CosmosDebugPort
{
get
{
return GetProperty(BuildPropertyNames.CosmosDebugPortString, "Serial: COM1");
}
set
{
SetProperty(BuildPropertyNames.CosmosDebugPortString, value);
}
}
public string VisualStudioDebugPort
{
get
{
return GetProperty(BuildPropertyNames.VisualStudioDebugPortString, "Serial: COM1");
}
set
{
SetProperty(BuildPropertyNames.VisualStudioDebugPortString, value);
}
}
// PXE
public string PxeInterface
{
get
{
return GetProperty(BuildPropertyNames.PxeInterfaceString, "");
}
set
{
SetProperty(BuildPropertyNames.PxeInterfaceString, value);
}
}
public string SlavePort
{
get
{
return GetProperty(BuildPropertyNames.SlavePortString, "None");
}
set
{
SetProperty(BuildPropertyNames.SlavePortString, value);
}
}
// Bochs
public const string BochsDefaultConfigurationFileName = "Cosmos.bxrc";
public const string BochsEmulatorConfigurationFileString = "BochsConfig";
public string BochsEmulatorConfigurationFile
{
get
{
return GetProperty(
BochsEmulatorConfigurationFileString,
Path.Combine(OutputPath + BochsDefaultConfigurationFileName));
}
set
{
SetProperty(BochsEmulatorConfigurationFileString, value);
}
}
// VMware
public VMwareEdition VMwareEdition
{
get
{
return GetProperty(BuildPropertyNames.VMwareEditionString, VMwareEdition.Player);
}
set
{
SetProperty(BuildPropertyNames.VMwareEditionString, value);
}
}
public String OutputPath
{
get
{
return GetProperty(BuildPropertyNames.OutputPathString, @"bin\debug");
}
set
{
SetProperty(BuildPropertyNames.OutputPathString, value);
}
}
public Framework Framework
{
get
{
return GetProperty(BuildPropertyNames.FrameworkString, Common.Framework.MicrosoftNET);
}
set
{
SetProperty(BuildPropertyNames.FrameworkString, value);
}
}
public Boolean UseInternalAssembler
{
get
{
return GetProperty(BuildPropertyNames.UseInternalAssemblerString, false);
}
set
{
SetProperty(BuildPropertyNames.UseInternalAssemblerString, value);
}
}
public TraceAssemblies TraceAssemblies
{
get
{
return GetProperty(BuildPropertyNames.TraceAssembliesString, TraceAssemblies.User);
}
set
{
SetProperty(BuildPropertyNames.TraceAssembliesString, value);
}
}
public bool EnableGDB
{
get
{
return GetProperty(BuildPropertyNames.EnableGDBString, false);
}
set
{
SetProperty(BuildPropertyNames.EnableGDBString, value);
}
}
public bool StartCosmosGDB
{
get
{
return GetProperty(BuildPropertyNames.StartCosmosGDBString, false);
}
set
{
SetProperty(BuildPropertyNames.StartCosmosGDBString, value);
}
}
public bool EnableBochsDebug
{
get
{
return GetProperty(BuildPropertyNames.EnableBochsDebugString, false);
}
set
{
SetProperty(BuildPropertyNames.EnableBochsDebugString, value);
}
}
public bool StartBochsDebugGui
{
get
{
return GetProperty(BuildPropertyNames.StartBochsDebugGui, false);
}
set
{
SetProperty(BuildPropertyNames.StartBochsDebugGui, value);
}
}
/// <summary>
/// Gets or sets binary format which is used for producing kernel image.
/// </summary>
public BinFormat BinFormat
{
get
{
return GetProperty(BuildPropertyNames.BinFormatString, BinFormat.Bin);
}
set
{
SetProperty(BuildPropertyNames.BinFormatString, value);
}
}
}
}