diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-07-12 18:12:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-12 18:12:27 -0400 |
| commit | 107e57484f603773d0f6b404873bdae92626749b (patch) | |
| tree | a6dd4c7fb6c0f4875e8dbf3fc60d20d0a19b1aef /src/target.cpp | |
| parent | 4e58855a4a45981337722be3ffe321bb84825992 (diff) | |
| parent | 39b850c6cfd12e48bcbac8ef31f467ac7b3275b8 (diff) | |
| download | zig-107e57484f603773d0f6b404873bdae92626749b.tar.gz zig-107e57484f603773d0f6b404873bdae92626749b.zip | |
Merge pull request #2868 from ziglang/windows-libc
provide a libc for windows using mingw-w64
Diffstat (limited to 'src/target.cpp')
| -rw-r--r-- | src/target.cpp | 37 |
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: |
