feat: add build.zig
parent
362b5b0a88
commit
d3f9b3ca14
|
@ -1 +1,3 @@
|
||||||
/build*
|
/build*/
|
||||||
|
/zig-cache/
|
||||||
|
/zig-out/
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.Build) void {
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
|
|
||||||
|
const lib = b.addStaticLibrary(.{
|
||||||
|
.name = "drm",
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
lib.root_module.c_std = .C11;
|
||||||
|
lib.addCSourceFiles(.{
|
||||||
|
.files = &.{
|
||||||
|
"xf86drm.c",
|
||||||
|
"xf86drmHash.c",
|
||||||
|
"xf86drmRandom.c",
|
||||||
|
"xf86drmSL.c",
|
||||||
|
"xf86drmMode.c",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
lib.addIncludePath(.{ .path = "include/drm" });
|
||||||
|
lib.linkLibC();
|
||||||
|
lib.defineCMacro("HAVE_OPEN_MEMSTREAM", "1");
|
||||||
|
// TODO: Figure out if where this varies
|
||||||
|
lib.defineCMacro("MAJOR_IN_SYSMACROS", "1");
|
||||||
|
// lib.defineCMacro("MAJOR_IN_MKDEV", "1");
|
||||||
|
|
||||||
|
lib.installHeader("libsync.h", "libsync.h");
|
||||||
|
lib.installHeader("xf86drm.h", "xf86drm.h");
|
||||||
|
lib.installHeader("xf86drmMode.h", "xf86drmMode.h");
|
||||||
|
|
||||||
|
lib.installHeadersDirectoryOptions(.{
|
||||||
|
.source_dir = .{ .path = "include/drm" },
|
||||||
|
.install_dir = .header,
|
||||||
|
.install_subdir = "libdrm",
|
||||||
|
});
|
||||||
|
|
||||||
|
b.installArtifact(lib);
|
||||||
|
|
||||||
|
// const lib_unit_tests = b.addTest(.{
|
||||||
|
// .root_source_file = .{ .path = "src/root.zig" },
|
||||||
|
// .target = target,
|
||||||
|
// .optimize = optimize,
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests);
|
||||||
|
|
||||||
|
// const exe_unit_tests = b.addTest(.{
|
||||||
|
// .root_source_file = .{ .path = "src/main.zig" },
|
||||||
|
// .target = target,
|
||||||
|
// .optimize = optimize,
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
|
||||||
|
// const test_step = b.step("test", "Run unit tests");
|
||||||
|
// test_step.dependOn(&run_lib_unit_tests.step);
|
||||||
|
// test_step.dependOn(&run_exe_unit_tests.step);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
.{
|
||||||
|
.name = "drm",
|
||||||
|
.version = "2.4.120",
|
||||||
|
|
||||||
|
// This field is optional.
|
||||||
|
// This is currently advisory only; Zig does not yet do anything
|
||||||
|
// with this value.
|
||||||
|
//.minimum_zig_version = "0.11.0",
|
||||||
|
|
||||||
|
.dependencies = .{ },
|
||||||
|
|
||||||
|
// Specifies the set of files and directories that are included in this package.
|
||||||
|
// Only files and directories listed here are included in the `hash` that
|
||||||
|
// is computed for this package.
|
||||||
|
// Paths are relative to the build root. Use the empty string (`""`) to refer to
|
||||||
|
// the build root itself.
|
||||||
|
// A directory listed here means that all files within, recursively, are included.
|
||||||
|
.paths = .{ "" },
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
|
||||||
|
const argv = try std.process.argsAlloc(gpa.allocator());
|
||||||
|
defer std.process.argsFree(gpa.allocator(), argv);
|
||||||
|
|
||||||
|
const filename = argv[1];
|
||||||
|
|
||||||
|
const contents = try std.fs.cwd().readFileAlloc(gpa.allocator(), filename, 50 * 1024 * 1024);
|
||||||
|
defer gpa.allocator().free(contents);
|
||||||
|
|
||||||
|
const stdout = std.io.getStdOut();
|
||||||
|
const out = stdout.writer();
|
||||||
|
|
||||||
|
try out.writeAll(
|
||||||
|
\\/* AUTOMATICALLY GENERATED by gen_table_fourcc.py. You should modify
|
||||||
|
\\ that script instead of adding here entries manually! */
|
||||||
|
\\static const struct drmFormatModifierInfo drm_format_modifier_table[] = {
|
||||||
|
\\ { DRM_MODIFIER_INVALID(NONE, INVALID) },
|
||||||
|
\\ { DRM_MODIFIER_LINEAR(NONE, LINEAR) },
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
var line_iter = std.mem.splitScalar(u8, contents, '\n');
|
||||||
|
check_each_line: while (line_iter.next()) |line| {
|
||||||
|
errdefer std.log.debug("line = \"{}\"", .{std.zig.fmtEscapes(line)});
|
||||||
|
if (matchStart(line, "#define I915_FORMAT_MOD_")) |after| {
|
||||||
|
const modifier_end = std.mem.indexOfAny(u8, after, "\t ") orelse return error.Invalid;
|
||||||
|
const modifier = after[0..modifier_end];
|
||||||
|
for (modifier) |character| {
|
||||||
|
if (character != '_' and !std.ascii.isAlphanumeric(character)) {
|
||||||
|
continue :check_each_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try out.print(
|
||||||
|
\\ {{ DRM_MODIFIER_INTEL({[modifier]s}, {[modifier]s}) }},
|
||||||
|
\\
|
||||||
|
, .{
|
||||||
|
.modifier = modifier,
|
||||||
|
});
|
||||||
|
} else if (matchStart(line, "#define DRM_FORMAT_MOD_")) |after| {
|
||||||
|
const end_of_identifier = std.mem.indexOfAny(u8, after, "\t ") orelse return error.Invalid;
|
||||||
|
const identifier = after[0..end_of_identifier];
|
||||||
|
|
||||||
|
const end_of_vendor = std.mem.indexOfScalar(u8, identifier, '_') orelse continue;
|
||||||
|
const vendor_str = identifier[0..end_of_vendor];
|
||||||
|
const modifier = identifier[end_of_vendor + 1 ..];
|
||||||
|
|
||||||
|
for (modifier) |character| {
|
||||||
|
if (character != '_' and !std.ascii.isAlphanumeric(character)) {
|
||||||
|
continue :check_each_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Vendor = enum { ARM, SAMSUNG, QCOM, VIVANTE, NVIDIA, BROADCOM, ALLWINNER };
|
||||||
|
|
||||||
|
const vendor = std.meta.stringToEnum(Vendor, vendor_str) orelse continue;
|
||||||
|
|
||||||
|
if (vendor == .ARM) {
|
||||||
|
if (std.mem.eql(u8, modifier, "TYPE_AFBC")) continue;
|
||||||
|
if (std.mem.eql(u8, modifier, "TYPE_MISC")) continue;
|
||||||
|
if (std.mem.eql(u8, modifier, "TYPE_AFRC")) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try out.print(
|
||||||
|
\\ {{ DRM_MODIFIER({[vendor]s}, {[modifier]s}, {[modifier]s}) }},
|
||||||
|
\\
|
||||||
|
, .{
|
||||||
|
.vendor = @tagName(vendor),
|
||||||
|
.modifier = modifier,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try out.writeAll(
|
||||||
|
\\};
|
||||||
|
\\static const struct drmFormatModifierVendorInfo drm_format_modifier_vendor_table[] = {
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
|
||||||
|
line_iter.reset();
|
||||||
|
check_each_line: while (line_iter.next()) |line| {
|
||||||
|
if (matchStart(line, "#define DRM_FORMAT_MOD_VENDOR_")) |after| {
|
||||||
|
const modifier_end = std.mem.indexOfAny(u8, after, "\t ") orelse return error.Invalid;
|
||||||
|
const modifier = after[0..modifier_end];
|
||||||
|
|
||||||
|
for (modifier) |character| {
|
||||||
|
if (character != '_' and !std.ascii.isAlphanumeric(character)) {
|
||||||
|
continue :check_each_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try out.print(
|
||||||
|
\\ {{ DRM_FORMAT_MOD_VENDOR_{[modifier]s}, "{[modifier]s}" }},
|
||||||
|
\\
|
||||||
|
, .{
|
||||||
|
.modifier = modifier,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try out.writeAll(
|
||||||
|
\\};
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn matchStart(haystack: []const u8, needle: []const u8) ?[]const u8 {
|
||||||
|
if (std.mem.startsWith(u8, haystack, needle)) {
|
||||||
|
return haystack[needle.len..];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* AUTOMATICALLY GENERATED by gen_table_fourcc.py. You should modify
|
||||||
|
that script instead of adding here entries manually! */
|
||||||
|
static const struct drmFormatModifierInfo drm_format_modifier_table[] = {
|
||||||
|
{ DRM_MODIFIER_INVALID(NONE, INVALID) },
|
||||||
|
{ DRM_MODIFIER_LINEAR(NONE, LINEAR) },
|
||||||
|
{ DRM_MODIFIER_INTEL(X_TILED, X_TILED) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Y_TILED, Y_TILED) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Yf_TILED, Yf_TILED) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Y_TILED_CCS, Y_TILED_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Yf_TILED_CCS, Yf_TILED_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Y_TILED_GEN12_RC_CCS, Y_TILED_GEN12_RC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Y_TILED_GEN12_MC_CCS, Y_TILED_GEN12_MC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(Y_TILED_GEN12_RC_CCS_CC, Y_TILED_GEN12_RC_CCS_CC) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED, 4_TILED) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_DG2_RC_CCS, 4_TILED_DG2_RC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_DG2_MC_CCS, 4_TILED_DG2_MC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_DG2_RC_CCS_CC, 4_TILED_DG2_RC_CCS_CC) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_MTL_RC_CCS, 4_TILED_MTL_RC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_MTL_MC_CCS, 4_TILED_MTL_MC_CCS) },
|
||||||
|
{ DRM_MODIFIER_INTEL(4_TILED_MTL_RC_CCS_CC, 4_TILED_MTL_RC_CCS_CC) },
|
||||||
|
{ DRM_MODIFIER(SAMSUNG, 64_32_TILE, 64_32_TILE) },
|
||||||
|
{ DRM_MODIFIER(SAMSUNG, 16_16_TILE, 16_16_TILE) },
|
||||||
|
{ DRM_MODIFIER(QCOM, COMPRESSED, COMPRESSED) },
|
||||||
|
{ DRM_MODIFIER(QCOM, TILED3, TILED3) },
|
||||||
|
{ DRM_MODIFIER(QCOM, TILED2, TILED2) },
|
||||||
|
{ DRM_MODIFIER(VIVANTE, TILED, TILED) },
|
||||||
|
{ DRM_MODIFIER(VIVANTE, SUPER_TILED, SUPER_TILED) },
|
||||||
|
{ DRM_MODIFIER(VIVANTE, SPLIT_TILED, SPLIT_TILED) },
|
||||||
|
{ DRM_MODIFIER(VIVANTE, SPLIT_SUPER_TILED, SPLIT_SUPER_TILED) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, TEGRA_TILED, TEGRA_TILED) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_ONE_GOB, 16BX2_BLOCK_ONE_GOB) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_TWO_GOB, 16BX2_BLOCK_TWO_GOB) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_FOUR_GOB, 16BX2_BLOCK_FOUR_GOB) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_EIGHT_GOB, 16BX2_BLOCK_EIGHT_GOB) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_SIXTEEN_GOB, 16BX2_BLOCK_SIXTEEN_GOB) },
|
||||||
|
{ DRM_MODIFIER(NVIDIA, 16BX2_BLOCK_THIRTYTWO_GOB, 16BX2_BLOCK_THIRTYTWO_GOB) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, VC4_T_TILED, VC4_T_TILED) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, SAND32, SAND32) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, SAND64, SAND64) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, SAND128, SAND128) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, SAND256, SAND256) },
|
||||||
|
{ DRM_MODIFIER(BROADCOM, UIF, UIF) },
|
||||||
|
{ DRM_MODIFIER(ARM, 16X16_BLOCK_U_INTERLEAVED, 16X16_BLOCK_U_INTERLEAVED) },
|
||||||
|
{ DRM_MODIFIER(ALLWINNER, TILED, TILED) },
|
||||||
|
};
|
||||||
|
static const struct drmFormatModifierVendorInfo drm_format_modifier_vendor_table[] = {
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_NONE, "NONE" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_INTEL, "INTEL" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_AMD, "AMD" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_NVIDIA, "NVIDIA" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_SAMSUNG, "SAMSUNG" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_QCOM, "QCOM" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_VIVANTE, "VIVANTE" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_BROADCOM, "BROADCOM" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_ARM, "ARM" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_ALLWINNER, "ALLWINNER" },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_AMLOGIC, "AMLOGIC" },
|
||||||
|
};
|
Loading…
Reference in New Issue