public void Convert(string ProjectPath)
{
using (ProjectCollection LocalProjColl = new ProjectCollection())
{
Project MSBProj = LocalProjColl.LoadProject(PK.Wrapper.ExpandEnvVars(ProjectPath, ""));
ARMCCPath = MSBProj.GetPropertyValue("CC").ToLower();
ARMASMPath = MSBProj.GetPropertyValue("AS").ToLower();
ARMLINKPath = MSBProj.GetPropertyValue("LINK").ToLower();
ARMARPath = MSBProj.GetPropertyValue("AR").ToLower();
ARMFROMELFPath = MSBProj.GetPropertyValue("FromELF").ToLower();
}
PKParser.Arg.PKArgParser ArgParser = new PKParser.Arg.PKArgParser();
int index = 0;
Link Link = new Link("Link", null);
Link.LogEvent += new MessagesParsesHelper.Link.LogEventDelegate(Link_LogEvent);
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_PROJECT_TREE, GeneratingLogMessage.WORK_STATE.START));
foreach (LogQueueItem item in LogQueue.Values)
{
index++;
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_ANALYSE_LINKS, GeneratingLogMessage.WORK_TYPE.CREATE_PROJECT_TREE, GeneratingLogMessage.WORK_STATE.WORKING, (int)((index * 100) / LogQueue.Values.Count)));
string s = ArgParser.GetUtil(item.Message);
if (s == null) continue;
if (String.Compare(ARMLINKPath, s, StringComparison.InvariantCultureIgnoreCase) == 0)
{
//ArmLink
ARMLink.Add(ARMLink.Count + 1, new ParCollContainer(ArgParser.Add(item.Message), item.Message, item.ProjectBuildContext, item.CurrentDir));
}
else if (String.Compare(ARMCCPath, s, StringComparison.InvariantCultureIgnoreCase) == 0)
{
//ArmCC
ARMCCandARMASM.Add(ARMCCandARMASM.Count + 1, new ParCollContainer(ArgParser.Add(item.Message), item.Message, item.ProjectBuildContext, item.CurrentDir));
}
else if (String.Compare(ARMASMPath, s, StringComparison.InvariantCultureIgnoreCase) == 0)
{
//ArmAsm
ARMCCandARMASM.Add(ARMCCandARMASM.Count + 1, new ParCollContainer(ArgParser.Add(item.Message), item.Message, item.ProjectBuildContext, item.CurrentDir));
}
else if (String.Compare(ARMARPath, s, StringComparison.InvariantCultureIgnoreCase) == 0)
{
//ArmAr
ARMAR.Add(ARMAR.Count + 1, new ParCollContainer(ArgParser.Add(item.Message), item.Message, item.ProjectBuildContext, item.CurrentDir));
}
else if (String.Compare(ARMFROMELFPath, s, StringComparison.InvariantCultureIgnoreCase) == 0)
{
//FROMElf
FROMELF.Add(FROMELF.Count + 1, new ParCollContainer(ArgParser.Add(item.Message), item.Message, item.ProjectBuildContext, item.CurrentDir));
}
}
ArgParser.Clear();
//Construct project tree
ParCollContainer container = ARMLink.Values[ARMLink.Values.Count - 1];
if (container.ParamCollection == null) throw new MessagesParserException(KeilWizardStrings.IDS_ERROR_CANT_PASRSE_LINK);
Link.ParamCollection = container.ParamCollection;
string LIB_EXT = string.Empty;
string OBJ_EXT = string.Empty;
using (ProjectCollection LocalProjColl = new ProjectCollection())
{
Project MSBProj = LocalProjColl.LoadProject(container.ProjectBuildContext[container.ProjectBuildContext.Count - 1]);
LIB_EXT = MSBProj.GetPropertyValue("LIB_EXT");
OBJ_EXT = MSBProj.GetPropertyValue("OBJ_EXT");
}
foreach (ArgCollection arg in container.ParamCollection.Values)
{
if (arg.Name == "--output")
{
Link.Name = arg[0];
}
}
foreach (string file in container.ParamCollection.Files.Values)
{
RequiredLibrary lib = null;
RequiredObject obj = null;
if (Path.GetExtension(file).ToLower() == "." + LIB_EXT.ToLower())
{
lib = new RequiredLibrary(file, Link);
Link.InputLibraries.Add(Link.InputLibraries.Count + 1, lib);
}
if (Path.GetExtension(file).ToLower() == "." + OBJ_EXT.ToLower())
{
obj = new RequiredObject(file, Link);
Link.InputObjects.Add(Link.InputObjects.Count + 1, obj);
}
if (lib != null) Link.AllInputs.Add(Link.AllInputs.Count + 1, lib);
if (obj != null) Link.AllInputs.Add(Link.AllInputs.Count + 1, obj);
}
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_ANALYSE_LINKS, GeneratingLogMessage.WORK_TYPE.CREATE_PROJECT_TREE, GeneratingLogMessage.WORK_STATE.WORKING, 100));
System.Threading.Thread.Sleep(sleeptime);
//using (StreamWriter outfile =
// new StreamWriter(Path.GetFileNameWithoutExtension(Link.Name) + ".input"))
//{
// outfile.WriteLine(PK.Wrapper.Solution.ProjectPath);
// outfile.WriteLine(uVisionProjectPath);
// outfile.WriteLine(ProjectPath);
// foreach (ArgCollection arg in Link.ParamCollection.Values)
// {
// if (arg.Name == "--scatter")
// outfile.WriteLine(arg[0]);
// }
// outfile.WriteLine(LogQueue.Values.Count);
// foreach (LogQueueItem item in LogQueue.Values)
// {
// outfile.WriteLine(item.Message);
// outfile.WriteLine(item.CurrentDir);
// outfile.WriteLine(item.ProjectBuildContext.Count);
// foreach (string s in item.ProjectBuildContext)
// {
// outfile.WriteLine(s);
// }
// }
//}
ArgParser.Clear();
//Analysing libraries
this.AnalizeInputLibraries(Link.InputLibraries, LogQueue.Values);
//Checking Crypto.Lib
this.CheckCryptoLib(Link.InputLibraries, LogQueue.Values);
//Checking Sockets Libs
this.CheckSocketsLibs(Link.InputLibraries, LogQueue.Values);
//Analysing Files
SortedList<int, RequiredObject> ReqObjs = Link.GetAllRequiredObjects();
this.AnalizeInputObjects(ReqObjs);//, LogQueue.Values);
if (!Link.CheckItems())
{
throw new MessagesParserException(KeilWizardStrings.IDS_ERROR_FAIL_LINK_ANALYSE);
}
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_PROJECT_TREE, GeneratingLogMessage.WORK_STATE.DONE));
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_FILE_LIST, GeneratingLogMessage.WORK_STATE.START));
index = 0;
//Collects required files
List<RequiredLibrary> ReqLib = Link.GetAllSubRequiredLibraries();
foreach (RequiredObject obj in ReqObjs.Values)
{
index++;
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_CREATING_FILE_LIST, GeneratingLogMessage.WORK_TYPE.CREATE_FILE_LIST, GeneratingLogMessage.WORK_STATE.WORKING, (int)((index * 100) / (ReqObjs.Values.Count + ReqLib.Count))));
this.AddObjFile(obj);
}
foreach (RequiredLibrary lib in ReqLib)
{
index++;
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_CREATING_FILE_LIST, GeneratingLogMessage.WORK_TYPE.CREATE_FILE_LIST, GeneratingLogMessage.WORK_STATE.WORKING, (int)((index * 100) / (ReqObjs.Values.Count + ReqLib.Count))));
uVisionProject.AddFile(lib.OutputFileuVision, Path.GetFileNameWithoutExtension(lib.Parent.Name));
}
//Sorting groups
uVisionProject.SortGroups();
foreach (RequiredLibrary lib in Link.InputLibraries.Values)
{
uVisionProject.AddFile(lib.OutputFileuVision, Path.GetFileNameWithoutExtension(Link.Name));
}
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_CREATING_FILE_LIST, GeneratingLogMessage.WORK_TYPE.CREATE_FILE_LIST, GeneratingLogMessage.WORK_STATE.WORKING, 100));
System.Threading.Thread.Sleep(sleeptime);
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_FILE_LIST, GeneratingLogMessage.WORK_STATE.DONE));
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_TARGETS, GeneratingLogMessage.WORK_STATE.START));
//Create targets
index = 0;
foreach (RequiredLibrary lib in Link.InputLibraries.Values)
{
index++;
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_CREATING_TARGETS, GeneratingLogMessage.WORK_TYPE.CREATE_TARGETS, GeneratingLogMessage.WORK_STATE.WORKING, (int)((index * 100) / (Link.InputLibraries.Count))));
this.CreateLibraryTartet(lib);
}
this.CreateLinkTarget(Link);//, LogQueue.Values);
OnLog(new GeneratingLogMessage(KeilWizardStrings.IDS_CREATING_TARGETS, GeneratingLogMessage.WORK_TYPE.CREATE_TARGETS, GeneratingLogMessage.WORK_STATE.WORKING, 100));
System.Threading.Thread.Sleep(sleeptime);
OnLog(new GeneratingLogMessage("", GeneratingLogMessage.WORK_TYPE.CREATE_TARGETS, GeneratingLogMessage.WORK_STATE.DONE));
//using (StreamWriter outfile = new StreamWriter(Path.GetFileNameWithoutExtension(Link.Name) + ".result"))
//{
// List<string> strs = uVisionProject.GetAllProjectStrings();
// foreach (string s in strs)
// {
// outfile.WriteLine(s);
// }
//}
}