blob: 4199e3191ec120ee4c3eba890a8550de601a2409 [file] [log] [blame]
load("//bazel/expanded_template:expanded_template.bzl", "expanded_template")
# ------------------------------------------------------------------------------
# Add native rules to configure source files
def gflags_sources(namespace = ["google", "gflags"]):
expanded_template(
name = "gflags_declare_h",
template = "src/gflags_declare.h.in",
out = "gflags_declare.h",
substitutions = {
"@GFLAGS_NAMESPACE@": namespace[0],
"@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@": "1",
"@([A-Z0-9_]+)@": "0",
},
)
gflags_ns_h_files = []
for ns in namespace[1:]:
gflags_ns_h_file = "gflags_{}.h".format(ns)
expanded_template(
name = gflags_ns_h_file.replace(".", "_"),
template = "src/gflags_ns.h.in",
out = gflags_ns_h_file,
substitutions = {
"@ns@": ns,
"@NS@": ns.upper(),
},
)
gflags_ns_h_files.append(gflags_ns_h_file)
expanded_template(
name = "gflags_h",
template = "src/gflags.h.in",
out = "gflags.h",
substitutions = {
"@GFLAGS_ATTRIBUTE_UNUSED@": "",
"@INCLUDE_GFLAGS_NS_H@": "\n".join(["#include \"gflags/{}\"".format(hdr) for hdr in gflags_ns_h_files]),
},
)
expanded_template(
name = "gflags_completions_h",
template = "src/gflags_completions.h.in",
out = "gflags_completions.h",
substitutions = {
"@GFLAGS_NAMESPACE@": namespace[0],
},
)
hdrs = [":gflags_h", ":gflags_declare_h", ":gflags_completions_h"]
hdrs.extend([":" + hdr.replace(".", "_") for hdr in gflags_ns_h_files])
srcs = [
"src/config.h",
"src/gflags.cc",
"src/gflags_completions.cc",
"src/gflags_reporting.cc",
"src/mutex.h",
"src/util.h",
] + select({
"//:x64_windows": [
"src/windows_port.cc",
"src/windows_port.h",
],
"//conditions:default": [],
})
return [hdrs, srcs]
# ------------------------------------------------------------------------------
# Add native rule to build gflags library
def gflags_library(hdrs = [], srcs = [], threads = 1):
name = "gflags"
copts = [
"-DGFLAGS_BAZEL_BUILD",
"-DGFLAGS_INTTYPES_FORMAT_C99",
"-DGFLAGS_IS_A_DLL=0",
# macros otherwise defined by CMake configured defines.h file
"-DHAVE_STDINT_H",
"-DHAVE_SYS_TYPES_H",
"-DHAVE_INTTYPES_H",
"-DHAVE_SYS_STAT_H",
"-DHAVE_STRTOLL",
"-DHAVE_STRTOQ",
"-DHAVE_RWLOCK",
] + select({
"//:x64_windows": [
"-DOS_WINDOWS",
],
"//conditions:default": [
"-DHAVE_UNISTD_H",
"-DHAVE_FNMATCH_H",
"-DHAVE_PTHREAD",
],
})
linkopts = []
if threads:
linkopts += select({
"//:android": [],
"//:x64_windows": [],
"//conditions:default": ["-lpthread"],
})
else:
name += "_nothreads"
copts += ["-DNO_THREADS"]
native.cc_library(
name = name,
hdrs = hdrs,
srcs = srcs,
copts = copts,
linkopts = linkopts,
visibility = ["//visibility:public"],
include_prefix = "gflags",
)