| 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", |
| ) |