Use builtin Arch/Os/Environ

This commit is contained in:
Marc Tiehuis 2018-04-13 20:12:30 +12:00
parent 7fe1c7c04f
commit b946982e90

View File

@ -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);
}
}
}