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 {...@@ -16,6 +16,7 @@ const FeatureOverride = struct {
16 flatten: bool = false,16 flatten: bool = false,
17 zig_name: ?[]const u8 = null,17 zig_name: ?[]const u8 = null,
18 desc: ?[]const u8 = null,18 desc: ?[]const u8 = null,
19 omit_deps: []const []const u8 = &.{},
19 extra_deps: []const []const u8 = &.{},20 extra_deps: []const []const u8 = &.{},
20};21};
2122
...@@ -1114,18 +1115,8 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -1114,18 +1115,8 @@ fn processOneTarget(job: Job) anyerror!void {
1114 var deps = std.ArrayList([]const u8).init(arena);1115 var deps = std.ArrayList([]const u8).init(arena);
1115 var omit = false;1116 var omit = false;
1116 var flatten = false;1117 var flatten = false;
1117 const implies = kv.value_ptr.object.get("Implies").?.array;1118 var omit_deps: []const []const u8 = &.{};
1118 for (implies.items) |imply| {1119 var extra_deps: []const []const u8 = &.{};
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 }
1129 for (llvm_target.feature_overrides) |feature_override| {1120 for (llvm_target.feature_overrides) |feature_override| {
1130 if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {1121 if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
1131 if (feature_override.omit) {1122 if (feature_override.omit) {
...@@ -1142,12 +1133,30 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -1142,12 +1133,30 @@ fn processOneTarget(job: Job) anyerror!void {
1142 if (feature_override.desc) |override_desc| {1133 if (feature_override.desc) |override_desc| {
1143 desc = override_desc;1134 desc = override_desc;
1144 }1135 }
1145 for (feature_override.extra_deps) |extra_dep| {1136 omit_deps = feature_override.omit_deps;
1146 try deps.append(extra_dep);1137 extra_deps = feature_override.extra_deps;
1147 }
1148 break;1138 break;
1149 }1139 }
1150 }1140 }
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 }
1151 const feature: Feature = .{1160 const feature: Feature = .{
1152 .llvm_name = llvm_name,1161 .llvm_name = llvm_name,
1153 .zig_name = zig_name,1162 .zig_name = zig_name,
...@@ -1170,6 +1179,21 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -1170,6 +1179,21 @@ fn processOneTarget(job: Job) anyerror!void {
11701179
1171 var zig_name = try llvmNameToZigName(arena, llvm_name);1180 var zig_name = try llvmNameToZigName(arena, llvm_name);
1172 var deps = std.ArrayList([]const u8).init(arena);1181 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 }
1173 const features = kv.value_ptr.object.get("Features").?.array;1197 const features = kv.value_ptr.object.get("Features").?.array;
1174 for (features.items) |feature| {1198 for (features.items) |feature| {
1175 const feature_key = feature.object.get("def").?.string;1199 const feature_key = feature.object.get("def").?.string;
...@@ -1181,7 +1205,14 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -1181,7 +1205,14 @@ fn processOneTarget(job: Job) anyerror!void {
1181 llvm_target,1205 llvm_target,
1182 feature_llvm_name,1206 feature_llvm_name,
1183 )) orelse continue;1207 )) 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);
1185 }1216 }
1186 const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;1217 const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;
1187 for (tune_features.items) |feature| {1218 for (tune_features.items) |feature| {
...@@ -1228,7 +1259,7 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -1228,7 +1259,7 @@ fn processOneTarget(job: Job) anyerror!void {
1228 mem.sort(Feature, all_features.items, {}, featureLessThan);1259 mem.sort(Feature, all_features.items, {}, featureLessThan);
1229 mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);1260 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" });
1232 var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});1263 var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});
1233 defer target_dir.close();1264 defer target_dir.close();
12341265