diff --git a/src/main.cpp b/src/main.cpp index 011f5cc72..0d1145809 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -54,34 +54,29 @@ static int print_target_list(FILE *f) { fprintf(f, "Architectures:\n"); int arch_count = target_arch_count(); - int sub_arch_count = target_sub_arch_count(); for (int arch_i = 0; arch_i < arch_count; arch_i += 1) { const ArchType *arch = get_target_arch(arch_i); - const char *native_str = (native_arch_type == arch->llvm_arch) ? " (native)" : ""; - fprintf(f, " %s%s\n", ZigLLVMGetArchTypeName(arch->llvm_arch), native_str); - for (int sub_arch_i = 0; sub_arch_i < sub_arch_count; sub_arch_i += 1) { - const SubArchType *sub_arch = get_target_sub_arch(sub_arch_i); - if (sub_arch->arch == arch->llvm_arch) { - const char *native_str = (native_sub_arch_type == sub_arch->sub_arch) ? " (native)" : ""; - fprintf(f, " %s%s\n", sub_arch->name, native_str); - } - } + const char *sub_arch_str = (arch->sub_arch == ZigLLVM_NoSubArch) ? + "" : ZigLLVMGetSubArchTypeName(arch->sub_arch); + const char *native_str = (native_arch_type == arch->arch && native_sub_arch_type == arch->sub_arch) ? + " (native)" : ""; + fprintf(f, " %s%s%s\n", ZigLLVMGetArchTypeName(arch->arch), sub_arch_str, native_str); } fprintf(f, "\nOperating Systems:\n"); int os_count = target_os_count(); for (int i = 0; i < os_count; i += 1) { - const OsType *os_type = get_target_os(i); - const char *native_str = (native_os_type == os_type->llvm_os) ? " (native)" : ""; + ZigLLVM_OSType os_type = get_target_os(i); + const char *native_str = (native_os_type == os_type) ? " (native)" : ""; fprintf(f, " %s%s\n", get_target_os_name(os_type), native_str); } fprintf(f, "\nABIs:\n"); int environ_count = target_environ_count(); for (int i = 0; i < environ_count; i += 1) { - const EnvironmentType *environ_type = get_target_environ(i); - const char *native_str = (native_environ_type == environ_type->llvm_environment) ? " (native)" : ""; - fprintf(f, " %s%s\n", ZigLLVMGetEnvironmentTypeName(environ_type->llvm_environment), native_str); + ZigLLVM_EnvironmentType environ_type = get_target_environ(i); + const char *native_str = (native_environ_type == environ_type) ? " (native)" : ""; + fprintf(f, " %s%s\n", ZigLLVMGetEnvironmentTypeName(environ_type), native_str); } return EXIT_SUCCESS; diff --git a/src/target.cpp b/src/target.cpp index 88ae118d6..04a073493 100644 --- a/src/target.cpp +++ b/src/target.cpp @@ -9,123 +9,120 @@ #include "util.hpp" static const ArchType arch_list[] = { - {ZigLLVM_arm}, - {ZigLLVM_armeb}, - {ZigLLVM_aarch64}, - {ZigLLVM_aarch64_be}, - {ZigLLVM_bpfel}, - {ZigLLVM_bpfeb}, - {ZigLLVM_hexagon}, - {ZigLLVM_mips}, - {ZigLLVM_mipsel}, - {ZigLLVM_mips64}, - {ZigLLVM_mips64el}, - {ZigLLVM_msp430}, - {ZigLLVM_ppc}, - {ZigLLVM_ppc64}, - {ZigLLVM_ppc64le}, - {ZigLLVM_r600}, - {ZigLLVM_amdgcn}, - {ZigLLVM_sparc}, - {ZigLLVM_sparcv9}, - {ZigLLVM_sparcel}, - {ZigLLVM_systemz}, - {ZigLLVM_tce}, - {ZigLLVM_thumb}, - {ZigLLVM_thumbeb}, - {ZigLLVM_x86}, - {ZigLLVM_x86_64}, - {ZigLLVM_xcore}, - {ZigLLVM_nvptx}, - {ZigLLVM_nvptx64}, - {ZigLLVM_le32}, - {ZigLLVM_le64}, - {ZigLLVM_amdil}, - {ZigLLVM_amdil64}, - {ZigLLVM_hsail}, - {ZigLLVM_hsail64}, - {ZigLLVM_spir}, - {ZigLLVM_spir64}, - {ZigLLVM_kalimba}, - {ZigLLVM_shave}, - {ZigLLVM_wasm32}, - {ZigLLVM_wasm64}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6t2}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5te}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v4t}, + + {ZigLLVM_armeb, ZigLLVM_NoSubArch}, + {ZigLLVM_aarch64, ZigLLVM_NoSubArch}, + {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch}, + {ZigLLVM_bpfel, ZigLLVM_NoSubArch}, + {ZigLLVM_bpfeb, ZigLLVM_NoSubArch}, + {ZigLLVM_hexagon, ZigLLVM_NoSubArch}, + {ZigLLVM_mips, ZigLLVM_NoSubArch}, + {ZigLLVM_mipsel, ZigLLVM_NoSubArch}, + {ZigLLVM_mips64, ZigLLVM_NoSubArch}, + {ZigLLVM_mips64el, ZigLLVM_NoSubArch}, + {ZigLLVM_msp430, ZigLLVM_NoSubArch}, + {ZigLLVM_ppc, ZigLLVM_NoSubArch}, + {ZigLLVM_ppc64, ZigLLVM_NoSubArch}, + {ZigLLVM_ppc64le, ZigLLVM_NoSubArch}, + {ZigLLVM_r600, ZigLLVM_NoSubArch}, + {ZigLLVM_amdgcn, ZigLLVM_NoSubArch}, + {ZigLLVM_sparc, ZigLLVM_NoSubArch}, + {ZigLLVM_sparcv9, ZigLLVM_NoSubArch}, + {ZigLLVM_sparcel, ZigLLVM_NoSubArch}, + {ZigLLVM_systemz, ZigLLVM_NoSubArch}, + {ZigLLVM_tce, ZigLLVM_NoSubArch}, + {ZigLLVM_thumb, ZigLLVM_NoSubArch}, + {ZigLLVM_thumbeb, ZigLLVM_NoSubArch}, + {ZigLLVM_x86, ZigLLVM_NoSubArch}, + {ZigLLVM_x86_64, ZigLLVM_NoSubArch}, + {ZigLLVM_xcore, ZigLLVM_NoSubArch}, + {ZigLLVM_nvptx, ZigLLVM_NoSubArch}, + {ZigLLVM_nvptx64, ZigLLVM_NoSubArch}, + {ZigLLVM_le32, ZigLLVM_NoSubArch}, + {ZigLLVM_le64, ZigLLVM_NoSubArch}, + {ZigLLVM_amdil, ZigLLVM_NoSubArch}, + {ZigLLVM_amdil64, ZigLLVM_NoSubArch}, + {ZigLLVM_hsail, ZigLLVM_NoSubArch}, + {ZigLLVM_hsail64, ZigLLVM_NoSubArch}, + {ZigLLVM_spir, ZigLLVM_NoSubArch}, + {ZigLLVM_spir64, ZigLLVM_NoSubArch}, + + {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v3}, + {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v4}, + {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v5}, + + {ZigLLVM_shave, ZigLLVM_NoSubArch}, + {ZigLLVM_wasm32, ZigLLVM_NoSubArch}, + {ZigLLVM_wasm64, ZigLLVM_NoSubArch}, }; -static const SubArchType sub_arch_list[] = { - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a, "v8_1a"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8, "v8"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7, "v7"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em, "v7em"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m, "v7m"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s, "v7s"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6, "v6"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m, "v6m"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k, "v6k"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6t2, "v6t2"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5, "v5"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5te, "v5te"}, - {ZigLLVM_arm, ZigLLVM_ARMSubArch_v4t, "v4t"}, - - {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v3, "v3"}, - {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v4, "v4"}, - {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v5, "v5"}, +static const ZigLLVM_VendorType vendor_list[] = { + ZigLLVM_Apple, + ZigLLVM_PC, + ZigLLVM_SCEI, + ZigLLVM_BGP, + ZigLLVM_BGQ, + ZigLLVM_Freescale, + ZigLLVM_IBM, + ZigLLVM_ImaginationTechnologies, + ZigLLVM_MipsTechnologies, + ZigLLVM_NVIDIA, + ZigLLVM_CSR, }; -static const VendorType vendor_list[] = { - {ZigLLVM_Apple}, - {ZigLLVM_PC}, - {ZigLLVM_SCEI}, - {ZigLLVM_BGP}, - {ZigLLVM_BGQ}, - {ZigLLVM_Freescale}, - {ZigLLVM_IBM}, - {ZigLLVM_ImaginationTechnologies}, - {ZigLLVM_MipsTechnologies}, - {ZigLLVM_NVIDIA}, - {ZigLLVM_CSR}, +static const ZigLLVM_OSType os_list[] = { + ZigLLVM_UnknownOS, + ZigLLVM_CloudABI, + ZigLLVM_Darwin, + ZigLLVM_DragonFly, + ZigLLVM_FreeBSD, + ZigLLVM_IOS, + ZigLLVM_KFreeBSD, + ZigLLVM_Linux, + ZigLLVM_Lv2, + ZigLLVM_MacOSX, + ZigLLVM_NetBSD, + ZigLLVM_OpenBSD, + ZigLLVM_Solaris, + ZigLLVM_Win32, + ZigLLVM_Haiku, + ZigLLVM_Minix, + ZigLLVM_RTEMS, + ZigLLVM_NaCl, + ZigLLVM_CNK, + ZigLLVM_Bitrig, + ZigLLVM_AIX, + ZigLLVM_CUDA, + ZigLLVM_NVCL, + ZigLLVM_AMDHSA, + ZigLLVM_PS4, }; -static const OsType os_list[] = { - {ZigLLVM_UnknownOS}, - {ZigLLVM_CloudABI}, - {ZigLLVM_Darwin}, - {ZigLLVM_DragonFly}, - {ZigLLVM_FreeBSD}, - {ZigLLVM_IOS}, - {ZigLLVM_KFreeBSD}, - {ZigLLVM_Linux}, - {ZigLLVM_Lv2}, - {ZigLLVM_MacOSX}, - {ZigLLVM_NetBSD}, - {ZigLLVM_OpenBSD}, - {ZigLLVM_Solaris}, - {ZigLLVM_Win32}, - {ZigLLVM_Haiku}, - {ZigLLVM_Minix}, - {ZigLLVM_RTEMS}, - {ZigLLVM_NaCl}, - {ZigLLVM_CNK}, - {ZigLLVM_Bitrig}, - {ZigLLVM_AIX}, - {ZigLLVM_CUDA}, - {ZigLLVM_NVCL}, - {ZigLLVM_AMDHSA}, - {ZigLLVM_PS4}, -}; - -static const EnvironmentType environ_list[] = { - {ZigLLVM_GNU}, - {ZigLLVM_GNUEABI}, - {ZigLLVM_GNUEABIHF}, - {ZigLLVM_GNUX32}, - {ZigLLVM_CODE16}, - {ZigLLVM_EABI}, - {ZigLLVM_EABIHF}, - {ZigLLVM_Android}, - {ZigLLVM_MSVC}, - {ZigLLVM_Itanium}, - {ZigLLVM_Cygnus}, +static const ZigLLVM_EnvironmentType environ_list[] = { + ZigLLVM_GNU, + ZigLLVM_GNUEABI, + ZigLLVM_GNUEABIHF, + ZigLLVM_GNUX32, + ZigLLVM_CODE16, + ZigLLVM_EABI, + ZigLLVM_EABIHF, + ZigLLVM_Android, + ZigLLVM_MSVC, + ZigLLVM_Itanium, + ZigLLVM_Cygnus, }; int target_arch_count(void) { @@ -136,34 +133,28 @@ const ArchType *get_target_arch(int index) { return &arch_list[index]; } -int target_sub_arch_count(void) { - return array_length(sub_arch_list); -} -const SubArchType *get_target_sub_arch(int index) { - return &sub_arch_list[index]; -} - int target_vendor_count(void) { return array_length(vendor_list); } -const VendorType *get_target_vendor(int index) { - return &vendor_list[index]; +ZigLLVM_VendorType get_target_vendor(int index) { + return vendor_list[index]; } int target_os_count(void) { return array_length(os_list); } -const OsType *get_target_os(int index) { - return &os_list[index]; +ZigLLVM_OSType get_target_os(int index) { + return os_list[index]; } -const char *get_target_os_name(const OsType *os_type) { - return (os_type->llvm_os == ZigLLVM_UnknownOS) ? "freestanding" : ZigLLVMGetOSTypeName(os_type->llvm_os); + +const char *get_target_os_name(ZigLLVM_OSType os_type) { + return (os_type == ZigLLVM_UnknownOS) ? "freestanding" : ZigLLVMGetOSTypeName(os_type); } int target_environ_count(void) { return array_length(environ_list); } -const EnvironmentType *get_target_environ(int index) { - return &environ_list[index]; +ZigLLVM_EnvironmentType get_target_environ(int index) { + return environ_list[index]; } diff --git a/src/target.hpp b/src/target.hpp index 8167bb0da..2366c426d 100644 --- a/src/target.hpp +++ b/src/target.hpp @@ -11,41 +11,21 @@ #include struct ArchType { - ZigLLVM_ArchType llvm_arch; -}; - -struct SubArchType { - ZigLLVM_ArchType arch; // which arch it applies to + ZigLLVM_ArchType arch; ZigLLVM_SubArchType sub_arch; - const char *name; -}; - -struct VendorType { - ZigLLVM_VendorType llvm_vendor; -}; - -struct OsType { - ZigLLVM_OSType llvm_os; -}; - -struct EnvironmentType { - ZigLLVM_EnvironmentType llvm_environment; }; int target_arch_count(void); const ArchType *get_target_arch(int index); -int target_sub_arch_count(void); -const SubArchType *get_target_sub_arch(int index); - int target_vendor_count(void); -const VendorType *get_target_vendor(int index); +ZigLLVM_VendorType get_target_vendor(int index); int target_os_count(void); -const OsType *get_target_os(int index); -const char *get_target_os_name(const OsType *os_type); +ZigLLVM_OSType get_target_os(int index); +const char *get_target_os_name(ZigLLVM_OSType os_type); int target_environ_count(void); -const EnvironmentType *get_target_environ(int index); +ZigLLVM_EnvironmentType get_target_environ(int index); #endif diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 8adda0aa1..072b5c011 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -551,6 +551,45 @@ void ZigLLVMGetNativeTarget(ZigLLVM_ArchType *arch_type, ZigLLVM_SubArchType *su free(native_triple); } +const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) { + switch (sub_arch) { + case ZigLLVM_NoSubArch: + return "(none)"; + case ZigLLVM_ARMSubArch_v8_1a: + return "v8_1a"; + case ZigLLVM_ARMSubArch_v8: + return "v8"; + case ZigLLVM_ARMSubArch_v7: + return "v7"; + case ZigLLVM_ARMSubArch_v7em: + return "v7em"; + case ZigLLVM_ARMSubArch_v7m: + return "v7m"; + case ZigLLVM_ARMSubArch_v7s: + return "v7s"; + case ZigLLVM_ARMSubArch_v6: + return "v6"; + case ZigLLVM_ARMSubArch_v6m: + return "v6m"; + case ZigLLVM_ARMSubArch_v6k: + return "v6k"; + case ZigLLVM_ARMSubArch_v6t2: + return "v6t2"; + case ZigLLVM_ARMSubArch_v5: + return "v5"; + case ZigLLVM_ARMSubArch_v5te: + return "v5te"; + case ZigLLVM_ARMSubArch_v4t: + return "v4t"; + case ZigLLVM_KalimbaSubArch_v3: + return "v3"; + case ZigLLVM_KalimbaSubArch_v4: + return "v4"; + case ZigLLVM_KalimbaSubArch_v5: + return "v5"; + } +} + //------------------------------------ #include "buffer.hpp" diff --git a/src/zig_llvm.hpp b/src/zig_llvm.hpp index 2b6d02222..fbed42d29 100644 --- a/src/zig_llvm.hpp +++ b/src/zig_llvm.hpp @@ -284,6 +284,7 @@ enum ZigLLVM_ObjectFormatType { }; const char *ZigLLVMGetArchTypeName(ZigLLVM_ArchType arch); +const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch); const char *ZigLLVMGetVendorTypeName(ZigLLVM_VendorType vendor); const char *ZigLLVMGetOSTypeName(ZigLLVM_OSType os); const char *ZigLLVMGetEnvironmentTypeName(ZigLLVM_EnvironmentType environ);