From f6b57d7347d9d99e7f2754c4b2182662552cea89 Mon Sep 17 00:00:00 2001
From: Hashim Sharif <hsharif3@miranda.cs.illinois.edu>
Date: Wed, 24 Mar 2021 04:01:09 -0500
Subject: [PATCH] Partially genration of getopt handling - incomplete!

---
 .../keras_frontend/approxhpvm_translator.py   |  3 -
 .../keras_frontend/hpvm_dfg_translator.py     | 56 +++++++++++++++++--
 2 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py b/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
index 2464710750..87a55913d9 100644
--- a/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
+++ b/hpvm/projects/keras/keras_frontend/approxhpvm_translator.py
@@ -1088,10 +1088,7 @@ def createRecursiveDir(target_dir):
     print ("Delete Directory or Give Different Path. Aborting....")
     sys.exit(1)
 
-  print (target_dir)
-  
   toks = target_dir.split("/")
-  print (toks)
   for i in range(len(toks)):
     path_str = "/".join(toks[0:i+1])
     if path_str != "":
diff --git a/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py b/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
index 53369478e3..38d8254241 100644
--- a/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
+++ b/hpvm/projects/keras/keras_frontend/hpvm_dfg_translator.py
@@ -695,6 +695,9 @@ class HPVMTranslator:
   def genMainFunction(self, test_data, batch_size):
 
      main_func_str = "int main(int argc, char* argv[]){ \n\n"
+
+     main_func_str += self.GetOptLoop()
+     
      main_func_str += self.weight_str
      main_func_str += self.input_str
      main_func_str += "\n" + HPVM_init + "(); \n"
@@ -733,6 +736,9 @@ class HPVMTranslator:
   def genTunerMainFunction(self, src_dir, test_data, batch_size):    
 
      tuner_main_func_str = "int main(int argc, char* argv[]){ \n\n"
+
+     tuner_main_func_str += self.GetOptLoop()
+     
      tuner_main_func_str += self.weight_str
      tuner_main_func_str += self.input_str
      tuner_main_func_str += "RootIn* args = static_cast<RootIn*>(malloc(sizeof(RootIn))); \n\n"
@@ -833,18 +839,58 @@ void write_accuracy(float accuracy) {
   fout << std::fixed << accuracy;
 }
 
+"""
+    
+    return FIFO_str
+ 
+    
+  def getUsageStr(self):
 
+    usage_str = """
 
-"""
+void printUsage(){
+  std::cerr << \"Usage: -d {test|tune} -c {config_file_path} \";
+  abort();
+}
 
-    return FIFO_str
+"""
+    return usage_str
   
 
 
+  def GetOptLoop(self):
+
+    getopt_str = """
+
+  std::string runtype;
+  std::string config_path;
+  int flag;
+  while ( (flag = getopt (argc, argv, "d:c:")) != -1){
+    switch (flag)
+      {
+      case 'd':
+	runtype = std::string(optarg);
+	if (runtype != "test" && runtype != "tune")
+	  printUsage();
+	break;
+      case 'c':
+	config_path = std::string(optarg);
+	break;
+      default:
+	printUsage(); 
+      }
+  }
+
+"""
+    
+    return getopt_str
+  
+  
+
   def generateTestProgram(self, dir_prefix):
     
     program_str = self.file_header_str + self.node_str + self.root_str
-    program_str += self.root_struct_str + self.main_func_str
+    program_str += self.root_struct_str + self.getUsageStr() +  self.main_func_str
 
     DEBUG (program_str)
     
@@ -856,8 +902,8 @@ void write_accuracy(float accuracy) {
 
   def generateTunerProgram(self, dir_prefix, FIFO_str):
     
-    program_str = self.file_header_str + FIFO_str + self.node_str + self.root_str
-    program_str += self.root_struct_str + self.tuner_main_func_str
+    program_str = self.file_header_str + FIFO_str + self.node_str + self.root_str 
+    program_str += self.root_struct_str + self.getUsageStr() + self.tuner_main_func_str
 
     DEBUG (program_str)
     
-- 
GitLab