| author | |
| committer | |
| log | b55bc5eb266f2dc62cf520e8b572893adf5f979c |
| tree | 98620a5ddedb9bbfdf39c1d3776279dc536b3f00 |
| parent | 0e7461d4a34272a94acba20b09aaee283e88a806 |
5 files changed, 13 insertions(+), 3 deletions(-)
lib/std/start.zig+1-1| ... | ... | @@ -21,7 +21,7 @@ comptime { |
| 21 | 21 | @export(main, .{ .name = "main", .linkage = .Weak }); |
| 22 | 22 | } |
| 23 | 23 | } else if (builtin.os == .windows) { |
| 24 | if (!@hasDecl(root, "WinMain") and !@hasDecl(root, "WinMainCRTStartup")) { | |
| 24 | if (!@hasDecl(root, "WinMain") and !@hasDecl(root, "WinMainCRTStartup") and !@hasDecl(root, "wWinMain") and !@hasDecl(root, "wWinMainCRTStartup")) { | |
| 25 | 25 | @export(WinMainCRTStartup, .{ .name = "WinMainCRTStartup" }); |
| 26 | 26 | } |
| 27 | 27 | } else if (builtin.os == .uefi) { |
src/all_types.hpp+2| ... | ... | @@ -2175,7 +2175,9 @@ struct CodeGen { |
| 2175 | 2175 | bool is_big_endian; |
| 2176 | 2176 | bool have_c_main; |
| 2177 | 2177 | bool have_winmain; |
| 2178 | bool have_wwinmain; | |
| 2178 | 2179 | bool have_winmain_crt_startup; |
| 2180 | bool have_wwinmain_crt_startup; | |
| 2179 | 2181 | bool have_dllmain_crt_startup; |
| 2180 | 2182 | bool have_err_ret_tracing; |
| 2181 | 2183 | bool link_eh_frame_hdr; |
src/analyze.cpp+4| ... | ... | @@ -3419,8 +3419,12 @@ void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, const char *symbol_name, G |
| 3419 | 3419 | } else if (cc == CallingConventionStdcall && g->zig_target->os == OsWindows) { |
| 3420 | 3420 | if (strcmp(symbol_name, "WinMain") == 0) { |
| 3421 | 3421 | g->have_winmain = true; |
| 3422 | } else if (strcmp(symbol_name, "wWinMain") == 0) { | |
| 3423 | g->have_wwinmain = true; | |
| 3422 | 3424 | } else if (strcmp(symbol_name, "WinMainCRTStartup") == 0) { |
| 3423 | 3425 | g->have_winmain_crt_startup = true; |
| 3426 | } else if (strcmp(symbol_name, "wWinMainCRTStartup") == 0) { | |
| 3427 | g->have_wwinmain_crt_startup = true; | |
| 3424 | 3428 | } else if (strcmp(symbol_name, "DllMainCRTStartup") == 0) { |
| 3425 | 3429 | g->have_dllmain_crt_startup = true; |
| 3426 | 3430 | } |
src/codegen.cpp+2-2| ... | ... | @@ -8340,9 +8340,9 @@ TargetSubsystem detect_subsystem(CodeGen *g) { |
| 8340 | 8340 | if (g->zig_target->os == OsWindows) { |
| 8341 | 8341 | if (g->have_dllmain_crt_startup || (g->out_type == OutTypeLib && g->is_dynamic)) |
| 8342 | 8342 | return TargetSubsystemAuto; |
| 8343 | if (g->have_c_main || g->is_test_build || g->have_winmain_crt_startup) | |
| 8343 | if (g->have_c_main || g->is_test_build || g->have_winmain_crt_startup || g->have_wwinmain_crt_startup) | |
| 8344 | 8344 | return TargetSubsystemConsole; |
| 8345 | if (g->have_winmain) | |
| 8345 | if (g->have_winmain || g->have_wwinmain) | |
| 8346 | 8346 | return TargetSubsystemWindows; |
| 8347 | 8347 | } else if (g->zig_target->os == OsUefi) { |
| 8348 | 8348 | return TargetSubsystemEfiApplication; |
src/link.cpp+4| ... | ... | @@ -2205,6 +2205,10 @@ static void add_win_link_args(LinkJob *lj, bool is_library, bool *have_windows_d |
| 2205 | 2205 | if (!is_library) { |
| 2206 | 2206 | if (lj->codegen->have_winmain) { |
| 2207 | 2207 | lj->args.append("-ENTRY:WinMain"); |
| 2208 | } else if (lj->codegen->have_wwinmain) { | |
| 2209 | lj->args.append("-ENTRY:wWinMain"); | |
| 2210 | } else if (lj->codegen->have_wwinmain_crt_startup) { | |
| 2211 | lj->args.append("-ENTRY:wWinMainCRTStartup"); | |
| 2208 | 2212 | } else { |
| 2209 | 2213 | lj->args.append("-ENTRY:WinMainCRTStartup"); |
| 2210 | 2214 | } |