mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
update_cpu_features: Support omitting deps
This commit is contained in:
parent
60094cc3fc
commit
55f2a6684e
1 changed files with 48 additions and 17 deletions
|
|
@ -16,6 +16,7 @@ const FeatureOverride = struct {
|
||||||
flatten: bool = false,
|
flatten: bool = false,
|
||||||
zig_name: ?[]const u8 = null,
|
zig_name: ?[]const u8 = null,
|
||||||
desc: ?[]const u8 = null,
|
desc: ?[]const u8 = null,
|
||||||
|
omit_deps: []const []const u8 = &.{},
|
||||||
extra_deps: []const []const u8 = &.{},
|
extra_deps: []const []const u8 = &.{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1114,18 +1115,8 @@ fn processOneTarget(job: Job) anyerror!void {
|
||||||
var deps = std.ArrayList([]const u8).init(arena);
|
var deps = std.ArrayList([]const u8).init(arena);
|
||||||
var omit = false;
|
var omit = false;
|
||||||
var flatten = false;
|
var flatten = false;
|
||||||
const implies = kv.value_ptr.object.get("Implies").?.array;
|
var omit_deps: []const []const u8 = &.{};
|
||||||
for (implies.items) |imply| {
|
var extra_deps: []const []const u8 = &.{};
|
||||||
const other_key = imply.object.get("def").?.string;
|
|
||||||
const other_obj = &root_map.getPtr(other_key).?.object;
|
|
||||||
const other_llvm_name = other_obj.get("Name").?.string;
|
|
||||||
const other_zig_name = (try llvmNameToZigNameOmit(
|
|
||||||
arena,
|
|
||||||
llvm_target,
|
|
||||||
other_llvm_name,
|
|
||||||
)) orelse continue;
|
|
||||||
try deps.append(other_zig_name);
|
|
||||||
}
|
|
||||||
for (llvm_target.feature_overrides) |feature_override| {
|
for (llvm_target.feature_overrides) |feature_override| {
|
||||||
if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
|
if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
|
||||||
if (feature_override.omit) {
|
if (feature_override.omit) {
|
||||||
|
|
@ -1142,12 +1133,30 @@ fn processOneTarget(job: Job) anyerror!void {
|
||||||
if (feature_override.desc) |override_desc| {
|
if (feature_override.desc) |override_desc| {
|
||||||
desc = override_desc;
|
desc = override_desc;
|
||||||
}
|
}
|
||||||
for (feature_override.extra_deps) |extra_dep| {
|
omit_deps = feature_override.omit_deps;
|
||||||
try deps.append(extra_dep);
|
extra_deps = feature_override.extra_deps;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const implies = kv.value_ptr.object.get("Implies").?.array;
|
||||||
|
for (implies.items) |imply| {
|
||||||
|
const other_key = imply.object.get("def").?.string;
|
||||||
|
const other_obj = &root_map.getPtr(other_key).?.object;
|
||||||
|
const other_llvm_name = other_obj.get("Name").?.string;
|
||||||
|
const other_zig_name = (try llvmNameToZigNameOmit(
|
||||||
|
arena,
|
||||||
|
llvm_target,
|
||||||
|
other_llvm_name,
|
||||||
|
)) orelse continue;
|
||||||
|
for (omit_deps) |omit_dep| {
|
||||||
|
if (mem.eql(u8, other_zig_name, omit_dep)) break;
|
||||||
|
} else {
|
||||||
|
try deps.append(other_zig_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (extra_deps) |extra_dep| {
|
||||||
|
try deps.append(extra_dep);
|
||||||
|
}
|
||||||
const feature: Feature = .{
|
const feature: Feature = .{
|
||||||
.llvm_name = llvm_name,
|
.llvm_name = llvm_name,
|
||||||
.zig_name = zig_name,
|
.zig_name = zig_name,
|
||||||
|
|
@ -1170,6 +1179,21 @@ fn processOneTarget(job: Job) anyerror!void {
|
||||||
|
|
||||||
var zig_name = try llvmNameToZigName(arena, llvm_name);
|
var zig_name = try llvmNameToZigName(arena, llvm_name);
|
||||||
var deps = std.ArrayList([]const u8).init(arena);
|
var deps = std.ArrayList([]const u8).init(arena);
|
||||||
|
var omit_deps: []const []const u8 = &.{};
|
||||||
|
var extra_deps: []const []const u8 = &.{};
|
||||||
|
for (llvm_target.feature_overrides) |feature_override| {
|
||||||
|
if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
|
||||||
|
if (feature_override.omit) {
|
||||||
|
continue :root_it;
|
||||||
|
}
|
||||||
|
if (feature_override.zig_name) |override_name| {
|
||||||
|
zig_name = override_name;
|
||||||
|
}
|
||||||
|
omit_deps = feature_override.omit_deps;
|
||||||
|
extra_deps = feature_override.extra_deps;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
const features = kv.value_ptr.object.get("Features").?.array;
|
const features = kv.value_ptr.object.get("Features").?.array;
|
||||||
for (features.items) |feature| {
|
for (features.items) |feature| {
|
||||||
const feature_key = feature.object.get("def").?.string;
|
const feature_key = feature.object.get("def").?.string;
|
||||||
|
|
@ -1181,7 +1205,14 @@ fn processOneTarget(job: Job) anyerror!void {
|
||||||
llvm_target,
|
llvm_target,
|
||||||
feature_llvm_name,
|
feature_llvm_name,
|
||||||
)) orelse continue;
|
)) orelse continue;
|
||||||
try deps.append(feature_zig_name);
|
for (omit_deps) |omit_dep| {
|
||||||
|
if (mem.eql(u8, feature_zig_name, omit_dep)) break;
|
||||||
|
} else {
|
||||||
|
try deps.append(feature_zig_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (extra_deps) |extra_dep| {
|
||||||
|
try deps.append(extra_dep);
|
||||||
}
|
}
|
||||||
const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;
|
const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;
|
||||||
for (tune_features.items) |feature| {
|
for (tune_features.items) |feature| {
|
||||||
|
|
@ -1228,7 +1259,7 @@ fn processOneTarget(job: Job) anyerror!void {
|
||||||
mem.sort(Feature, all_features.items, {}, featureLessThan);
|
mem.sort(Feature, all_features.items, {}, featureLessThan);
|
||||||
mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);
|
mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);
|
||||||
|
|
||||||
const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "target" });
|
const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "Target" });
|
||||||
var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});
|
var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});
|
||||||
defer target_dir.close();
|
defer target_dir.close();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue