| ... | @@ -1209,19 +1209,20 @@ fn addCCArgs( | ... | @@ -1209,19 +1209,20 @@ fn addCCArgs( |
| 1209 | "-Xclang", "-target-cpu", "-Xclang", llvm_name, | 1209 | "-Xclang", "-target-cpu", "-Xclang", llvm_name, |
| 1210 | }); | 1210 | }); |
| 1211 | } | 1211 | } |
| 1212 | // TODO CLI args for target features | 1212 | |
| 1213 | //if (g->zig_target->llvm_cpu_features != nullptr) { | 1213 | // It would be really nice if there was a more compact way to communicate this info to Clang. |
| 1214 | // // https://github.com/ziglang/zig/issues/5017 | 1214 | const all_features_list = target.cpu.arch.allFeaturesList(); |
| 1215 | // SplitIterator it = memSplit(str(g->zig_target->llvm_cpu_features), str(",")); | 1215 | try argv.ensureCapacity(argv.items.len + all_features_list.len * 4); |
| 1216 | // Optional<Slice<uint8_t>> flag = SplitIterator_next(&it); | 1216 | for (all_features_list) |feature, index_usize| { |
| 1217 | // while (flag.is_some) { | 1217 | const index = @intCast(std.Target.Cpu.Feature.Set.Index, index_usize); |
| 1218 | // try argv.append("-Xclang"); | 1218 | const is_enabled = target.cpu.features.isEnabled(index); |
| 1219 | // try argv.append("-target-feature"); | 1219 | |
| 1220 | // try argv.append("-Xclang"); | 1220 | if (feature.llvm_name) |llvm_name| { |
| 1221 | // try argv.append(buf_ptr(buf_create_from_slice(flag.value))); | 1221 | argv.appendSliceAssumeCapacity(&[_][]const u8{ "-Xclang", "-target-feature", "-Xclang" }); |
| 1222 | // flag = SplitIterator_next(&it); | 1222 | const plus_or_minus = "-+"[@boolToInt(is_enabled)]; |
| 1223 | // } | 1223 | try argv.append(try std.fmt.allocPrint(arena, "{c}{s}", .{ plus_or_minus, llvm_name })); |
| 1224 | //} | 1224 | } |
| | 1225 | } |
| 1225 | const mcmodel = comp.bin_file.options.machine_code_model; | 1226 | const mcmodel = comp.bin_file.options.machine_code_model; |
| 1226 | if (mcmodel != .default) { | 1227 | if (mcmodel != .default) { |
| 1227 | try argv.append(try std.fmt.allocPrint(arena, "-mcmodel={}", .{@tagName(mcmodel)})); | 1228 | try argv.append(try std.fmt.allocPrint(arena, "-mcmodel={}", .{@tagName(mcmodel)})); |