xref: /aosp_15_r20/external/executorch/third-party/gflags_defs.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker# ------------------------------------------------------------------------------
2*523fa7a6SAndroid Build Coastguard Worker# Add native rules to configure source files
3*523fa7a6SAndroid Build Coastguard Worker# Not tested for building on windows platforms
4*523fa7a6SAndroid Build Coastguard Workerdef gflags_sources(namespace = ["google", "gflags"]):
5*523fa7a6SAndroid Build Coastguard Worker    common_preamble = "mkdir -p `dirname $OUT` && "
6*523fa7a6SAndroid Build Coastguard Worker
7*523fa7a6SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
8*523fa7a6SAndroid Build Coastguard Worker    native.genrule(
9*523fa7a6SAndroid Build Coastguard Worker        name = "gflags_declare_h",
10*523fa7a6SAndroid Build Coastguard Worker        srcs = ["gflags/src/gflags_declare.h.in"],
11*523fa7a6SAndroid Build Coastguard Worker        out = "gflags/gflags_declare.h",
12*523fa7a6SAndroid Build Coastguard Worker        cmd = (common_preamble + "awk '{ " +
13*523fa7a6SAndroid Build Coastguard Worker               "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " +
14*523fa7a6SAndroid Build Coastguard Worker               "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " +
15*523fa7a6SAndroid Build Coastguard Worker               "gsub(/@([A-Z0-9_]+)@/, \"0\"); " +
16*523fa7a6SAndroid Build Coastguard Worker               "print; }' $SRCS > $OUT"),
17*523fa7a6SAndroid Build Coastguard Worker    )
18*523fa7a6SAndroid Build Coastguard Worker    gflags_ns_h_files = []
19*523fa7a6SAndroid Build Coastguard Worker    for ns in namespace[1:]:
20*523fa7a6SAndroid Build Coastguard Worker        gflags_ns_h_file = "gflags_{}.h".format(ns)
21*523fa7a6SAndroid Build Coastguard Worker
22*523fa7a6SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
23*523fa7a6SAndroid Build Coastguard Worker        native.genrule(
24*523fa7a6SAndroid Build Coastguard Worker            name = gflags_ns_h_file.replace(".", "_"),
25*523fa7a6SAndroid Build Coastguard Worker            srcs = ["gflags/src/gflags_ns.h.in"],
26*523fa7a6SAndroid Build Coastguard Worker            out = "gflags/" + gflags_ns_h_file,
27*523fa7a6SAndroid Build Coastguard Worker            cmd = (common_preamble + "awk '{ " +
28*523fa7a6SAndroid Build Coastguard Worker                   "gsub(/@ns@/, \"" + ns + "\"); " +
29*523fa7a6SAndroid Build Coastguard Worker                   "gsub(/@NS@/, \"" + ns.upper() + "\"); " +
30*523fa7a6SAndroid Build Coastguard Worker                   "print; }' $SRCS > $OUT"),
31*523fa7a6SAndroid Build Coastguard Worker        )
32*523fa7a6SAndroid Build Coastguard Worker        gflags_ns_h_files.append(gflags_ns_h_file)
33*523fa7a6SAndroid Build Coastguard Worker
34*523fa7a6SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
35*523fa7a6SAndroid Build Coastguard Worker    native.genrule(
36*523fa7a6SAndroid Build Coastguard Worker        name = "gflags_h",
37*523fa7a6SAndroid Build Coastguard Worker        srcs = ["gflags/src/gflags.h.in"],
38*523fa7a6SAndroid Build Coastguard Worker        out = "gflags/gflags.h",
39*523fa7a6SAndroid Build Coastguard Worker        cmd = (common_preamble + "awk '{ " +
40*523fa7a6SAndroid Build Coastguard Worker               "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " +
41*523fa7a6SAndroid Build Coastguard Worker               "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + "\n".join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " +
42*523fa7a6SAndroid Build Coastguard Worker               "print; }' $SRCS > $OUT"),
43*523fa7a6SAndroid Build Coastguard Worker    )
44*523fa7a6SAndroid Build Coastguard Worker
45*523fa7a6SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
46*523fa7a6SAndroid Build Coastguard Worker    native.genrule(
47*523fa7a6SAndroid Build Coastguard Worker        name = "gflags_completions_h",
48*523fa7a6SAndroid Build Coastguard Worker        srcs = ["gflags/src/gflags_completions.h.in"],
49*523fa7a6SAndroid Build Coastguard Worker        out = "gflags/gflags_completions.h",
50*523fa7a6SAndroid Build Coastguard Worker        cmd = common_preamble + "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $SRCS > $OUT",
51*523fa7a6SAndroid Build Coastguard Worker    )
52*523fa7a6SAndroid Build Coastguard Worker    headers = {
53*523fa7a6SAndroid Build Coastguard Worker        "config.h": "gflags/src/config.h",
54*523fa7a6SAndroid Build Coastguard Worker        "mutex.h": "gflags/src/mutex.h",
55*523fa7a6SAndroid Build Coastguard Worker        "util.h": "gflags/src/util.h",
56*523fa7a6SAndroid Build Coastguard Worker        "windows_port.h": "gflags/src/windows_port.h",
57*523fa7a6SAndroid Build Coastguard Worker    }
58*523fa7a6SAndroid Build Coastguard Worker    exported_headers = {
59*523fa7a6SAndroid Build Coastguard Worker        "gflags/gflags.h": ":gflags_h",
60*523fa7a6SAndroid Build Coastguard Worker        "gflags/gflags_completions.h": ":gflags_completions_h",
61*523fa7a6SAndroid Build Coastguard Worker        "gflags/gflags_declare.h": ":gflags_declare_h",
62*523fa7a6SAndroid Build Coastguard Worker    }
63*523fa7a6SAndroid Build Coastguard Worker    exported_headers.update({"gflags/" + hdr: ":" + hdr.replace(".", "_") for hdr in gflags_ns_h_files})
64*523fa7a6SAndroid Build Coastguard Worker    srcs = [
65*523fa7a6SAndroid Build Coastguard Worker        "gflags/src/gflags.cc",
66*523fa7a6SAndroid Build Coastguard Worker        "gflags/src/gflags_completions.cc",
67*523fa7a6SAndroid Build Coastguard Worker        "gflags/src/gflags_reporting.cc",
68*523fa7a6SAndroid Build Coastguard Worker    ]
69*523fa7a6SAndroid Build Coastguard Worker    return [exported_headers, headers, srcs]
70*523fa7a6SAndroid Build Coastguard Worker
71*523fa7a6SAndroid Build Coastguard Worker# ------------------------------------------------------------------------------
72*523fa7a6SAndroid Build Coastguard Worker# Add native rule to build gflags library
73*523fa7a6SAndroid Build Coastguard Workerdef gflags_library(name, exported_headers = {}, headers = {}, srcs = [], threads = True, deps = [], enable_static_variant = None, **kwargs):
74*523fa7a6SAndroid Build Coastguard Worker    copts_common = [
75*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_STDINT_H",
76*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_SYS_TYPES_H",
77*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_INTTYPES_H",
78*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_SYS_STAT_H",
79*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_UNISTD_H",
80*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_STRTOLL",
81*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_STRTOQ",
82*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_RWLOCK",
83*523fa7a6SAndroid Build Coastguard Worker        "-DGFLAGS_INTTYPES_FORMAT_C99",
84*523fa7a6SAndroid Build Coastguard Worker        "-DGFLAGS_IS_A_DLL=0",
85*523fa7a6SAndroid Build Coastguard Worker        "-DGFLAGS_BAZEL_BUILD",  # to avoid defines.h include
86*523fa7a6SAndroid Build Coastguard Worker    ]
87*523fa7a6SAndroid Build Coastguard Worker
88*523fa7a6SAndroid Build Coastguard Worker    copts = copts_common + [
89*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_FNMATCH_H",
90*523fa7a6SAndroid Build Coastguard Worker        "-DHAVE_PTHREAD",
91*523fa7a6SAndroid Build Coastguard Worker    ]
92*523fa7a6SAndroid Build Coastguard Worker
93*523fa7a6SAndroid Build Coastguard Worker    pthread_deps = []
94*523fa7a6SAndroid Build Coastguard Worker    copts.append("-DNO_THREADS")
95*523fa7a6SAndroid Build Coastguard Worker
96*523fa7a6SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
97*523fa7a6SAndroid Build Coastguard Worker    native.cxx_library(
98*523fa7a6SAndroid Build Coastguard Worker        name = name,
99*523fa7a6SAndroid Build Coastguard Worker        deps = [":_" + name],
100*523fa7a6SAndroid Build Coastguard Worker        exported_headers = exported_headers,
101*523fa7a6SAndroid Build Coastguard Worker        header_namespace = "",
102*523fa7a6SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
103*523fa7a6SAndroid Build Coastguard Worker    )
104*523fa7a6SAndroid Build Coastguard Worker
105*523fa7a6SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode.
106*523fa7a6SAndroid Build Coastguard Worker    native.cxx_library(
107*523fa7a6SAndroid Build Coastguard Worker        name = "_" + name,
108*523fa7a6SAndroid Build Coastguard Worker        srcs = srcs,
109*523fa7a6SAndroid Build Coastguard Worker        headers = headers,
110*523fa7a6SAndroid Build Coastguard Worker        # Without header_namespace = "", include requires <third-party/gflags/gflags.h>
111*523fa7a6SAndroid Build Coastguard Worker        # this change enables us to do `#include <gflags/gflags.h>
112*523fa7a6SAndroid Build Coastguard Worker        header_namespace = "",
113*523fa7a6SAndroid Build Coastguard Worker        soname = "lib{}.$(ext)".format(name),
114*523fa7a6SAndroid Build Coastguard Worker        exported_headers = exported_headers,
115*523fa7a6SAndroid Build Coastguard Worker        labels = [
116*523fa7a6SAndroid Build Coastguard Worker            "depslint_never_add",  # Depslint should not add deps on these
117*523fa7a6SAndroid Build Coastguard Worker        ],
118*523fa7a6SAndroid Build Coastguard Worker        preprocessor_flags = copts,
119*523fa7a6SAndroid Build Coastguard Worker        deps = deps + pthread_deps,
120*523fa7a6SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
121*523fa7a6SAndroid Build Coastguard Worker        **kwargs
122*523fa7a6SAndroid Build Coastguard Worker    )
123