@@ -7852,7 +7852,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
7852
7852
{
7853
7853
buf_appendf (contents,
7854
7854
" pub const SubSystem = enum {\n "
7855
- " Auto,\n "
7856
7855
" Console,\n "
7857
7856
" Windows,\n "
7858
7857
" Posix,\n "
@@ -7863,7 +7862,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
7863
7862
" EfiRuntimeDriver,\n "
7864
7863
" };\n\n " );
7865
7864
7866
- assert (TargetSubsystemAuto == 0 );
7867
7865
assert (TargetSubsystemConsole == 1 );
7868
7866
assert (TargetSubsystemWindows == 2 );
7869
7867
assert (TargetSubsystemPosix == 3 );
@@ -7891,7 +7889,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
7891
7889
7892
7890
{
7893
7891
static const char * subsystem_strings[] = {
7894
- " Auto" ,
7895
7892
" Console" ,
7896
7893
" Windows" ,
7897
7894
" Posix" ,
@@ -7901,7 +7898,19 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
7901
7898
" EfiRom" ,
7902
7899
" EfiRuntimeDriver" ,
7903
7900
};
7904
- buf_appendf (contents, " pub const subsystem = SubSystem.%s;\n " , subsystem_strings[g->subsystem ]);
7901
+
7902
+ if (g->subsystem == TargetSubsystemAuto) {
7903
+ if (g->have_c_main || g->have_pub_main ) {
7904
+ buf_appendf (contents, " pub const subsystem = SubSystem.%s;\n " , subsystem_strings[TargetSubsystemConsole - 1 ]);
7905
+ } else if (g->have_winmain || g->have_winmain_crt_startup ) {
7906
+ buf_appendf (contents, " pub const subsystem = SubSystem.%s;\n " , subsystem_strings[TargetSubsystemWindows - 1 ]);
7907
+ } else if (g->have_dllmain_crt_startup || g->out_type == OutTypeLib) {
7908
+ buf_appendf (contents, " pub const subsystem = null;\n " );
7909
+ }
7910
+ } else {
7911
+ buf_appendf (contents, " pub const subsystem = SubSystem.%s;\n " , subsystem_strings[g->subsystem - 1 ]);
7912
+ }
7913
+
7905
7914
}
7906
7915
7907
7916
if (g->is_test_build ) {
@@ -7947,7 +7956,7 @@ static Error define_builtin_compile_vars(CodeGen *g) {
7947
7956
cache_bool (&cache_hash, g->have_err_ret_tracing );
7948
7957
cache_bool (&cache_hash, g->libc_link_lib != nullptr );
7949
7958
cache_bool (&cache_hash, g->valgrind_support );
7950
- cache_int (&cache_hash, g->subsystem );
7959
+ cache_int (&cache_hash, g->subsystem - 1 );
7951
7960
7952
7961
Buf digest = BUF_INIT;
7953
7962
buf_resize (&digest, 0 );
0 commit comments