orcc: Add --quiet and --benchmark parameters to generated test programs
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 26 Jun 2010 07:54:51 +0000 (09:54 +0200)
committerDavid Schleef <ds@schleef.org>
Sat, 26 Jun 2010 21:16:58 +0000 (14:16 -0700)
tools/orcc.c

index 8ef26cb..4759f53 100644 (file)
@@ -48,7 +48,7 @@ void help (void)
   printf("  orcc [OPTION...] INPUT_FILE\n");
   printf("\n");
   printf("Help Options:\n");
-  printf("  -?, --help              Show help options\n");
+  printf("  -h, --help              Show help options\n");
   printf("\n");
   printf("Application Options:\n");
   printf("  -v, --verbose           Output more information\n");
@@ -265,13 +265,45 @@ main (int argc, char *argv[])
       output_code_backup (programs[i], output);
     }
     fprintf(output, "\n");
+    fprintf(output, "static int quiet = 0;\n");
+    fprintf(output, "static int benchmark = 0;\n");
+    fprintf(output, "\n");
+    fprintf(output, "static void help (const char *argv0)\n");
+    fprintf(output, "{\n");
+    fprintf(output, "  printf(\"Usage:\\n\");\n");
+    fprintf(output, "  printf(\"  %%s [OPTION]\\n\", argv0);\n");
+    fprintf(output, "  printf(\"Help Options:\\n\");\n");
+    fprintf(output, "  printf(\"  -h, --help          Show help options\\n\");\n");
+    fprintf(output, "  printf(\"Application Options:\\n\");\n");
+    fprintf(output, "  printf(\"  -b, --benchmark     Run benchmark and show results\\n\");\n");
+    fprintf(output, "  printf(\"  -q, --quiet         Don't output anything except on failures\\n\");\n");
+    fprintf(output, "\n");
+    fprintf(output, "  exit(0);\n");
+    fprintf(output, "}\n");
+    fprintf(output, "\n");
     fprintf(output, "int\n");
     fprintf(output, "main (int argc, char *argv[])\n");
     fprintf(output, "{\n");
     fprintf(output, "  int error = FALSE;\n");
+    fprintf(output, "  int i;\n");
     fprintf(output, "\n");
     fprintf(output, "  orc_test_init ();\n");
     fprintf(output, "\n");
+    fprintf(output, "  for(i=1;i<argc;i++) {\n");
+    fprintf(output, "    if (strcmp(argv[i], \"--help\") == 0 ||\n");
+    fprintf(output, "      strcmp(argv[i], \"-h\") == 0) {\n");
+    fprintf(output, "      help(argv[0]);\n");
+    fprintf(output, "    } else if (strcmp(argv[i], \"--quiet\") == 0 ||\n");
+    fprintf(output, "      strcmp(argv[i], \"-q\") == 0) {\n");
+    fprintf(output, "      quiet = 1;\n");
+    fprintf(output, "      benchmark = 0;\n");
+    fprintf(output, "    } else if (strcmp(argv[i], \"--benchmark\") == 0 ||\n");
+    fprintf(output, "      strcmp(argv[i], \"-b\") == 0) {\n");
+    fprintf(output, "      benchmark = 1;\n");
+    fprintf(output, "      quiet = 0;\n");
+    fprintf(output, "    }\n");
+    fprintf(output, "  }\n");
+    fprintf(output, "\n");
     for(i=0;i<n;i++){
       output_code_test (programs[i], output);
     }
@@ -715,7 +747,8 @@ output_code_test (OrcProgram *p, FILE *output)
   fprintf(output, "    OrcProgram *p = NULL;\n");
   fprintf(output, "    int ret;\n");
   fprintf(output, "\n");
-  fprintf(output, "    printf (\"%s:\\n\");\n", p->name);
+  fprintf(output, "    if (!quiet)");
+  fprintf(output, "      printf (\"%s:\\n\");\n", p->name);
   fprintf(output, "    p = orc_program_new ();\n");
   if (p->constant_n != 0) {
     fprintf(output, "      orc_program_set_constant_n (p, %d);\n",
@@ -801,17 +834,27 @@ output_code_test (OrcProgram *p, FILE *output)
   fprintf(output, "    ret = orc_test_compare_output_backup (p);\n");
   fprintf(output, "    if (!ret) {\n");
   fprintf(output, "      error = TRUE;\n");
-  fprintf(output, "    } else {\n");
-  fprintf(output, "      printf (\"    backup function passed\\n\");\n");
+  fprintf(output, "    } else if (!quiet) {\n");
+  fprintf(output, "      printf (\"    backup function  :   PASSED\\n\");\n");
+  fprintf(output, "    }\n");
+  fprintf(output, "\n");
+  fprintf(output, "    if (benchmark) {\n");
+  fprintf(output, "      printf (\"    cycles (backup)  :   \");\n");
+  fprintf(output, "      orc_test_performance (p, ORC_TEST_FLAGS_BACKUP);\n");
   fprintf(output, "    }\n");
   fprintf(output, "\n");
   fprintf(output, "    ret = orc_test_compare_output (p);\n");
-  fprintf(output, "    if (ret == ORC_TEST_INDETERMINATE) {\n");
-  fprintf(output, "      printf (\"    compilation not possible for the target\\n\");\n");
+  fprintf(output, "    if (ret == ORC_TEST_INDETERMINATE && !quiet) {\n");
+  fprintf(output, "      printf (\"    compiled function:   COMPILE FAILED\\n\");\n");
   fprintf(output, "    } else if (!ret) {\n");
   fprintf(output, "      error = TRUE;\n");
-  fprintf(output, "    } else {\n");
-  fprintf(output, "      printf (\"    compiled function passed\\n\");\n");
+  fprintf(output, "    } else if (!quiet) {\n");
+  fprintf(output, "      printf (\"    compiled function:   PASSED\\n\");\n");
+  fprintf(output, "    }\n");
+  fprintf(output, "\n");
+  fprintf(output, "    if (benchmark) {\n");
+  fprintf(output, "      printf (\"    cycles (compiled):   \");\n");
+  fprintf(output, "      orc_test_performance (p, 0);\n");
   fprintf(output, "    }\n");
   fprintf(output, "\n");
   fprintf(output, "    orc_program_free (p);\n");