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