| ... | @@ -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 | }; |
| 21 | | 22 | |
| ... | @@ -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 { |
| 1170 | | 1179 | |
| 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); |
| 1230 | | 1261 | |
| 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(); |
| 1234 | | 1265 | |