spirv2nir: Rework argument handling
[mesa.git] / src / compiler / spirv / spirv2nir.c
index bbec4d2af6a699e78128c07036d4baf78e6cfb80..c6dfab0d366a1f34080ec69a2ba030786f787867 100644 (file)
@@ -65,6 +65,20 @@ stage_to_enum(char *stage)
       return MESA_SHADER_NONE;
 }
 
+static void
+print_usage(char *exec_name, FILE *f)
+{
+   fprintf(f,
+"Usage: %s [options] file\n"
+"Options:\n"
+"  -h  --help              Print this help.\n"
+"  -s, --stage <stage>     Specify the shader stage.  Valid stages are:\n"
+"                          vertex, tess-ctrl, tess-eval, geometry, fragment,\n"
+"                          compute, and kernel (OpenCL-style compute).\n"
+"  -e, --entry <name>      Specify the entry-point name.\n"
+   , exec_name);
+}
+
 int main(int argc, char **argv)
 {
    gl_shader_stage shader_stage = MESA_SHADER_FRAGMENT;
@@ -73,36 +87,43 @@ int main(int argc, char **argv)
 
    static struct option long_options[] =
      {
+       {"help",         no_argument, 0, 'h'},
        {"stage",  required_argument, 0, 's'},
        {"entry",  required_argument, 0, 'e'},
        {0, 0, 0, 0}
      };
 
-   while ((ch = getopt_long(argc - 1, argv + 1, "s:e:", long_options, NULL)) != -1)
+   while ((ch = getopt_long(argc, argv, "hs:e:", long_options, NULL)) != -1)
    {
       switch (ch)
       {
-         case 's':
-            shader_stage = stage_to_enum(optarg);
-            if (shader_stage == MESA_SHADER_NONE)
-            {
-               fprintf(stderr, "Unknown stage %s\n", optarg);
-               return 1;
-            }
-            break;
-         case 'e':
-            entry_point = optarg;
-            break;
-         default:
-            fprintf(stderr, "Unrecognized option.\n");
+      case 'h':
+         print_usage(argv[0], stdout);
+         return 0;
+      case 's':
+         shader_stage = stage_to_enum(optarg);
+         if (shader_stage == MESA_SHADER_NONE)
+         {
+            fprintf(stderr, "Unknown stage \"%s\"\n", optarg);
+            print_usage(argv[0], stderr);
             return 1;
+         }
+         break;
+      case 'e':
+         entry_point = optarg;
+         break;
+      default:
+         fprintf(stderr, "Unrecognized option \"%s\".\n", optarg);
+         print_usage(argv[0], stderr);
+         return 1;
       }
    }
 
-   int fd = open(argv[1], O_RDONLY);
+   const char *filename = argv[optind];
+   int fd = open(filename, O_RDONLY);
    if (fd < 0)
    {
-      fprintf(stderr, "Failed to open %s\n", argv[1]);
+      fprintf(stderr, "Failed to open %s\n", filename);
       return 1;
    }