diff --git a/src-self-hosted/main.zig b/src-self-hosted/main.zig index d61147b8d5..825bf64a26 100644 --- a/src-self-hosted/main.zig +++ b/src-self-hosted/main.zig @@ -704,156 +704,46 @@ fn cmdFmt(allocator: &Allocator, args: []const []const u8) !void { // cmd:targets ///////////////////////////////////////////////////////////////////////////////////// -// TODO: comptime '@fields' for iteration here instead so we are always in sync. -const Os = builtin.Os; -pub const os_list = []const Os { - Os.freestanding, - Os.ananas, - Os.cloudabi, - Os.dragonfly, - Os.freebsd, - Os.fuchsia, - Os.ios, - Os.kfreebsd, - Os.linux, - Os.lv2, - Os.macosx, - Os.netbsd, - Os.openbsd, - Os.solaris, - Os.windows, - Os.haiku, - Os.minix, - Os.rtems, - Os.nacl, - Os.cnk, - Os.aix, - Os.cuda, - Os.nvcl, - Os.amdhsa, - Os.ps4, - Os.elfiamcu, - Os.tvos, - Os.watchos, - Os.mesa3d, - Os.contiki, - Os.zen, -}; - -const Arch = builtin.Arch; -pub const arch_list = []const Arch { - Arch.armv8_2a, - Arch.armv8_1a, - Arch.armv8, - Arch.armv8r, - Arch.armv8m_baseline, - Arch.armv8m_mainline, - Arch.armv7, - Arch.armv7em, - Arch.armv7m, - Arch.armv7s, - Arch.armv7k, - Arch.armv7ve, - Arch.armv6, - Arch.armv6m, - Arch.armv6k, - Arch.armv6t2, - Arch.armv5, - Arch.armv5te, - Arch.armv4t, - Arch.aarch64, - Arch.aarch64_be, - Arch.avr, - Arch.bpfel, - Arch.bpfeb, - Arch.hexagon, - Arch.mips, - Arch.mipsel, - Arch.mips64, - Arch.mips64el, - Arch.msp430, - Arch.nios2, - Arch.powerpc, - Arch.powerpc64, - Arch.powerpc64le, - Arch.r600, - Arch.amdgcn, - Arch.riscv32, - Arch.riscv64, - Arch.sparc, - Arch.sparcv9, - Arch.sparcel, - Arch.s390x, - Arch.tce, - Arch.tcele, - Arch.thumb, - Arch.thumbeb, - Arch.i386, - Arch.x86_64, - Arch.xcore, - Arch.nvptx, - Arch.nvptx64, - Arch.le32, - Arch.le64, - Arch.amdil, - Arch.amdil64, - Arch.hsail, - Arch.hsail64, - Arch.spir, - Arch.spir64, - Arch.kalimbav3, - Arch.kalimbav4, - Arch.kalimbav5, - Arch.shave, - Arch.lanai, - Arch.wasm32, - Arch.wasm64, - Arch.renderscript32, - Arch.renderscript64, -}; - -const Environ = builtin.Environ; -pub const environ_list = []const Environ { - Environ.unknown, - Environ.gnu, - Environ.gnuabi64, - Environ.gnueabi, - Environ.gnueabihf, - Environ.gnux32, - Environ.code16, - Environ.eabi, - Environ.eabihf, - Environ.android, - Environ.musl, - Environ.musleabi, - Environ.musleabihf, - Environ.msvc, - Environ.itanium, - Environ.cygnus, - Environ.amdopencl, - Environ.coreclr, - Environ.opencl, -}; - fn cmdTargets(allocator: &Allocator, args: []const []const u8) !void { try stdout.write("Architectures:\n"); - for (arch_list) |arch_tag| { - const native_str = if (builtin.arch == arch_tag) " (native) " else ""; - try stdout.print(" {}{}\n", @tagName(arch_tag), native_str); + { + comptime var i: usize = 0; + inline while (i < @memberCount(builtin.Arch)) : (i += 1) { + comptime const arch_tag = @memberName(builtin.Arch, i); + // NOTE: Cannot use empty string, see #918. + comptime const native_str = + if (comptime mem.eql(u8, arch_tag, @tagName(builtin.arch))) " (native)\n" else "\n"; + + try stdout.print(" {}{}", arch_tag, native_str); + } } try stdout.write("\n"); try stdout.write("Operating Systems:\n"); - for (os_list) |os_tag| { - const native_str = if (builtin.os == os_tag) " (native) " else ""; - try stdout.print(" {}{}\n", @tagName(os_tag), native_str); + { + comptime var i: usize = 0; + inline while (i < @memberCount(builtin.Os)) : (i += 1) { + comptime const os_tag = @memberName(builtin.Os, i); + // NOTE: Cannot use empty string, see #918. + comptime const native_str = + if (comptime mem.eql(u8, os_tag, @tagName(builtin.os))) " (native)\n" else "\n"; + + try stdout.print(" {}{}", os_tag, native_str); + } } try stdout.write("\n"); try stdout.write("Environments:\n"); - for (environ_list) |environ_tag| { - const native_str = if (builtin.environ == environ_tag) " (native) " else ""; - try stdout.print(" {}{}\n", @tagName(environ_tag), native_str); + { + comptime var i: usize = 0; + inline while (i < @memberCount(builtin.Environ)) : (i += 1) { + comptime const environ_tag = @memberName(builtin.Environ, i); + // NOTE: Cannot use empty string, see #918. + comptime const native_str = + if (comptime mem.eql(u8, environ_tag, @tagName(builtin.environ))) " (native)\n" else "\n"; + + try stdout.print(" {}{}", environ_tag, native_str); + } } }