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