@@ -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
@@ -378,6 +379,31 @@ const llvm_targets = [_]LlvmTarget{
378
379
.llvm_name = "cortex-a710" ,
379
380
.flatten = true ,
380
381
},
382
+ .{
383
+ .llvm_name = "cortex-m4" ,
384
+ .omit_deps = &.{"vfp4d16sp" },
385
+ },
386
+ .{
387
+ .llvm_name = "cortex-m7" ,
388
+ .omit_deps = &.{"fp_armv8d16" },
389
+ },
390
+ .{
391
+ .llvm_name = "cortex-m33" ,
392
+ .omit_deps = &.{ "fp_armv8d16sp" , "dsp" },
393
+ },
394
+ .{
395
+ .llvm_name = "cortex-m35p" ,
396
+ .omit_deps = &.{ "fp_armv8d16sp" , "dsp" },
397
+ },
398
+ .{
399
+ .llvm_name = "cortex-m55" ,
400
+ .omit_deps = &.{ "mve_fp" , "fp_armv8d16" },
401
+ },
402
+ .{
403
+ .llvm_name = "cortex-m85" ,
404
+ .omit_deps = &.{ "mve_fp" , "pacbti" , "fp_armv8d16" },
405
+ .extra_deps = &.{"trustzone" },
406
+ },
381
407
.{
382
408
.llvm_name = "cortex-x1c" ,
383
409
.flatten = true ,
@@ -1114,18 +1140,8 @@ fn processOneTarget(job: Job) anyerror!void {
1114
1140
var deps = std .ArrayList ([]const u8 ).init (arena );
1115
1141
var omit = false ;
1116
1142
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
- }
1143
+ var omit_deps : []const []const u8 = &.{};
1144
+ var extra_deps : []const []const u8 = &.{};
1129
1145
for (llvm_target .feature_overrides ) | feature_override | {
1130
1146
if (mem .eql (u8 , llvm_name , feature_override .llvm_name )) {
1131
1147
if (feature_override .omit ) {
@@ -1142,12 +1158,30 @@ fn processOneTarget(job: Job) anyerror!void {
1142
1158
if (feature_override .desc ) | override_desc | {
1143
1159
desc = override_desc ;
1144
1160
}
1145
- for (feature_override .extra_deps ) | extra_dep | {
1146
- try deps .append (extra_dep );
1147
- }
1161
+ omit_deps = feature_override .omit_deps ;
1162
+ extra_deps = feature_override .extra_deps ;
1148
1163
break ;
1149
1164
}
1150
1165
}
1166
+ const implies = kv .value_ptr .object .get ("Implies" ).? .array ;
1167
+ for (implies .items ) | imply | {
1168
+ const other_key = imply .object .get ("def" ).? .string ;
1169
+ const other_obj = & root_map .getPtr (other_key ).? .object ;
1170
+ const other_llvm_name = other_obj .get ("Name" ).? .string ;
1171
+ const other_zig_name = (try llvmNameToZigNameOmit (
1172
+ arena ,
1173
+ llvm_target ,
1174
+ other_llvm_name ,
1175
+ )) orelse continue ;
1176
+ for (omit_deps ) | omit_dep | {
1177
+ if (mem .eql (u8 , other_zig_name , omit_dep )) break ;
1178
+ } else {
1179
+ try deps .append (other_zig_name );
1180
+ }
1181
+ }
1182
+ for (extra_deps ) | extra_dep | {
1183
+ try deps .append (extra_dep );
1184
+ }
1151
1185
const feature : Feature = .{
1152
1186
.llvm_name = llvm_name ,
1153
1187
.zig_name = zig_name ,
@@ -1170,6 +1204,21 @@ fn processOneTarget(job: Job) anyerror!void {
1170
1204
1171
1205
var zig_name = try llvmNameToZigName (arena , llvm_name );
1172
1206
var deps = std .ArrayList ([]const u8 ).init (arena );
1207
+ var omit_deps : []const []const u8 = &.{};
1208
+ var extra_deps : []const []const u8 = &.{};
1209
+ for (llvm_target .feature_overrides ) | feature_override | {
1210
+ if (mem .eql (u8 , llvm_name , feature_override .llvm_name )) {
1211
+ if (feature_override .omit ) {
1212
+ continue :root_it ;
1213
+ }
1214
+ if (feature_override .zig_name ) | override_name | {
1215
+ zig_name = override_name ;
1216
+ }
1217
+ omit_deps = feature_override .omit_deps ;
1218
+ extra_deps = feature_override .extra_deps ;
1219
+ break ;
1220
+ }
1221
+ }
1173
1222
const features = kv .value_ptr .object .get ("Features" ).? .array ;
1174
1223
for (features .items ) | feature | {
1175
1224
const feature_key = feature .object .get ("def" ).? .string ;
@@ -1181,7 +1230,14 @@ fn processOneTarget(job: Job) anyerror!void {
1181
1230
llvm_target ,
1182
1231
feature_llvm_name ,
1183
1232
)) orelse continue ;
1184
- try deps .append (feature_zig_name );
1233
+ for (omit_deps ) | omit_dep | {
1234
+ if (mem .eql (u8 , feature_zig_name , omit_dep )) break ;
1235
+ } else {
1236
+ try deps .append (feature_zig_name );
1237
+ }
1238
+ }
1239
+ for (extra_deps ) | extra_dep | {
1240
+ try deps .append (extra_dep );
1185
1241
}
1186
1242
const tune_features = kv .value_ptr .object .get ("TuneFeatures" ).? .array ;
1187
1243
for (tune_features .items ) | feature | {
@@ -1228,7 +1284,7 @@ fn processOneTarget(job: Job) anyerror!void {
1228
1284
mem .sort (Feature , all_features .items , {}, featureLessThan );
1229
1285
mem .sort (Cpu , all_cpus .items , {}, cpuLessThan );
1230
1286
1231
- const target_sub_path = try fs .path .join (arena , &.{ "lib" , "std" , "target " });
1287
+ const target_sub_path = try fs .path .join (arena , &.{ "lib" , "std" , "Target " });
1232
1288
var target_dir = try job .zig_src_dir .makeOpenPath (target_sub_path , .{});
1233
1289
defer target_dir .close ();
1234
1290
0 commit comments