aboutsummaryrefslogtreecommitdiff
path: root/src/target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/target.cpp')
-rw-r--r--src/target.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/target.cpp b/src/target.cpp
index 5cbf8c4de1..56c9a72c8f 100644
--- a/src/target.cpp
+++ b/src/target.cpp
@@ -753,7 +753,16 @@ void init_all_targets(void) {
LLVMInitializeAllAsmParsers();
}
-void get_target_triple(Buf *triple, const ZigTarget *target) {
+void target_triple_zig(Buf *triple, const ZigTarget *target) {
+ buf_resize(triple, 0);
+ buf_appendf(triple, "%s%s-%s-%s",
+ ZigLLVMGetArchTypeName(target->arch),
+ ZigLLVMGetSubArchTypeName(target->sub_arch),
+ ZigLLVMGetOSTypeName(get_llvm_os_type(target->os)),
+ ZigLLVMGetEnvironmentTypeName(target->abi));
+}
+
+void target_triple_llvm(Buf *triple, const ZigTarget *target) {
buf_resize(triple, 0);
buf_appendf(triple, "%s%s-%s-%s-%s",
ZigLLVMGetArchTypeName(target->arch),
@@ -984,7 +993,9 @@ bool target_allows_addr_zero(const ZigTarget *target) {
}
const char *target_o_file_ext(const ZigTarget *target) {
- if (target->abi == ZigLLVM_MSVC || target->os == OsWindows || target->os == OsUefi) {
+ if (target->abi == ZigLLVM_MSVC ||
+ (target->os == OsWindows && !target_abi_is_gnu(target->abi)) ||
+ target->os == OsUefi) {
return ".obj";
} else {
return ".o";
@@ -1012,7 +1023,10 @@ const char *target_exe_file_ext(const ZigTarget *target) {
}
const char *target_lib_file_prefix(const ZigTarget *target) {
- if (target->os == OsWindows || target->os == OsUefi || target_is_wasm(target)) {
+ if ((target->os == OsWindows && !target_abi_is_gnu(target->abi)) ||
+ target->os == OsUefi ||
+ target_is_wasm(target))
+ {
return "";
} else {
return "lib";
@@ -1027,7 +1041,11 @@ const char *target_lib_file_ext(const ZigTarget *target, bool is_static,
}
if (target->os == OsWindows || target->os == OsUefi) {
if (is_static) {
- return ".lib";
+ if (target->os == OsWindows && target_abi_is_gnu(target->abi)) {
+ return ".a";
+ } else {
+ return ".lib";
+ }
} else {
return ".dll";
}
@@ -1459,8 +1477,8 @@ ZigLLVM_EnvironmentType target_default_abi(ZigLLVM_ArchType arch, Os os) {
case OsKFreeBSD:
case OsNetBSD:
case OsHurd:
- return ZigLLVM_GNU;
case OsWindows:
+ return ZigLLVM_GNU;
case OsUefi:
return ZigLLVM_MSVC;
case OsLinux:
@@ -1504,18 +1522,23 @@ struct AvailableLibC {
static const AvailableLibC libcs_available[] = {
{ZigLLVM_aarch64_be, OsLinux, ZigLLVM_GNU},
{ZigLLVM_aarch64_be, OsLinux, ZigLLVM_Musl},
+ {ZigLLVM_aarch64_be, OsWindows, ZigLLVM_GNU},
{ZigLLVM_aarch64, OsLinux, ZigLLVM_GNU},
{ZigLLVM_aarch64, OsLinux, ZigLLVM_MuslEABI},
+ {ZigLLVM_aarch64, OsWindows, ZigLLVM_GNU},
{ZigLLVM_armeb, OsLinux, ZigLLVM_GNUEABI},
{ZigLLVM_armeb, OsLinux, ZigLLVM_GNUEABIHF},
{ZigLLVM_armeb, OsLinux, ZigLLVM_MuslEABI},
{ZigLLVM_armeb, OsLinux, ZigLLVM_MuslEABIHF},
+ {ZigLLVM_armeb, OsWindows, ZigLLVM_GNU},
{ZigLLVM_arm, OsLinux, ZigLLVM_GNUEABI},
{ZigLLVM_arm, OsLinux, ZigLLVM_GNUEABIHF},
{ZigLLVM_arm, OsLinux, ZigLLVM_MuslEABI},
{ZigLLVM_arm, OsLinux, ZigLLVM_MuslEABIHF},
+ {ZigLLVM_arm, OsWindows, ZigLLVM_GNU},
{ZigLLVM_x86, OsLinux, ZigLLVM_GNU},
{ZigLLVM_x86, OsLinux, ZigLLVM_Musl},
+ {ZigLLVM_x86, OsWindows, ZigLLVM_GNU},
{ZigLLVM_mips64el, OsLinux, ZigLLVM_GNUABI64},
{ZigLLVM_mips64el, OsLinux, ZigLLVM_GNUABIN32},
{ZigLLVM_mips64el, OsLinux, ZigLLVM_Musl},
@@ -1543,6 +1566,7 @@ static const AvailableLibC libcs_available[] = {
{ZigLLVM_x86_64, OsLinux, ZigLLVM_GNU},
{ZigLLVM_x86_64, OsLinux, ZigLLVM_GNUX32},
{ZigLLVM_x86_64, OsLinux, ZigLLVM_Musl},
+ {ZigLLVM_x86_64, OsWindows, ZigLLVM_GNU},
};
bool target_can_build_libc(const ZigTarget *target) {
@@ -1558,6 +1582,9 @@ bool target_can_build_libc(const ZigTarget *target) {
}
const char *target_libc_generic_name(const ZigTarget *target) {
+ if (target->os == OsWindows) {
+ return "mingw";
+ }
switch (target->abi) {
case ZigLLVM_GNU:
case ZigLLVM_GNUABIN32: