edits
[cdsspec-compiler.git] / src / edu / uci / eecs / codeGenerator / CodeGenerator.java
index 2543d5cc45ca41629b802bf9ee00f55ac9b844b3..ca6401d8bd19092ee09126cb8090a4cceaffc17b 100644 (file)
@@ -58,12 +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();
                }
@@ -127,8 +137,7 @@ public class CodeGenerator {
                        if (defineList != null) {
                                for (DefineConstruct con : defineList) {
                                        code = CodeGeneratorUtils.Generate4Define(con);
-                                       addition = new CodeAddition(con.endLineNum,
-                                                       code);
+                                       addition = new CodeAddition(con.endLineNum, code);
                                        additions.addCodeAddition(addition);
                                }
                        }
@@ -179,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);
@@ -318,16 +338,26 @@ public class CodeGenerator {
        }
 
        static public void main(String[] args) {
-               String[] dirNames = { Environment.REGISTER, Environment.MS_QUEUE,
-                               Environment.LINUXRWLOCKS, Environment.MCS_LOCK,
-                               Environment.DEQUE, Environment.TREIBER_STACK };
-//             String[] dirNames = args;
+               if (args.length < 3) {
+                       System.out
+                                       .println("Usage: CodeGenerator <Benchmarks-directory> <Directory-for-generated-files> <specific-benchmark-lists...>");
+                       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 = 5; i < dirNames.length; i++) {
+               for (int i = 0; i < dirNames.length; i++) {
                        String dirName = dirNames[i];
-                       System.out.println("/**********   Processing " + dirName
-                                       + "    **********/");
-                       CodeGenerator generator = new CodeGenerator(dirName);
+                       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();
                }
        }