Commit f313ab18ae

Andrew Kelley <andrew@ziglang.org>
2020-03-25 17:28:41
zig cc: freestanding target implies -nostdlib
1 parent 6cbe589
Changed files (1)
src/main.cpp
@@ -455,6 +455,7 @@ static int main0(int argc, char **argv) {
     CodeModel code_model = CodeModelDefault;
     const char *override_soname = nullptr;
     bool only_preprocess = false;
+    bool ensure_libc_on_non_freestanding = false;
 
     ZigList<const char *> llvm_argv = {0};
     llvm_argv.append("zig (LLVM option parsing)");
@@ -582,11 +583,11 @@ static int main0(int argc, char **argv) {
     } else if (argc >= 2 && strcmp(argv[1], "cc") == 0) {
         emit_h = false;
         strip = true;
+        ensure_libc_on_non_freestanding = true;
 
         bool c_arg = false;
         Stage2ClangArgIterator it;
         stage2_clang_arg_iterator(&it, argc, argv);
-        bool nostdlib = false;
         bool is_shared_lib = false;
         ZigList<Buf *> linker_args = {};
         while (it.has_next) {
@@ -645,7 +646,7 @@ static int main0(int argc, char **argv) {
                     want_pic = WantPICDisabled;
                     break;
                 case Stage2ClangArgNoStdLib:
-                    nostdlib = true;
+                    ensure_libc_on_non_freestanding = false;
                     break;
                 case Stage2ClangArgShared:
                     is_dynamic = true;
@@ -772,10 +773,6 @@ static int main0(int argc, char **argv) {
             build_mode = BuildModeSafeRelease;
         }
 
-        if (!nostdlib && !have_libc) {
-            have_libc = true;
-            link_libs.append("c");
-        }
         if (only_preprocess) {
             cmd = CmdBuild;
             out_type = OutTypeObj;
@@ -1216,6 +1213,11 @@ static int main0(int argc, char **argv) {
         return print_error_usage(arg0);
     }
 
+    if (!have_libc && ensure_libc_on_non_freestanding && target.os != OsFreestanding) {
+        have_libc = true;
+        link_libs.append("c");
+    }
+
     Buf zig_triple_buf = BUF_INIT;
     target_triple_zig(&zig_triple_buf, &target);