X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=src%2Fedu%2Fuci%2Feecs%2FcodeGenerator%2FCodeGenerator.java;h=e727f0b7ba51de2d415492f4c292f8e9b8e8aa6e;hp=38a498103807d63a09f887b7c71e692d94e160c6;hb=32c01c7b2b6caca0a2589b9b686f510d72d7df5f;hpb=1c06bc88ba6f7c5882d726207fa6e05e734cb1bd diff --git a/src/edu/uci/eecs/codeGenerator/CodeGenerator.java b/src/edu/uci/eecs/codeGenerator/CodeGenerator.java index 38a4981..e727f0b 100644 --- a/src/edu/uci/eecs/codeGenerator/CodeGenerator.java +++ b/src/edu/uci/eecs/codeGenerator/CodeGenerator.java @@ -13,6 +13,7 @@ import java.util.HashMap; import edu.uci.eecs.codeGenerator.CodeAdditions.CodeAddition; import edu.uci.eecs.specExtraction.Code; import edu.uci.eecs.specExtraction.Construct; +import edu.uci.eecs.specExtraction.DefineConstruct; import edu.uci.eecs.specExtraction.EntryConstruct; import edu.uci.eecs.specExtraction.InterfaceConstruct; import edu.uci.eecs.specExtraction.OPConstruct; @@ -57,14 +58,22 @@ public class CodeGenerator { // The specification annotation extractor private SpecExtractor extractor; - public CodeGenerator(String dirName) { + public CodeGenerator(String originalDir, String generatedDir, String dirName) { this.dirName = dirName; - originalDir = Environment.BenchmarksDir + dirName - + "/"; - generatedDir = Environment.GeneratedFilesDir + dirName - + "/"; + this.originalDir = originalDir + "/" + dirName + "/"; + this.generatedDir = generatedDir + "/" + dirName + "/"; + + //this.originalDir = Environment.BenchmarksDir + dirName + "/"; + //this.generatedDir = Environment.GeneratedFilesDir + dirName + "/"; + try { - files = this.getSrcFiles(originalDir); + files = this.getSrcFiles(this.originalDir); + System.out.println("Original benchmarks directory: " + this.originalDir); + System.out.println("Generated benchmark directory: " + this.generatedDir); + System.out.println("The specific benchmark directory: " + this.dirName); + for (int i = 0; i < files.size(); i++) { + System.out.println(" Processing: " + files.get(i)); + } } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -104,6 +113,8 @@ public class CodeGenerator { // Extract all the additions ArrayList OPList = extractor.OPListMap.get(file); EntryConstruct entry = extractor.entryMap.get(file); + ArrayList defineList = extractor.defineListMap + .get(file); ArrayList interfaceList = extractor.interfaceListMap .get(file); Code code = null; @@ -122,6 +133,14 @@ public class CodeGenerator { addition = new CodeAddition(entry.beginLineNum, code); additions.addCodeAddition(addition); } + // For define constructs + if (defineList != null) { + for (DefineConstruct con : defineList) { + code = CodeGeneratorUtils.Generate4Define(con); + addition = new CodeAddition(con.endLineNum, code); + additions.addCodeAddition(addition); + } + } // For interface constructs if (interfaceList != null) { for (InterfaceConstruct con : interfaceList) { @@ -169,6 +188,17 @@ public class CodeGenerator { curAddition = additions.codeAdditions.get(0); } + // Include the header for C/C++ files (.c/.cc/.cpp) + String name = file.getName(); + if (name.endsWith(".c") || name.endsWith(".cc") + || name.endsWith(".cpp")) { + newCode.addLine(CodeGeneratorUtils.Comment("Add the" + + SpecNaming.CDSSpecGeneratedHeader + " header file")); + newCode.addLine(CodeGeneratorUtils + .IncludeHeader(SpecNaming.CDSSpecGeneratedHeader)); + newCode.addLine(""); + } + try { br = new BufferedReader(new FileReader(file)); lineReader = new LineNumberReader(br); @@ -252,7 +282,7 @@ public class CodeGenerator { .GenerateCDSSpecHeaderFile(extractor); Code generatedCPP = CodeGeneratorUtils .GenerateCDSSpecCPPFile(extractor); - + System.out.println("/***** Generated header file *****/"); System.out.println(generatedHeader); System.out.println("/***** Generated cpp file *****/"); @@ -308,8 +338,27 @@ public class CodeGenerator { } static public void main(String[] args) { - String dirName = Environment.MS_QUEUE; - CodeGenerator generator = new CodeGenerator(dirName); - generator.generateCode(); + if (args.length < 3) { + System.out + .println("Usage: CodeGenerator "); + return; + } + + // String[] dirNames = args; + +// String[] dirNames = new String[args.length - 2]; +// for (int i = 0; i < args.length - 2; i++) { +// dirNames[i] = args[i + 2]; +// } + String[] dirNames = Environment.Benchmarks; + + for (int i = 0; i < dirNames.length; i++) { + String dirName = dirNames[i]; + System.out.println("/********** Generating CDSSpec files for " + + dirName + " **********/"); +// CodeGenerator generator = new CodeGenerator(Environment.BenchmarksDir, Environment.GeneratedFilesDir, dirName); + CodeGenerator generator = new CodeGenerator(args[0], args[1], dirName); + generator.generateCode(); + } } }