aboutsummaryrefslogtreecommitdiff
path: root/base/runtime/entry_windows.odin
diff options
context:
space:
mode:
authorJon Lipstate <jon@lipstate.com>2025-08-29 12:41:38 -0700
committerJon Lipstate <jon@lipstate.com>2025-08-29 12:41:38 -0700
commit231ce2da59cd93b4e8d8a90daca2d2111fc3ecf8 (patch)
tree53a7fd84f67213318f659f02b4d03d6f7acdac45 /base/runtime/entry_windows.odin
parentf926c1861f5346d23b1b60f6b5970f598d3584b3 (diff)
windows i386 support
Diffstat (limited to 'base/runtime/entry_windows.odin')
-rw-r--r--base/runtime/entry_windows.odin14
1 files changed, 13 insertions, 1 deletions
diff --git a/base/runtime/entry_windows.odin b/base/runtime/entry_windows.odin
index 8eb4cc7d1..dc8e9b82c 100644
--- a/base/runtime/entry_windows.odin
+++ b/base/runtime/entry_windows.odin
@@ -28,7 +28,19 @@ when ODIN_BUILD_MODE == .Dynamic {
return true
}
} else when !ODIN_TEST && !ODIN_NO_ENTRY_POINT {
- when ODIN_ARCH == .i386 || ODIN_NO_CRT {
+ when ODIN_ARCH == .i386 && !ODIN_NO_CRT {
+ // Windows i386 with CRT: libcmt provides mainCRTStartup which calls _main
+ // Note: "c" calling convention adds underscore prefix automatically on i386
+ @(link_name="main", linkage="strong", require)
+ main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 {
+ args__ = argv[:argc]
+ context = default_context()
+ #force_no_inline _startup_runtime()
+ intrinsics.__entry_point()
+ #force_no_inline _cleanup_runtime()
+ return 0
+ }
+ } else when ODIN_NO_CRT {
@(link_name="mainCRTStartup", linkage="strong", require)
mainCRTStartup :: proc "system" () -> i32 {
context = default_context()