From f15ec9a59b777a2b7998518858f11f5da0dfcb2d Mon Sep 17 00:00:00 2001 From: emekoi Date: Thu, 1 Aug 2019 17:51:53 -0500 Subject: implemented runtime abi detetction for windows --- src/target.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/target.cpp') diff --git a/src/target.cpp b/src/target.cpp index 7bb248a35f..d34254f1d1 100644 --- a/src/target.cpp +++ b/src/target.cpp @@ -506,7 +506,7 @@ void get_native_target(ZigTarget *target) { &oformat); target->os = get_zig_os_type(os_type); target->is_native = true; - if (target->abi == ZigLLVM_UnknownEnvironment) { + if (target->os == OsWindows || target->abi == ZigLLVM_UnknownEnvironment) { target->abi = target_default_abi(target->arch, target->os); } if (target_is_glibc(target)) { @@ -1504,6 +1504,16 @@ bool target_is_single_threaded(const ZigTarget *target) { return target_is_wasm(target); } +static ZigLLVM_EnvironmentType target_get_win32_abi() { + FILE* files[] = { stdin, stdout, stderr, nullptr }; + for (int i = 0; files[i] != nullptr; i++) { + if (os_is_cygwin_pty(_fileno(files[i]))) { + return ZigLLVM_GNU; + } + } + return ZigLLVM_MSVC; +} + ZigLLVM_EnvironmentType target_default_abi(ZigLLVM_ArchType arch, Os os) { if (arch == ZigLLVM_wasm32 || arch == ZigLLVM_wasm64) { return ZigLLVM_Musl; @@ -1544,8 +1554,9 @@ ZigLLVM_EnvironmentType target_default_abi(ZigLLVM_ArchType arch, Os os) { case OsHurd: return ZigLLVM_GNU; case OsUefi: - case OsWindows: return ZigLLVM_MSVC; + case OsWindows: + return target_get_win32_abi(); case OsLinux: case OsWASI: return ZigLLVM_Musl; -- cgit v1.2.3