Commit 0c2dde2fda

Andrew Kelley <andrew@ziglang.org>
2020-01-21 07:31:27
add libc and glibcs to self-hosted zig targets
1 parent 39759b9
Changed files (1)
src-self-hosted
src-self-hosted/print_targets.zig
@@ -5,6 +5,101 @@ const mem = std.mem;
 const Allocator = mem.Allocator;
 const Target = std.Target;
 
+// TODO this is hard-coded until self-hosted gains this information canonically
+const available_libcs = [_][]const u8{
+    "aarch64_be-linux-gnu",
+    "aarch64_be-linux-musl",
+    "aarch64_be-windows-gnu",
+    "aarch64-linux-gnu",
+    "aarch64-linux-musl",
+    "aarch64-windows-gnu",
+    "armeb-linux-gnueabi",
+    "armeb-linux-gnueabihf",
+    "armeb-linux-musleabi",
+    "armeb-linux-musleabihf",
+    "armeb-windows-gnu",
+    "arm-linux-gnueabi",
+    "arm-linux-gnueabihf",
+    "arm-linux-musleabi",
+    "arm-linux-musleabihf",
+    "arm-windows-gnu",
+    "i386-linux-gnu",
+    "i386-linux-musl",
+    "i386-windows-gnu",
+    "mips64el-linux-gnuabi64",
+    "mips64el-linux-gnuabin32",
+    "mips64el-linux-musl",
+    "mips64-linux-gnuabi64",
+    "mips64-linux-gnuabin32",
+    "mips64-linux-musl",
+    "mipsel-linux-gnu",
+    "mipsel-linux-musl",
+    "mips-linux-gnu",
+    "mips-linux-musl",
+    "powerpc64le-linux-gnu",
+    "powerpc64le-linux-musl",
+    "powerpc64-linux-gnu",
+    "powerpc64-linux-musl",
+    "powerpc-linux-gnu",
+    "powerpc-linux-musl",
+    "riscv64-linux-gnu",
+    "riscv64-linux-musl",
+    "s390x-linux-gnu",
+    "s390x-linux-musl",
+    "sparc-linux-gnu",
+    "sparcv9-linux-gnu",
+    "wasm32-freestanding-musl",
+    "x86_64-linux-gnu (native)",
+    "x86_64-linux-gnux32",
+    "x86_64-linux-musl",
+    "x86_64-windows-gnu",
+};
+
+// TODO this is hard-coded until self-hosted gains this information canonically
+const available_glibcs = [_][]const u8{
+    "2.0",
+    "2.1",
+    "2.1.1",
+    "2.1.2",
+    "2.1.3",
+    "2.2",
+    "2.2.1",
+    "2.2.2",
+    "2.2.3",
+    "2.2.4",
+    "2.2.5",
+    "2.2.6",
+    "2.3",
+    "2.3.2",
+    "2.3.3",
+    "2.3.4",
+    "2.4",
+    "2.5",
+    "2.6",
+    "2.7",
+    "2.8",
+    "2.9",
+    "2.10",
+    "2.11",
+    "2.12",
+    "2.13",
+    "2.14",
+    "2.15",
+    "2.16",
+    "2.17",
+    "2.18",
+    "2.19",
+    "2.22",
+    "2.23",
+    "2.24",
+    "2.25",
+    "2.26",
+    "2.27",
+    "2.28",
+    "2.29",
+    "2.30",
+};
+
 pub fn cmdTargets(
     allocator: *Allocator,
     args: []const []const u8,
@@ -52,25 +147,33 @@ pub fn cmdTargets(
 
     try jws.objectField("os");
     try jws.beginArray();
-    {
-        comptime var i: usize = 0;
-        inline while (i < @memberCount(Target.Os)) : (i += 1) {
-            const os_tag = @memberName(Target.Os, i);
-            try jws.arrayElem();
-            try jws.emitString(os_tag);
-        }
+    inline for (@typeInfo(Target.Os).Enum.fields) |field| {
+        try jws.arrayElem();
+        try jws.emitString(field.name);
     }
     try jws.endArray();
 
     try jws.objectField("abi");
     try jws.beginArray();
-    {
-        comptime var i: usize = 0;
-        inline while (i < @memberCount(Target.Abi)) : (i += 1) {
-            const abi_tag = @memberName(Target.Abi, i);
-            try jws.arrayElem();
-            try jws.emitString(abi_tag);
-        }
+    inline for (@typeInfo(Target.Abi).Enum.fields) |field| {
+        try jws.arrayElem();
+        try jws.emitString(field.name);
+    }
+    try jws.endArray();
+
+    try jws.objectField("libc");
+    try jws.beginArray();
+    for (available_libcs) |libc| {
+        try jws.arrayElem();
+        try jws.emitString(libc);
+    }
+    try jws.endArray();
+
+    try jws.objectField("glibc");
+    try jws.beginArray();
+    for (available_glibcs) |glibc| {
+        try jws.arrayElem();
+        try jws.emitString(glibc);
     }
     try jws.endArray();
 
@@ -105,6 +208,7 @@ pub fn cmdTargets(
         }
         try jws.endArray();
     }
+    // TODO implement native glibc version detection in self-hosted
     try jws.endObject();
 
     try jws.endObject();