diff options
author | Andreas Schuh <andreas.schuh.84@gmail.com> | 2016-11-25 13:47:29 +0000 |
---|---|---|
committer | Andreas Schuh <andreas.schuh.84@gmail.com> | 2016-11-25 17:18:01 +0000 |
commit | 37e2867335a680f8478cb8bd811b598e069c56c1 (patch) | |
tree | 5ccec940fa758d64bc5da3555dd370e850cf52ff /bazel | |
parent | 8f2c22a03f40da83f48d8e7c799d551c8005a8b6 (diff) | |
download | gflags-37e2867335a680f8478cb8bd811b598e069c56c1.tar.gz |
enh: Refactored Bazel BUILD rules
Diffstat (limited to 'bazel')
-rw-r--r-- | bazel/gflags.bzl | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/bazel/gflags.bzl b/bazel/gflags.bzl new file mode 100644 index 0000000..6a89f88 --- /dev/null +++ b/bazel/gflags.bzl @@ -0,0 +1,92 @@ +# ------------------------------------------------------------------------------ +# Add native rules to configure source files +def gflags_sources(namespace=["google", "gflags"]): + native.genrule( + name = "config_h", + srcs = ["src/config.h.in"], + outs = ["config.h"], + cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $(<) > $(@)" + ) + native.genrule( + name = "gflags_declare_h", + srcs = ["src/gflags_declare.h.in"], + outs = ["gflags/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/" + 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/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/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 = [ + ":config_h", + "src/gflags.cc", + "src/gflags_completions.cc", + "src/gflags_reporting.cc", + "src/mutex.h", + "src/util.h" + ] + return [hdrs, srcs] + +# ------------------------------------------------------------------------------ +# Add native rule to build gflags library +def gflags_library(hdrs=[], srcs=[], threads=1): + name = "gflags" + copts = [ + "-DHAVE_STDINT_H", + "-DHAVE_SYS_TYPES_H", + "-DHAVE_INTTYPES_H", + "-DHAVE_SYS_STAT_H", + "-DHAVE_UNISTD_H", + "-DHAVE_FNMATCH_H", + "-DHAVE_STRTOLL", + "-DHAVE_STRTOQ", + "-DHAVE_PTHREAD", + "-DHAVE_RWLOCK", + "-DGFLAGS_INTTYPES_FORMAT_C99", + "-DGFLAGS_IS_A_DLL=0", + ] + linkopts = [] + if threads: + linkopts.append("-lpthread") + else: + name += "_nothreads" + copts.append("-DNO_THREADS") + native.cc_library( + name = name, + hdrs = hdrs, + srcs = srcs, + includes = ["$(GENDIR)"], + copts = copts, + linkopts = linkopts, + visibility = ["//visibility:public"] + ) |