xref: /aosp_15_r20/external/pcre/build.zig (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
1*22dc650dSSadaf Ebrahimiconst std = @import("std");
2*22dc650dSSadaf Ebrahimi
3*22dc650dSSadaf Ebrahimipub const CodeUnitWidth = enum {
4*22dc650dSSadaf Ebrahimi    @"8",
5*22dc650dSSadaf Ebrahimi    @"16",
6*22dc650dSSadaf Ebrahimi    @"32",
7*22dc650dSSadaf Ebrahimi};
8*22dc650dSSadaf Ebrahimi
9*22dc650dSSadaf Ebrahimipub fn build(b: *std.Build) !void {
10*22dc650dSSadaf Ebrahimi    const target = b.standardTargetOptions(.{});
11*22dc650dSSadaf Ebrahimi    const optimize = b.standardOptimizeOption(.{});
12*22dc650dSSadaf Ebrahimi    const linkage = b.option(std.builtin.LinkMode, "linkage", "whether to statically or dynamically link the library") orelse @as(std.builtin.LinkMode, if (target.result.isGnuLibC()) .dynamic else .static);
13*22dc650dSSadaf Ebrahimi    const codeUnitWidth = b.option(CodeUnitWidth, "code-unit-width", "Sets the code unit width") orelse .@"8";
14*22dc650dSSadaf Ebrahimi
15*22dc650dSSadaf Ebrahimi    const copyFiles = b.addWriteFiles();
16*22dc650dSSadaf Ebrahimi    _ = copyFiles.addCopyFile(.{ .path = "src/config.h.generic" }, "config.h");
17*22dc650dSSadaf Ebrahimi    _ = copyFiles.addCopyFile(.{ .path = "src/pcre2.h.generic" }, "pcre2.h");
18*22dc650dSSadaf Ebrahimi
19*22dc650dSSadaf Ebrahimi    const lib = std.Build.Step.Compile.create(b, .{
20*22dc650dSSadaf Ebrahimi        .name = b.fmt("pcre2-{s}", .{@tagName(codeUnitWidth)}),
21*22dc650dSSadaf Ebrahimi        .root_module = .{
22*22dc650dSSadaf Ebrahimi            .target = target,
23*22dc650dSSadaf Ebrahimi            .optimize = optimize,
24*22dc650dSSadaf Ebrahimi            .link_libc = true,
25*22dc650dSSadaf Ebrahimi        },
26*22dc650dSSadaf Ebrahimi        .kind = .lib,
27*22dc650dSSadaf Ebrahimi        .linkage = linkage,
28*22dc650dSSadaf Ebrahimi    });
29*22dc650dSSadaf Ebrahimi
30*22dc650dSSadaf Ebrahimi    if (linkage == .static) {
31*22dc650dSSadaf Ebrahimi        try lib.root_module.c_macros.append(b.allocator, "-DPCRE2_STATIC");
32*22dc650dSSadaf Ebrahimi    }
33*22dc650dSSadaf Ebrahimi
34*22dc650dSSadaf Ebrahimi    lib.root_module.addCMacro("PCRE2_CODE_UNIT_WIDTH", @tagName(codeUnitWidth));
35*22dc650dSSadaf Ebrahimi
36*22dc650dSSadaf Ebrahimi    lib.addCSourceFile(.{
37*22dc650dSSadaf Ebrahimi        .file = copyFiles.addCopyFile(.{ .path = "src/pcre2_chartables.c.dist" }, "pcre2_chartables.c"),
38*22dc650dSSadaf Ebrahimi        .flags = &.{
39*22dc650dSSadaf Ebrahimi            "-DHAVE_CONFIG_H",
40*22dc650dSSadaf Ebrahimi        },
41*22dc650dSSadaf Ebrahimi    });
42*22dc650dSSadaf Ebrahimi
43*22dc650dSSadaf Ebrahimi    lib.addIncludePath(.{ .path = b.pathFromRoot("src") });
44*22dc650dSSadaf Ebrahimi    lib.addIncludePath(copyFiles.getDirectory());
45*22dc650dSSadaf Ebrahimi
46*22dc650dSSadaf Ebrahimi    lib.addCSourceFiles(.{
47*22dc650dSSadaf Ebrahimi        .files = &.{
48*22dc650dSSadaf Ebrahimi            "src/pcre2_auto_possess.c",
49*22dc650dSSadaf Ebrahimi            "src/pcre2_chkdint.c",
50*22dc650dSSadaf Ebrahimi            "src/pcre2_compile.c",
51*22dc650dSSadaf Ebrahimi            "src/pcre2_config.c",
52*22dc650dSSadaf Ebrahimi            "src/pcre2_context.c",
53*22dc650dSSadaf Ebrahimi            "src/pcre2_convert.c",
54*22dc650dSSadaf Ebrahimi            "src/pcre2_dfa_match.c",
55*22dc650dSSadaf Ebrahimi            "src/pcre2_error.c",
56*22dc650dSSadaf Ebrahimi            "src/pcre2_extuni.c",
57*22dc650dSSadaf Ebrahimi            "src/pcre2_find_bracket.c",
58*22dc650dSSadaf Ebrahimi            "src/pcre2_maketables.c",
59*22dc650dSSadaf Ebrahimi            "src/pcre2_match.c",
60*22dc650dSSadaf Ebrahimi            "src/pcre2_match_data.c",
61*22dc650dSSadaf Ebrahimi            "src/pcre2_newline.c",
62*22dc650dSSadaf Ebrahimi            "src/pcre2_ord2utf.c",
63*22dc650dSSadaf Ebrahimi            "src/pcre2_pattern_info.c",
64*22dc650dSSadaf Ebrahimi            "src/pcre2_script_run.c",
65*22dc650dSSadaf Ebrahimi            "src/pcre2_serialize.c",
66*22dc650dSSadaf Ebrahimi            "src/pcre2_string_utils.c",
67*22dc650dSSadaf Ebrahimi            "src/pcre2_study.c",
68*22dc650dSSadaf Ebrahimi            "src/pcre2_substitute.c",
69*22dc650dSSadaf Ebrahimi            "src/pcre2_substring.c",
70*22dc650dSSadaf Ebrahimi            "src/pcre2_tables.c",
71*22dc650dSSadaf Ebrahimi            "src/pcre2_ucd.c",
72*22dc650dSSadaf Ebrahimi            "src/pcre2_valid_utf.c",
73*22dc650dSSadaf Ebrahimi            "src/pcre2_xclass.c",
74*22dc650dSSadaf Ebrahimi        },
75*22dc650dSSadaf Ebrahimi        .flags = &.{
76*22dc650dSSadaf Ebrahimi            "-DHAVE_CONFIG_H",
77*22dc650dSSadaf Ebrahimi            "-DPCRE2_STATIC",
78*22dc650dSSadaf Ebrahimi        },
79*22dc650dSSadaf Ebrahimi    });
80*22dc650dSSadaf Ebrahimi
81*22dc650dSSadaf Ebrahimi    lib.installHeader(.{ .path = "src/pcre2.h.generic" }, "pcre2.h");
82*22dc650dSSadaf Ebrahimi    b.installArtifact(lib);
83*22dc650dSSadaf Ebrahimi}
84