| ... | ... | @@ -9155,13 +9155,15 @@ static void detect_libc(CodeGen *g) { |
| 9155 | 9155 | } |
| 9156 | 9156 | |
| 9157 | 9157 | // does not add the "cc" arg |
| 9158 | | void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_path, bool translate_c) { |
| 9158 | void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_path, |
| 9159 | bool translate_c, CSourceKind source_kind) |
| 9160 | { |
| 9159 | 9161 | if (translate_c) { |
| 9160 | 9162 | args.append("-x"); |
| 9161 | 9163 | args.append("c"); |
| 9162 | 9164 | } |
| 9163 | 9165 | |
| 9164 | | if (out_dep_path != nullptr) { |
| 9166 | if (source_kind != CSourceKindAsm && out_dep_path != nullptr) { |
| 9165 | 9167 | args.append("-MD"); |
| 9166 | 9168 | args.append("-MV"); |
| 9167 | 9169 | args.append("-MF"); |
| ... | ... | @@ -9176,10 +9178,12 @@ void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_pa |
| 9176 | 9178 | } |
| 9177 | 9179 | |
| 9178 | 9180 | if (translate_c) { |
| 9179 | | // this gives us access to preprocessing entities, presumably at |
| 9180 | | // the cost of performance |
| 9181 | | args.append("-Xclang"); |
| 9182 | | args.append("-detailed-preprocessing-record"); |
| 9181 | if (source_kind == CSourceKindC) { |
| 9182 | // this gives us access to preprocessing entities, presumably at |
| 9183 | // the cost of performance |
| 9184 | args.append("-Xclang"); |
| 9185 | args.append("-detailed-preprocessing-record"); |
| 9186 | } |
| 9183 | 9187 | } else { |
| 9184 | 9188 | switch (g->err_color) { |
| 9185 | 9189 | case ErrColorAuto: |
| ... | ... | @@ -9212,26 +9216,29 @@ void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_pa |
| 9212 | 9216 | args.append(include_dir); |
| 9213 | 9217 | } |
| 9214 | 9218 | |
| 9215 | | if (g->zig_target->is_native) { |
| 9216 | | if (target_supports_clang_march_native(g->zig_target)) { |
| 9217 | | args.append("-march=native"); |
| 9218 | | } |
| 9219 | | } else { |
| 9220 | | args.append("-target"); |
| 9221 | | args.append(buf_ptr(&g->llvm_triple_str)); |
| 9219 | args.append("-target"); |
| 9220 | args.append(buf_ptr(&g->llvm_triple_str)); |
| 9222 | 9221 | |
| 9223 | | if (g->zig_target->llvm_cpu_name != nullptr) { |
| 9224 | | args.append("-Xclang"); |
| 9225 | | args.append("-target-cpu"); |
| 9226 | | args.append("-Xclang"); |
| 9227 | | args.append(g->zig_target->llvm_cpu_name); |
| 9228 | | } |
| 9229 | | if (g->zig_target->llvm_cpu_features != nullptr) { |
| 9230 | | args.append("-Xclang"); |
| 9231 | | args.append("-target-feature"); |
| 9232 | | args.append("-Xclang"); |
| 9233 | | args.append(g->zig_target->llvm_cpu_features); |
| 9234 | | } |
| 9222 | switch (source_kind) { |
| 9223 | case CSourceKindC: |
| 9224 | if (g->zig_target->llvm_cpu_name != nullptr) { |
| 9225 | args.append("-Xclang"); |
| 9226 | args.append("-target-cpu"); |
| 9227 | args.append("-Xclang"); |
| 9228 | args.append(g->zig_target->llvm_cpu_name); |
| 9229 | } |
| 9230 | if (g->zig_target->llvm_cpu_features != nullptr) { |
| 9231 | args.append("-Xclang"); |
| 9232 | args.append("-target-feature"); |
| 9233 | args.append("-Xclang"); |
| 9234 | args.append(g->zig_target->llvm_cpu_features); |
| 9235 | } |
| 9236 | break; |
| 9237 | case CSourceKindAsm: |
| 9238 | break; |
| 9239 | } |
| 9240 | for (size_t i = 0; i < g->zig_target->llvm_cpu_features_asm_len; i += 1) { |
| 9241 | args.append(g->zig_target->llvm_cpu_features_asm_ptr[i]); |
| 9235 | 9242 | } |
| 9236 | 9243 | |
| 9237 | 9244 | if (g->zig_target->os == OsFreestanding) { |
| ... | ... | @@ -9377,7 +9384,7 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) { |
| 9377 | 9384 | } |
| 9378 | 9385 | |
| 9379 | 9386 | ZigList<const char *> clang_argv = {0}; |
| 9380 | | add_cc_args(g, clang_argv, out_dep_path_cstr, true); |
| 9387 | add_cc_args(g, clang_argv, out_dep_path_cstr, true, CSourceKindC); |
| 9381 | 9388 | |
| 9382 | 9389 | clang_argv.append(buf_ptr(full_path)); |
| 9383 | 9390 | |
| ... | ... | @@ -9714,6 +9721,15 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) { |
| 9714 | 9721 | Buf *c_source_basename = buf_alloc(); |
| 9715 | 9722 | os_path_split(c_source_file, nullptr, c_source_basename); |
| 9716 | 9723 | |
| 9724 | CSourceKind c_source_kind; |
| 9725 | if (buf_ends_with_str(c_source_basename, ".s") || |
| 9726 | buf_ends_with_str(c_source_basename, ".S")) |
| 9727 | { |
| 9728 | c_source_kind = CSourceKindAsm; |
| 9729 | } else { |
| 9730 | c_source_kind = CSourceKindC; |
| 9731 | } |
| 9732 | |
| 9717 | 9733 | Stage2ProgressNode *child_prog_node = stage2_progress_start(g->sub_progress_node, buf_ptr(c_source_basename), |
| 9718 | 9734 | buf_len(c_source_basename), 0); |
| 9719 | 9735 | |
| ... | ... | @@ -9786,7 +9802,7 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) { |
| 9786 | 9802 | } |
| 9787 | 9803 | |
| 9788 | 9804 | Buf *out_dep_path = buf_sprintf("%s.d", buf_ptr(out_obj_path)); |
| 9789 | | add_cc_args(g, args, buf_ptr(out_dep_path), false); |
| 9805 | add_cc_args(g, args, buf_ptr(out_dep_path), false, c_source_kind); |
| 9790 | 9806 | |
| 9791 | 9807 | args.append("-o"); |
| 9792 | 9808 | args.append(buf_ptr(out_obj_path)); |