ability to disable llvm at compile time (#1433)

ability to disable llvm at compile time
This commit is contained in:
alex_s168
2024-09-12 13:36:00 +02:00
committed by GitHub
parent eaa419a48d
commit d376ee6671
8 changed files with 434 additions and 188 deletions

121
src/utils/hostinfo.c Normal file
View File

@@ -0,0 +1,121 @@
#include "../compiler/compiler_internal.h"
#include "hostinfo.h"
#include <stdlib.h>
static int is_le(void) {
unsigned int i = 1;
char *c;
c = (char *) &i;
return (*c == 1);
}
ArchType hostinfo_arch_type(void) {
#if defined(__x86_64__) || defined(_M_X64)
return ARCH_TYPE_X86_64;
#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
return ARCH_TYPE_X86;
#elif (defined(__arm__) && !defined(__thumb__)) || (defined(__TARGET_ARCH_ARM) && !defined(__TARGET_ARCH_THUMB)) || defined(__ARM) || defined(_M_ARM) || defined(_M_ARM_T) || defined(__ARM_ARCH)
return is_le() ? ARCH_TYPE_ARM : ARCH_TYPE_ARMB;
#elif defined(__thumb__) || defined(__TARGET_ARCH_THUMB) || defined(__ARM) || defined(_M_ARM) || defined(_M_ARM_T) || defined(__ARM_ARCH)
return is_le() ? ARCH_TYPE_THUMB : ARCH_TYPE_THUMBEB;
#elif defined(__aarch64__) || defined(_M_ARM64)
return is_le() ? ARCH_TYPE_AARCH64 : ARCH_TYPE_AARCH64_BE;
#elif defined(mips) || defined(__mips__) || defined(__mips)
return ARCH_UNSUPPORTED;
#elif defined(__sh__)
return ARCH_UNSUPPORTED;
#elif defined(__riscv) && defined(__riscv32)
return ARCH_TYPE_RISCV32;
#elif defined(__riscv) && defined(__riscv64)
return ARCH_TYPE_RISCV64;
#elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__powerpc64__)
return is_le() ? ARCH_TYPE_PPC64LE : ARCH_TYPE_PPC64;
#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
return ARCH_TYPE_PPC;
#elif defined(__sparc__) || defined(__sparc)
return ARCH_UNSUPPORTED
#else
return ARCH_UNSUPPORTED
#endif
}
static const char * llvm_arch_name(ArchType ty) {
switch (ty) {
case ARCH_TYPE_X86_64: return "x86_64";
case ARCH_TYPE_X86: return "x86";
case ARCH_TYPE_ARM: return "arm";
case ARCH_TYPE_ARMB: return "armbe";
case ARCH_TYPE_AARCH64: return "aarch64";
case ARCH_TYPE_AARCH64_BE: return "aarch64be";
case ARCH_TYPE_THUMB: return "thumb";
case ARCH_TYPE_THUMBEB: return "thumbeb";
case ARCH_TYPE_WASM64: return "wasm64";
case ARCH_TYPE_WASM32: return "wasm32";
case ARCH_TYPE_XTENSA: return "xtensa";
case ARCH_TYPE_PPC: return "ppc";
case ARCH_TYPE_PPC64: return "ppc64";
case ARCH_TYPE_PPC64LE: return "ppc64le";
case ARCH_TYPE_RISCV32: return "riscv32";
case ARCH_TYPE_RISCV64: return "riscv64";
default:
case ARCH_TYPE_UNKNOWN: return "unknown";
}
}
void hostinfo_x86_features(X86Features *cpu_features) {
#if defined(__x86_64__) || defined(_M_X64)
// TODO
#endif
}
EnvironmentType hostinfo_env_type(void) {
return ENV_TYPE_UNKNOWN;
}
OsType hostinfo_os_type(void) {
if (system("freebsd-version -k") == 0) {
return OS_TYPE_FREE_BSD;
}
if (system("uname -r") == 0) {
return OS_TYPE_LINUX;
}
if (system("cd C:/Windows") == 0) {
return OS_TYPE_WIN32;
}
return OS_TYPE_UNKNOWN;
}
static const char * llvm_os_name(OsType os) {
switch (os) {
case OS_TYPE_FREE_BSD: return "frebsd";
case OS_TYPE_LINUX: return "linux";
case OS_TYPE_WIN32: return "win32";
default: return "unknown";
}
}
VendorType hostinfo_vendor_type(void) {
return VENDOR_UNKNOWN;
}
static char triple[128];
static int triple_init = 0;
const char * hostinfo_default_triple(void) {
if (!triple_init) {
sprintf(triple, "%s-unknown-unknown-%s",
llvm_arch_name(hostinfo_arch_type()),
llvm_os_name(hostinfo_os_type()));
triple_init = 1;
}
return triple;
}
const char * hostinfo_x86_cpu_name(void) {
return "x86";
}

12
src/utils/hostinfo.h Normal file
View File

@@ -0,0 +1,12 @@
#if !defined(HOSTINFO_H) && !LLVM_AVAILABLE
#define HOSTINFO_H
void hostinfo_x86_features(X86Features *cpu_features);
ArchType hostinfo_arch_type(void);
EnvironmentType hostinfo_env_type(void);
OsType hostinfo_os_type(void);
VendorType hostinfo_vendor_type(void);
const char * hostinfo_default_triple(void);
const char * hostinfo_x86_cpu_name(void); // for example: "x86-64", "x86-64-v4"
#endif