| ... | ... | @@ -16,6 +16,7 @@ const FeatureOverride = struct { |
| 16 | 16 | flatten: bool = false, |
| 17 | 17 | zig_name: ?[]const u8 = null, |
| 18 | 18 | desc: ?[]const u8 = null, |
| 19 | omit_deps: []const []const u8 = &.{}, |
| 19 | 20 | extra_deps: []const []const u8 = &.{}, |
| 20 | 21 | }; |
| 21 | 22 | |
| ... | ... | @@ -1114,18 +1115,8 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1114 | 1115 | var deps = std.ArrayList([]const u8).init(arena); |
| 1115 | 1116 | var omit = false; |
| 1116 | 1117 | 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 = &.{}; |
| 1129 | 1120 | for (llvm_target.feature_overrides) |feature_override| { |
| 1130 | 1121 | if (mem.eql(u8, llvm_name, feature_override.llvm_name)) { |
| 1131 | 1122 | if (feature_override.omit) { |
| ... | ... | @@ -1142,12 +1133,30 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1142 | 1133 | if (feature_override.desc) |override_desc| { |
| 1143 | 1134 | desc = override_desc; |
| 1144 | 1135 | } |
| 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; |
| 1148 | 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 | 1160 | const feature: Feature = .{ |
| 1152 | 1161 | .llvm_name = llvm_name, |
| 1153 | 1162 | .zig_name = zig_name, |
| ... | ... | @@ -1170,6 +1179,21 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1170 | 1179 | |
| 1171 | 1180 | var zig_name = try llvmNameToZigName(arena, llvm_name); |
| 1172 | 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 | 1197 | const features = kv.value_ptr.object.get("Features").?.array; |
| 1174 | 1198 | for (features.items) |feature| { |
| 1175 | 1199 | const feature_key = feature.object.get("def").?.string; |
| ... | ... | @@ -1181,7 +1205,14 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1181 | 1205 | llvm_target, |
| 1182 | 1206 | feature_llvm_name, |
| 1183 | 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 | 1217 | const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array; |
| 1187 | 1218 | for (tune_features.items) |feature| { |
| ... | ... | @@ -1228,7 +1259,7 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1228 | 1259 | mem.sort(Feature, all_features.items, {}, featureLessThan); |
| 1229 | 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 | 1263 | var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{}); |
| 1233 | 1264 | defer target_dir.close(); |
| 1234 | 1265 | |