xref: /aosp_15_r20/external/gflags/bazel/gflags.bzl (revision 08ab5237c114d5c0eac1090c56f941d3f639d7d3)
1*08ab5237SOystein Eftevaag# ------------------------------------------------------------------------------
2*08ab5237SOystein Eftevaag# Add native rules to configure source files
3*08ab5237SOystein Eftevaagdef gflags_sources(namespace=["google", "gflags"]):
4*08ab5237SOystein Eftevaag    native.genrule(
5*08ab5237SOystein Eftevaag        name = "gflags_declare_h",
6*08ab5237SOystein Eftevaag        srcs = ["src/gflags_declare.h.in"],
7*08ab5237SOystein Eftevaag        outs = ["gflags_declare.h"],
8*08ab5237SOystein Eftevaag        cmd  = ("awk '{ " +
9*08ab5237SOystein Eftevaag                "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " +
10*08ab5237SOystein Eftevaag                "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " +
11*08ab5237SOystein Eftevaag                "gsub(/@([A-Z0-9_]+)@/, \"0\"); " +
12*08ab5237SOystein Eftevaag                "print; }' $(<) > $(@)")
13*08ab5237SOystein Eftevaag    )
14*08ab5237SOystein Eftevaag    gflags_ns_h_files = []
15*08ab5237SOystein Eftevaag    for ns in namespace[1:]:
16*08ab5237SOystein Eftevaag        gflags_ns_h_file = "gflags_{}.h".format(ns)
17*08ab5237SOystein Eftevaag        native.genrule(
18*08ab5237SOystein Eftevaag            name = gflags_ns_h_file.replace('.', '_'),
19*08ab5237SOystein Eftevaag            srcs = ["src/gflags_ns.h.in"],
20*08ab5237SOystein Eftevaag            outs = [gflags_ns_h_file],
21*08ab5237SOystein Eftevaag            cmd  = ("awk '{ " +
22*08ab5237SOystein Eftevaag                    "gsub(/@ns@/, \"" + ns + "\"); " +
23*08ab5237SOystein Eftevaag                    "gsub(/@NS@/, \"" + ns.upper() + "\"); " +
24*08ab5237SOystein Eftevaag                    "print; }' $(<) > $(@)")
25*08ab5237SOystein Eftevaag        )
26*08ab5237SOystein Eftevaag        gflags_ns_h_files.append(gflags_ns_h_file)
27*08ab5237SOystein Eftevaag    native.genrule(
28*08ab5237SOystein Eftevaag        name = "gflags_h",
29*08ab5237SOystein Eftevaag        srcs = ["src/gflags.h.in"],
30*08ab5237SOystein Eftevaag        outs = ["gflags.h"],
31*08ab5237SOystein Eftevaag        cmd  = ("awk '{ " +
32*08ab5237SOystein Eftevaag                "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " +
33*08ab5237SOystein Eftevaag                "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + '\n'.join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " +
34*08ab5237SOystein Eftevaag                "print; }' $(<) > $(@)")
35*08ab5237SOystein Eftevaag    )
36*08ab5237SOystein Eftevaag    native.genrule(
37*08ab5237SOystein Eftevaag        name = "gflags_completions_h",
38*08ab5237SOystein Eftevaag        srcs = ["src/gflags_completions.h.in"],
39*08ab5237SOystein Eftevaag        outs = ["gflags_completions.h"],
40*08ab5237SOystein Eftevaag        cmd  = "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $(<) > $(@)"
41*08ab5237SOystein Eftevaag    )
42*08ab5237SOystein Eftevaag    hdrs = [":gflags_h", ":gflags_declare_h", ":gflags_completions_h"]
43*08ab5237SOystein Eftevaag    hdrs.extend([':' + hdr.replace('.', '_') for hdr in gflags_ns_h_files])
44*08ab5237SOystein Eftevaag    srcs = [
45*08ab5237SOystein Eftevaag        "src/config.h",
46*08ab5237SOystein Eftevaag        "src/gflags.cc",
47*08ab5237SOystein Eftevaag        "src/gflags_completions.cc",
48*08ab5237SOystein Eftevaag        "src/gflags_reporting.cc",
49*08ab5237SOystein Eftevaag        "src/mutex.h",
50*08ab5237SOystein Eftevaag        "src/util.h",
51*08ab5237SOystein Eftevaag    ] + select({
52*08ab5237SOystein Eftevaag        "//:x64_windows": [
53*08ab5237SOystein Eftevaag            "src/windows_port.cc",
54*08ab5237SOystein Eftevaag            "src/windows_port.h",
55*08ab5237SOystein Eftevaag        ],
56*08ab5237SOystein Eftevaag        "//conditions:default": [],
57*08ab5237SOystein Eftevaag    })
58*08ab5237SOystein Eftevaag    return [hdrs, srcs]
59*08ab5237SOystein Eftevaag
60*08ab5237SOystein Eftevaag# ------------------------------------------------------------------------------
61*08ab5237SOystein Eftevaag# Add native rule to build gflags library
62*08ab5237SOystein Eftevaagdef gflags_library(hdrs=[], srcs=[], threads=1):
63*08ab5237SOystein Eftevaag    name = "gflags"
64*08ab5237SOystein Eftevaag    copts = [
65*08ab5237SOystein Eftevaag        "-DGFLAGS_BAZEL_BUILD",
66*08ab5237SOystein Eftevaag        "-DGFLAGS_INTTYPES_FORMAT_C99",
67*08ab5237SOystein Eftevaag        "-DGFLAGS_IS_A_DLL=0",
68*08ab5237SOystein Eftevaag        # macros otherwise defined by CMake configured defines.h file
69*08ab5237SOystein Eftevaag        "-DHAVE_STDINT_H",
70*08ab5237SOystein Eftevaag        "-DHAVE_SYS_TYPES_H",
71*08ab5237SOystein Eftevaag        "-DHAVE_INTTYPES_H",
72*08ab5237SOystein Eftevaag        "-DHAVE_SYS_STAT_H",
73*08ab5237SOystein Eftevaag        "-DHAVE_STRTOLL",
74*08ab5237SOystein Eftevaag        "-DHAVE_STRTOQ",
75*08ab5237SOystein Eftevaag        "-DHAVE_RWLOCK",
76*08ab5237SOystein Eftevaag    ] + select({
77*08ab5237SOystein Eftevaag        "//:x64_windows": [
78*08ab5237SOystein Eftevaag            "-DOS_WINDOWS",
79*08ab5237SOystein Eftevaag        ],
80*08ab5237SOystein Eftevaag        "//conditions:default": [
81*08ab5237SOystein Eftevaag            "-DHAVE_UNISTD_H",
82*08ab5237SOystein Eftevaag            "-DHAVE_FNMATCH_H",
83*08ab5237SOystein Eftevaag            "-DHAVE_PTHREAD",
84*08ab5237SOystein Eftevaag        ],
85*08ab5237SOystein Eftevaag    })
86*08ab5237SOystein Eftevaag    linkopts = []
87*08ab5237SOystein Eftevaag    if threads:
88*08ab5237SOystein Eftevaag        linkopts += select({
89*08ab5237SOystein Eftevaag            "//:x64_windows": [],
90*08ab5237SOystein Eftevaag            "//conditions:default": ["-lpthread"],
91*08ab5237SOystein Eftevaag        })
92*08ab5237SOystein Eftevaag    else:
93*08ab5237SOystein Eftevaag        name += "_nothreads"
94*08ab5237SOystein Eftevaag        copts += ["-DNO_THREADS"]
95*08ab5237SOystein Eftevaag    native.cc_library(
96*08ab5237SOystein Eftevaag        name       = name,
97*08ab5237SOystein Eftevaag        hdrs       = hdrs,
98*08ab5237SOystein Eftevaag        srcs       = srcs,
99*08ab5237SOystein Eftevaag        copts      = copts,
100*08ab5237SOystein Eftevaag        linkopts   = linkopts,
101*08ab5237SOystein Eftevaag        visibility = ["//visibility:public"],
102*08ab5237SOystein Eftevaag        include_prefix = 'gflags'
103*08ab5237SOystein Eftevaag    )
104