authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-09-14 22:57:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-09-14 22:57:08-07:00
log1ad60c43868212e3c4162196686f3017f80efc02
tree9cc78d6fbc378e1ab68fd182973ec9a149c1a1b1
parent5d8fec3d4cdfa58b54756c4368bdb3e76d21380f

integrate target features into building C source files


2 files changed, 14 insertions(+), 14 deletions(-)

BRANCH_TODO-1
...@@ -1,4 +1,3 @@...@@ -1,4 +1,3 @@
1 * integrate target features into building C source files
2 * integrate target features into building assembly code1 * integrate target features into building assembly code
3 * handle .d files from c objects2 * handle .d files from c objects
4 * glibc .so files3 * glibc .so files
src-self-hosted/Compilation.zig+14-13
...@@ -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 features1212
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/50171214 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)}));