From 231ce2da59cd93b4e8d8a90daca2d2111fc3ecf8 Mon Sep 17 00:00:00 2001 From: Jon Lipstate Date: Fri, 29 Aug 2025 12:41:38 -0700 Subject: windows i386 support --- core/testing/signal_handler_libc.odin | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'core') diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin index 4fc9552ae..961f5c7ce 100644 --- a/core/testing/signal_handler_libc.odin +++ b/core/testing/signal_handler_libc.odin @@ -24,10 +24,18 @@ import "core:terminal/ansi" @(private="file") stop_test_passed: libc.sig_atomic_t @(private="file") stop_test_alert: libc.sig_atomic_t -@(private="file", thread_local) -local_test_index: libc.sig_atomic_t -@(private="file", thread_local) -local_test_index_set: bool +when ODIN_ARCH == .i386 && ODIN_OS == .Windows { + // Thread-local storage is problematic on Windows i386 + @(private="file") + local_test_index: libc.sig_atomic_t + @(private="file") + local_test_index_set: bool +} else { + @(private="file", thread_local) + local_test_index: libc.sig_atomic_t + @(private="file", thread_local) + local_test_index_set: bool +} // Windows does not appear to have a SIGTRAP, so this is defined here, instead // of in the libc package, just so there's no confusion about it being -- cgit v1.2.3 From e0c4c5336241cb3106910bec64369888b937132b Mon Sep 17 00:00:00 2001 From: Jon Lipstate Date: Wed, 3 Sep 2025 22:32:33 -0700 Subject: add tls when we have crt --- base/runtime/core_builtin.odin | 4 ++-- core/testing/signal_handler_libc.odin | 4 ++-- src/main.cpp | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index 33b600c3e..7e96c6784 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -54,8 +54,8 @@ container_of :: #force_inline proc "contextless" (ptr: $P/^$Field_Type, $T: type when !NO_DEFAULT_TEMP_ALLOCATOR { - when ODIN_ARCH == .i386 && ODIN_OS == .Windows { - // Thread-local storage is problematic on Windows i386 + when ODIN_ARCH == .i386 && ODIN_OS == .Windows && ODIN_NO_CRT { + // Thread-local storage doesn't work on Windows i386 without CRT global_default_temp_allocator_data: Default_Temp_Allocator } else { @thread_local global_default_temp_allocator_data: Default_Temp_Allocator diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin index 961f5c7ce..7c50fbb09 100644 --- a/core/testing/signal_handler_libc.odin +++ b/core/testing/signal_handler_libc.odin @@ -24,8 +24,8 @@ import "core:terminal/ansi" @(private="file") stop_test_passed: libc.sig_atomic_t @(private="file") stop_test_alert: libc.sig_atomic_t -when ODIN_ARCH == .i386 && ODIN_OS == .Windows { - // Thread-local storage is problematic on Windows i386 +when ODIN_ARCH == .i386 && ODIN_OS == .Windows && ODIN_NO_CRT { + // Thread-local storage doesn't work on Windows i386 without CRT @(private="file") local_test_index: libc.sig_atomic_t @(private="file") diff --git a/src/main.cpp b/src/main.cpp index c4646bc9f..198706de2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3619,8 +3619,9 @@ int main(int arg_count, char const **arg_ptr) { // } // Warn about Windows i386 thread-local storage limitations - if (build_context.metrics.arch == TargetArch_i386 && build_context.metrics.os == TargetOs_windows) { - gb_printf_err("Warning: Thread-local storage is disabled on Windows i386.\n"); + if (build_context.metrics.arch == TargetArch_i386 && build_context.metrics.os == TargetOs_windows && build_context.no_crt) { + gb_printf_err("Warning: Thread-local storage is not supported on Windows i386 with -no-crt.\n"); + gb_printf_err(" Multi-threaded code will not work correctly.\n"); } // Check chosen microarchitecture. If not found or ?, print list. -- cgit v1.2.3 From 57bc45ae30736a891e4b65c7047a091e53cf60e3 Mon Sep 17 00:00:00 2001 From: Jon Lipstate Date: Wed, 3 Sep 2025 22:51:28 -0700 Subject: revert to working build --- base/runtime/core_builtin.odin | 4 ++-- core/testing/signal_handler_libc.odin | 4 ++-- src/main.cpp | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'core') diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index 7e96c6784..33b600c3e 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -54,8 +54,8 @@ container_of :: #force_inline proc "contextless" (ptr: $P/^$Field_Type, $T: type when !NO_DEFAULT_TEMP_ALLOCATOR { - when ODIN_ARCH == .i386 && ODIN_OS == .Windows && ODIN_NO_CRT { - // Thread-local storage doesn't work on Windows i386 without CRT + when ODIN_ARCH == .i386 && ODIN_OS == .Windows { + // Thread-local storage is problematic on Windows i386 global_default_temp_allocator_data: Default_Temp_Allocator } else { @thread_local global_default_temp_allocator_data: Default_Temp_Allocator diff --git a/core/testing/signal_handler_libc.odin b/core/testing/signal_handler_libc.odin index 7c50fbb09..961f5c7ce 100644 --- a/core/testing/signal_handler_libc.odin +++ b/core/testing/signal_handler_libc.odin @@ -24,8 +24,8 @@ import "core:terminal/ansi" @(private="file") stop_test_passed: libc.sig_atomic_t @(private="file") stop_test_alert: libc.sig_atomic_t -when ODIN_ARCH == .i386 && ODIN_OS == .Windows && ODIN_NO_CRT { - // Thread-local storage doesn't work on Windows i386 without CRT +when ODIN_ARCH == .i386 && ODIN_OS == .Windows { + // Thread-local storage is problematic on Windows i386 @(private="file") local_test_index: libc.sig_atomic_t @(private="file") diff --git a/src/main.cpp b/src/main.cpp index 198706de2..c4646bc9f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3619,9 +3619,8 @@ int main(int arg_count, char const **arg_ptr) { // } // Warn about Windows i386 thread-local storage limitations - if (build_context.metrics.arch == TargetArch_i386 && build_context.metrics.os == TargetOs_windows && build_context.no_crt) { - gb_printf_err("Warning: Thread-local storage is not supported on Windows i386 with -no-crt.\n"); - gb_printf_err(" Multi-threaded code will not work correctly.\n"); + if (build_context.metrics.arch == TargetArch_i386 && build_context.metrics.os == TargetOs_windows) { + gb_printf_err("Warning: Thread-local storage is disabled on Windows i386.\n"); } // Check chosen microarchitecture. If not found or ?, print list. -- cgit v1.2.3