Commit 516b5e649f

Andrew Kelley <andrew@ziglang.org>
2019-06-27 17:04:45
better CLI error message for missing sub-architecture
1 parent 3c914c6
Changed files (2)
src/main.cpp
@@ -913,8 +913,20 @@ int main(int argc, char **argv) {
         get_native_target(&target);
     } else {
         if ((err = target_parse_triple(&target, target_string))) {
-            fprintf(stderr, "invalid target: %s\n", err_str(err));
-            return print_error_usage(arg0);
+            if (err == ErrorUnknownArchitecture && target.arch != ZigLLVM_UnknownArch) {
+                fprintf(stderr, "'%s' requires a sub-architecture. Try one of these:\n",
+                        target_arch_name(target.arch));
+                SubArchList sub_arch_list = target_subarch_list(target.arch);
+                size_t subarch_count = target_subarch_count(sub_arch_list);
+                for (size_t sub_i = 0; sub_i < subarch_count; sub_i += 1) {
+                    ZigLLVM_SubArchType sub = target_subarch_enum(sub_arch_list, sub_i);
+                    fprintf(stderr, "  %s%s\n", target_arch_name(target.arch), target_subarch_name(sub));
+                }
+                return print_error_usage(arg0);
+            } else {
+                fprintf(stderr, "invalid target: %s\n", err_str(err));
+                return print_error_usage(arg0);
+            }
         }
     }
 
src/target.cpp
@@ -486,17 +486,17 @@ void get_native_target(ZigTarget *target) {
 Error target_parse_archsub(ZigLLVM_ArchType *out_arch, ZigLLVM_SubArchType *out_sub,
         const char *archsub_ptr, size_t archsub_len)
 {
+    *out_arch = ZigLLVM_UnknownArch;
+    *out_sub = ZigLLVM_NoSubArch;
     for (size_t arch_i = 0; arch_i < array_length(arch_list); arch_i += 1) {
         ZigLLVM_ArchType arch = arch_list[arch_i];
         SubArchList sub_arch_list = target_subarch_list(arch);
         size_t subarch_count = target_subarch_count(sub_arch_list);
-        if (subarch_count == 0) {
-            if (mem_eql_str(archsub_ptr, archsub_len, target_arch_name(arch))) {
-                *out_arch = arch;
-                *out_sub = ZigLLVM_NoSubArch;
+        if (mem_eql_str(archsub_ptr, archsub_len, target_arch_name(arch))) {
+            *out_arch = arch;
+            if (subarch_count == 0) {
                 return ErrorNone;
             }
-            continue;
         }
         for (size_t sub_i = 0; sub_i < subarch_count; sub_i += 1) {
             ZigLLVM_SubArchType sub = target_subarch_enum(sub_arch_list, sub_i);