From 3c3692960328b82724560bf81ade0f72b651e969 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 19 Mar 2019 15:04:29 -0400 Subject: [PATCH] zig targets prints the available libcs --- doc/langref.html.in | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/main.cpp | 9 +++++++++ src/target.cpp | 14 ++++++++++++++ src/target.hpp | 3 +++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/doc/langref.html.in b/doc/langref.html.in index 8e6f22a049..bf24561025 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -8649,7 +8649,50 @@ C ABIs: itanium cygnus coreclr - simulator + simulator + +Available libcs: + aarch64_be-linux-gnu + aarch64_be-linux-musl + aarch64-linux-gnu + aarch64-linux-musleabi + armeb-linux-gnueabi + armeb-linux-gnueabihf + armeb-linux-musleabi + armeb-linux-musleabihf + arm-linux-gnueabi + arm-linux-gnueabihf + arm-linux-musleabi + arm-linux-musleabihf + i386-linux-gnu + i386-linux-musl + 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 + nios2-linux-gnu + powerpc64le-linux-gnu + powerpc64le-linux-musl + powerpc64-linux-gnu + powerpc64-linux-musl + powerpc-linux-gnu + powerpc-linux-musl + riscv32-linux-musl + riscv64-linux-gnu + riscv64-linux-musl + s390x-linux-gnu + s390x-linux-musl + sparc-linux-gnu + sparcv9-linux-gnu + x86_64-linux-gnu + x86_64-linux-gnux32 + x86_64-linux-musl

The Zig Standard Library ({#syntax#}@import("std"){#endsyntax#}) has architecture, environment, and operating system abstractions, and thus takes additional work to support more platforms. diff --git a/src/main.cpp b/src/main.cpp index f58a00209a..775ce928cd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -191,6 +191,15 @@ static int print_target_list(FILE *f) { fprintf(f, " %s%s\n", target_abi_name(abi), native_str); } + fprintf(f, "\nAvailable libcs:\n"); + size_t libc_count = target_libc_count(); + for (size_t i = 0; i < libc_count; i += 1) { + ZigTarget libc_target; + target_libc_enum(i, &libc_target); + fprintf(f, " %s-%s-%s\n", target_arch_name(libc_target.arch), + target_os_name(libc_target.os), target_abi_name(libc_target.abi)); + } + return EXIT_SUCCESS; } diff --git a/src/target.cpp b/src/target.cpp index a3bccabcc4..aa6202c290 100644 --- a/src/target.cpp +++ b/src/target.cpp @@ -1498,3 +1498,17 @@ bool target_is_libc_lib_name(const ZigTarget *target, const char *name) { return false; } + +size_t target_libc_count(void) { + return array_length(libcs_available); +} + +void target_libc_enum(size_t index, ZigTarget *out_target) { + assert(index < array_length(libcs_available)); + out_target->arch = libcs_available[index].arch; + out_target->os = libcs_available[index].os; + out_target->abi = libcs_available[index].abi; + out_target->sub_arch = ZigLLVM_NoSubArch; + out_target->vendor = ZigLLVM_UnknownVendor; + out_target->is_native = false; +} diff --git a/src/target.hpp b/src/target.hpp index d42ebcc576..413c814a40 100644 --- a/src/target.hpp +++ b/src/target.hpp @@ -169,4 +169,7 @@ bool target_is_musl(const ZigTarget *target); uint32_t target_arch_pointer_bit_width(ZigLLVM_ArchType arch); +size_t target_libc_count(void); +void target_libc_enum(size_t index, ZigTarget *out_target); + #endif