You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.5 KiB
104 lines
3.5 KiB
4 months ago
|
# ------------------------------------------------------------------------------
|
||
|
# Add native rules to configure source files
|
||
|
def gflags_sources(namespace=["google", "gflags"]):
|
||
|
native.genrule(
|
||
|
name = "gflags_declare_h",
|
||
|
srcs = ["src/gflags_declare.h.in"],
|
||
|
outs = ["gflags_declare.h"],
|
||
|
cmd = ("awk '{ " +
|
||
|
"gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " +
|
||
|
"gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " +
|
||
|
"gsub(/@([A-Z0-9_]+)@/, \"0\"); " +
|
||
|
"print; }' $(<) > $(@)")
|
||
|
)
|
||
|
gflags_ns_h_files = []
|
||
|
for ns in namespace[1:]:
|
||
|
gflags_ns_h_file = "gflags_{}.h".format(ns)
|
||
|
native.genrule(
|
||
|
name = gflags_ns_h_file.replace('.', '_'),
|
||
|
srcs = ["src/gflags_ns.h.in"],
|
||
|
outs = [gflags_ns_h_file],
|
||
|
cmd = ("awk '{ " +
|
||
|
"gsub(/@ns@/, \"" + ns + "\"); " +
|
||
|
"gsub(/@NS@/, \"" + ns.upper() + "\"); " +
|
||
|
"print; }' $(<) > $(@)")
|
||
|
)
|
||
|
gflags_ns_h_files.append(gflags_ns_h_file)
|
||
|
native.genrule(
|
||
|
name = "gflags_h",
|
||
|
srcs = ["src/gflags.h.in"],
|
||
|
outs = ["gflags.h"],
|
||
|
cmd = ("awk '{ " +
|
||
|
"gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " +
|
||
|
"gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + '\n'.join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " +
|
||
|
"print; }' $(<) > $(@)")
|
||
|
)
|
||
|
native.genrule(
|
||
|
name = "gflags_completions_h",
|
||
|
srcs = ["src/gflags_completions.h.in"],
|
||
|
outs = ["gflags_completions.h"],
|
||
|
cmd = "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $(<) > $(@)"
|
||
|
)
|
||
|
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({
|
||
|
"//: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'
|
||
|
)
|