public void Build() { string projectLocation = Path.GetDirectoryName(_loc); string objFolder = Path.Combine(projectLocation, "obj"); string binFolder = Path.Combine(projectLocation, "bin"); string includes = BuildIncludeString().Trim('\n'); string propStr = BuildPropertiesString().Trim('\n'); if (!Directory.Exists(objFolder)) { Directory.CreateDirectory(objFolder); } if (File.Exists($"{projectLocation}/scripts/prebuildScript.sh")) { Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/prebuildScript.sh")); } IEnumerable <SourceFile> viewCode = null; if (SourceFiles.Any(f => f.FileType == SourceCodeType.View)) { IEnumerable <string> viewFiles = SourceFiles .Where(f => f.FileType == SourceCodeType.View) .Select(f => f.Path); GMLInterface.ProcessFiles(viewFiles, IncludeFolders.First()); viewCode = viewFiles.Select(f => new SourceFile($"{Path.GetDirectoryName(f)}/{Path.GetFileNameWithoutExtension(f)}.g.c")).ToArray(); SourceFiles.AddRange(viewCode); } System.Console.WriteLine("Builing..."); foreach (SourceFile file in SourceFiles.Where(f => f.FileType == SourceCodeType.Code)) { string fileName = System.IO.Path.GetFileName(file.Path).Split('.', StringSplitOptions.RemoveEmptyEntries)[0]; ExternalPrograms.RunCompiler($"-c {file.Path} -o {objFolder}/{fileName}.o {includes} {propStr}"); } if (viewCode != null) { foreach (SourceFile viewFile in viewCode) { SourceFiles.Remove(viewFile); } viewCode = null; } var objFiles = Directory.GetFiles(objFolder) .Where(f => string.Compare(Path.GetExtension(f), ".o") == 0); if (objFiles.Any()) { System.Console.WriteLine("Linking..."); string link = BuildLinkString().Trim('\n'); StringBuilder sb = new StringBuilder(link); foreach (string o in objFiles) { sb.Append($"{o} "); } string outName = Path.GetFileNameWithoutExtension(_loc); if (!Directory.Exists(binFolder)) { Directory.CreateDirectory(binFolder); } sb.Append($"-o {binFolder}/{outName}.lef"); ExternalPrograms.RunCompiler(sb.ToString()); if (File.Exists($"{projectLocation}/scripts/postbuildScript.sh")) { Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/postbuildScript.sh")); } } }