authorgravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-01-09 17:32:16+01:00
committergravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2024-01-09 17:53:09+01:00
log55f2a6684ed8beb229143de75f3d1120c913b955
tree8f72ac8f401a95635621fdc7b40a74e751a88f0b
parent60094cc3fc979df0928c412c9fded457172f2060

update_cpu_features: Support omitting deps


1 files changed, 48 insertions(+), 17 deletions(-)

tools/update_cpu_features.zig+48-17
......@@ -16,6 +16,7 @@ const FeatureOverride = struct {
1616 flatten: bool = false,
1717 zig_name: ?[]const u8 = null,
1818 desc: ?[]const u8 = null,
19 omit_deps: []const []const u8 = &.{},
1920 extra_deps: []const []const u8 = &.{},
2021};
2122
......@@ -1114,18 +1115,8 @@ fn processOneTarget(job: Job) anyerror!void {
11141115 var deps = std.ArrayList([]const u8).init(arena);
11151116 var omit = false;
11161117 var flatten = false;
1117 const implies = kv.value_ptr.object.get("Implies").?.array;
1118 for (implies.items) |imply| {
1119 const other_key = imply.object.get("def").?.string;
1120 const other_obj = &root_map.getPtr(other_key).?.object;
1121 const other_llvm_name = other_obj.get("Name").?.string;
1122 const other_zig_name = (try llvmNameToZigNameOmit(
1123 arena,
1124 llvm_target,
1125 other_llvm_name,
1126 )) orelse continue;
1127 try deps.append(other_zig_name);
1128 }
1118 var omit_deps: []const []const u8 = &.{};
1119 var extra_deps: []const []const u8 = &.{};
11291120 for (llvm_target.feature_overrides) |feature_override| {
11301121 if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
11311122 if (feature_override.omit) {
......@@ -1142,12 +1133,30 @@ fn processOneTarget(job: Job) anyerror!void {
11421133 if (feature_override.desc) |override_desc| {
11431134 desc = override_desc;
11441135 }
1145 for (feature_override.extra_deps) |extra_dep| {
1146 try deps.append(extra_dep);
1147 }
1136 omit_deps = feature_override.omit_deps;
1137 extra_deps = feature_override.extra_deps;
11481138 break;
11491139 }
11501140 }
1141 const implies = kv.value_ptr.object.get("Implies").?.array;
1142 for (implies.items) |imply| {
1143 const other_key = imply.object.get("def").?.string;
1144 const other_obj = &root_map.getPtr(other_key).?.object;
1145 const other_llvm_name = other_obj.get("Name").?.string;
1146 const other_zig_name = (try llvmNameToZigNameOmit(
1147 arena,
1148 llvm_target,
1149 other_llvm_name,
1150 )) orelse continue;
1151 for (omit_deps) |omit_dep| {
1152 if (mem.eql(u8, other_zig_name, omit_dep)) break;
1153 } else {
1154 try deps.append(other_zig_name);
1155 }
1156 }
1157 for (extra_deps) |extra_dep| {
1158 try deps.append(extra_dep);
1159 }
11511160 const feature: Feature = .{
11521161 .llvm_name = llvm_name,
11531162 .zig_name = zig_name,
......@@ -1170,6 +1179,21 @@ fn processOneTarget(job: Job) anyerror!void {
11701179
11711180 var zig_name = try llvmNameToZigName(arena, llvm_name);
11721181 var deps = std.ArrayList([]const u8).init(arena);
1182 var omit_deps: []const []const u8 = &.{};
1183 var extra_deps: []const []const u8 = &.{};
1184 for (llvm_target.feature_overrides) |feature_override| {
1185 if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
1186 if (feature_override.omit) {
1187 continue :root_it;
1188 }
1189 if (feature_override.zig_name) |override_name| {
1190 zig_name = override_name;
1191 }
1192 omit_deps = feature_override.omit_deps;
1193 extra_deps = feature_override.extra_deps;
1194 break;
1195 }
1196 }
11731197 const features = kv.value_ptr.object.get("Features").?.array;
11741198 for (features.items) |feature| {
11751199 const feature_key = feature.object.get("def").?.string;
......@@ -1181,7 +1205,14 @@ fn processOneTarget(job: Job) anyerror!void {
11811205 llvm_target,
11821206 feature_llvm_name,
11831207 )) orelse continue;
1184 try deps.append(feature_zig_name);
1208 for (omit_deps) |omit_dep| {
1209 if (mem.eql(u8, feature_zig_name, omit_dep)) break;
1210 } else {
1211 try deps.append(feature_zig_name);
1212 }
1213 }
1214 for (extra_deps) |extra_dep| {
1215 try deps.append(extra_dep);
11851216 }
11861217 const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;
11871218 for (tune_features.items) |feature| {
......@@ -1228,7 +1259,7 @@ fn processOneTarget(job: Job) anyerror!void {
12281259 mem.sort(Feature, all_features.items, {}, featureLessThan);
12291260 mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);
12301261
1231 const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "target" });
1262 const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "Target" });
12321263 var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});
12331264 defer target_dir.close();
12341265