| ... | @@ -455,6 +455,7 @@ static int main0(int argc, char **argv) { | ... | @@ -455,6 +455,7 @@ static int main0(int argc, char **argv) { |
| 455 | CodeModel code_model = CodeModelDefault; | 455 | CodeModel code_model = CodeModelDefault; |
| 456 | const char *override_soname = nullptr; | 456 | const char *override_soname = nullptr; |
| 457 | bool only_preprocess = false; | 457 | bool only_preprocess = false; |
| | 458 | bool ensure_libc_on_non_freestanding = false; |
| 458 | | 459 | |
| 459 | ZigList<const char *> llvm_argv = {0}; | 460 | ZigList<const char *> llvm_argv = {0}; |
| 460 | llvm_argv.append("zig (LLVM option parsing)"); | 461 | llvm_argv.append("zig (LLVM option parsing)"); |
| ... | @@ -582,11 +583,11 @@ static int main0(int argc, char **argv) { | ... | @@ -582,11 +583,11 @@ static int main0(int argc, char **argv) { |
| 582 | } else if (argc >= 2 && strcmp(argv[1], "cc") == 0) { | 583 | } else if (argc >= 2 && strcmp(argv[1], "cc") == 0) { |
| 583 | emit_h = false; | 584 | emit_h = false; |
| 584 | strip = true; | 585 | strip = true; |
| | 586 | ensure_libc_on_non_freestanding = true; |
| 585 | | 587 | |
| 586 | bool c_arg = false; | 588 | bool c_arg = false; |
| 587 | Stage2ClangArgIterator it; | 589 | Stage2ClangArgIterator it; |
| 588 | stage2_clang_arg_iterator(&it, argc, argv); | 590 | stage2_clang_arg_iterator(&it, argc, argv); |
| 589 | bool nostdlib = false; | | |
| 590 | bool is_shared_lib = false; | 591 | bool is_shared_lib = false; |
| 591 | ZigList<Buf *> linker_args = {}; | 592 | ZigList<Buf *> linker_args = {}; |
| 592 | while (it.has_next) { | 593 | while (it.has_next) { |
| ... | @@ -645,7 +646,7 @@ static int main0(int argc, char **argv) { | ... | @@ -645,7 +646,7 @@ static int main0(int argc, char **argv) { |
| 645 | want_pic = WantPICDisabled; | 646 | want_pic = WantPICDisabled; |
| 646 | break; | 647 | break; |
| 647 | case Stage2ClangArgNoStdLib: | 648 | case Stage2ClangArgNoStdLib: |
| 648 | nostdlib = true; | 649 | ensure_libc_on_non_freestanding = false; |
| 649 | break; | 650 | break; |
| 650 | case Stage2ClangArgShared: | 651 | case Stage2ClangArgShared: |
| 651 | is_dynamic = true; | 652 | is_dynamic = true; |
| ... | @@ -772,10 +773,6 @@ static int main0(int argc, char **argv) { | ... | @@ -772,10 +773,6 @@ static int main0(int argc, char **argv) { |
| 772 | build_mode = BuildModeSafeRelease; | 773 | build_mode = BuildModeSafeRelease; |
| 773 | } | 774 | } |
| 774 | | 775 | |
| 775 | if (!nostdlib && !have_libc) { | | |
| 776 | have_libc = true; | | |
| 777 | link_libs.append("c"); | | |
| 778 | } | | |
| 779 | if (only_preprocess) { | 776 | if (only_preprocess) { |
| 780 | cmd = CmdBuild; | 777 | cmd = CmdBuild; |
| 781 | out_type = OutTypeObj; | 778 | out_type = OutTypeObj; |
| ... | @@ -1216,6 +1213,11 @@ static int main0(int argc, char **argv) { | ... | @@ -1216,6 +1213,11 @@ static int main0(int argc, char **argv) { |
| 1216 | return print_error_usage(arg0); | 1213 | return print_error_usage(arg0); |
| 1217 | } | 1214 | } |
| 1218 | | 1215 | |
| | 1216 | if (!have_libc && ensure_libc_on_non_freestanding && target.os != OsFreestanding) { |
| | 1217 | have_libc = true; |
| | 1218 | link_libs.append("c"); |
| | 1219 | } |
| | 1220 | |
| 1219 | Buf zig_triple_buf = BUF_INIT; | 1221 | Buf zig_triple_buf = BUF_INIT; |
| 1220 | target_triple_zig(&zig_triple_buf, &target); | 1222 | target_triple_zig(&zig_triple_buf, &target); |
| 1221 | | 1223 | |