1*523fa7a6SAndroid Build Coastguard Worker# ------------------------------------------------------------------------------ 2*523fa7a6SAndroid Build Coastguard Worker# Add native rules to configure source files 3*523fa7a6SAndroid Build Coastguard Worker# Not tested for building on windows platforms 4*523fa7a6SAndroid Build Coastguard Workerdef gflags_sources(namespace = ["google", "gflags"]): 5*523fa7a6SAndroid Build Coastguard Worker common_preamble = "mkdir -p `dirname $OUT` && " 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 8*523fa7a6SAndroid Build Coastguard Worker native.genrule( 9*523fa7a6SAndroid Build Coastguard Worker name = "gflags_declare_h", 10*523fa7a6SAndroid Build Coastguard Worker srcs = ["gflags/src/gflags_declare.h.in"], 11*523fa7a6SAndroid Build Coastguard Worker out = "gflags/gflags_declare.h", 12*523fa7a6SAndroid Build Coastguard Worker cmd = (common_preamble + "awk '{ " + 13*523fa7a6SAndroid Build Coastguard Worker "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " + 14*523fa7a6SAndroid Build Coastguard Worker "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " + 15*523fa7a6SAndroid Build Coastguard Worker "gsub(/@([A-Z0-9_]+)@/, \"0\"); " + 16*523fa7a6SAndroid Build Coastguard Worker "print; }' $SRCS > $OUT"), 17*523fa7a6SAndroid Build Coastguard Worker ) 18*523fa7a6SAndroid Build Coastguard Worker gflags_ns_h_files = [] 19*523fa7a6SAndroid Build Coastguard Worker for ns in namespace[1:]: 20*523fa7a6SAndroid Build Coastguard Worker gflags_ns_h_file = "gflags_{}.h".format(ns) 21*523fa7a6SAndroid Build Coastguard Worker 22*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 23*523fa7a6SAndroid Build Coastguard Worker native.genrule( 24*523fa7a6SAndroid Build Coastguard Worker name = gflags_ns_h_file.replace(".", "_"), 25*523fa7a6SAndroid Build Coastguard Worker srcs = ["gflags/src/gflags_ns.h.in"], 26*523fa7a6SAndroid Build Coastguard Worker out = "gflags/" + gflags_ns_h_file, 27*523fa7a6SAndroid Build Coastguard Worker cmd = (common_preamble + "awk '{ " + 28*523fa7a6SAndroid Build Coastguard Worker "gsub(/@ns@/, \"" + ns + "\"); " + 29*523fa7a6SAndroid Build Coastguard Worker "gsub(/@NS@/, \"" + ns.upper() + "\"); " + 30*523fa7a6SAndroid Build Coastguard Worker "print; }' $SRCS > $OUT"), 31*523fa7a6SAndroid Build Coastguard Worker ) 32*523fa7a6SAndroid Build Coastguard Worker gflags_ns_h_files.append(gflags_ns_h_file) 33*523fa7a6SAndroid Build Coastguard Worker 34*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 35*523fa7a6SAndroid Build Coastguard Worker native.genrule( 36*523fa7a6SAndroid Build Coastguard Worker name = "gflags_h", 37*523fa7a6SAndroid Build Coastguard Worker srcs = ["gflags/src/gflags.h.in"], 38*523fa7a6SAndroid Build Coastguard Worker out = "gflags/gflags.h", 39*523fa7a6SAndroid Build Coastguard Worker cmd = (common_preamble + "awk '{ " + 40*523fa7a6SAndroid Build Coastguard Worker "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " + 41*523fa7a6SAndroid Build Coastguard Worker "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + "\n".join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " + 42*523fa7a6SAndroid Build Coastguard Worker "print; }' $SRCS > $OUT"), 43*523fa7a6SAndroid Build Coastguard Worker ) 44*523fa7a6SAndroid Build Coastguard Worker 45*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 46*523fa7a6SAndroid Build Coastguard Worker native.genrule( 47*523fa7a6SAndroid Build Coastguard Worker name = "gflags_completions_h", 48*523fa7a6SAndroid Build Coastguard Worker srcs = ["gflags/src/gflags_completions.h.in"], 49*523fa7a6SAndroid Build Coastguard Worker out = "gflags/gflags_completions.h", 50*523fa7a6SAndroid Build Coastguard Worker cmd = common_preamble + "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $SRCS > $OUT", 51*523fa7a6SAndroid Build Coastguard Worker ) 52*523fa7a6SAndroid Build Coastguard Worker headers = { 53*523fa7a6SAndroid Build Coastguard Worker "config.h": "gflags/src/config.h", 54*523fa7a6SAndroid Build Coastguard Worker "mutex.h": "gflags/src/mutex.h", 55*523fa7a6SAndroid Build Coastguard Worker "util.h": "gflags/src/util.h", 56*523fa7a6SAndroid Build Coastguard Worker "windows_port.h": "gflags/src/windows_port.h", 57*523fa7a6SAndroid Build Coastguard Worker } 58*523fa7a6SAndroid Build Coastguard Worker exported_headers = { 59*523fa7a6SAndroid Build Coastguard Worker "gflags/gflags.h": ":gflags_h", 60*523fa7a6SAndroid Build Coastguard Worker "gflags/gflags_completions.h": ":gflags_completions_h", 61*523fa7a6SAndroid Build Coastguard Worker "gflags/gflags_declare.h": ":gflags_declare_h", 62*523fa7a6SAndroid Build Coastguard Worker } 63*523fa7a6SAndroid Build Coastguard Worker exported_headers.update({"gflags/" + hdr: ":" + hdr.replace(".", "_") for hdr in gflags_ns_h_files}) 64*523fa7a6SAndroid Build Coastguard Worker srcs = [ 65*523fa7a6SAndroid Build Coastguard Worker "gflags/src/gflags.cc", 66*523fa7a6SAndroid Build Coastguard Worker "gflags/src/gflags_completions.cc", 67*523fa7a6SAndroid Build Coastguard Worker "gflags/src/gflags_reporting.cc", 68*523fa7a6SAndroid Build Coastguard Worker ] 69*523fa7a6SAndroid Build Coastguard Worker return [exported_headers, headers, srcs] 70*523fa7a6SAndroid Build Coastguard Worker 71*523fa7a6SAndroid Build Coastguard Worker# ------------------------------------------------------------------------------ 72*523fa7a6SAndroid Build Coastguard Worker# Add native rule to build gflags library 73*523fa7a6SAndroid Build Coastguard Workerdef gflags_library(name, exported_headers = {}, headers = {}, srcs = [], threads = True, deps = [], enable_static_variant = None, **kwargs): 74*523fa7a6SAndroid Build Coastguard Worker copts_common = [ 75*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_STDINT_H", 76*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_SYS_TYPES_H", 77*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_INTTYPES_H", 78*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_SYS_STAT_H", 79*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_UNISTD_H", 80*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_STRTOLL", 81*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_STRTOQ", 82*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_RWLOCK", 83*523fa7a6SAndroid Build Coastguard Worker "-DGFLAGS_INTTYPES_FORMAT_C99", 84*523fa7a6SAndroid Build Coastguard Worker "-DGFLAGS_IS_A_DLL=0", 85*523fa7a6SAndroid Build Coastguard Worker "-DGFLAGS_BAZEL_BUILD", # to avoid defines.h include 86*523fa7a6SAndroid Build Coastguard Worker ] 87*523fa7a6SAndroid Build Coastguard Worker 88*523fa7a6SAndroid Build Coastguard Worker copts = copts_common + [ 89*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_FNMATCH_H", 90*523fa7a6SAndroid Build Coastguard Worker "-DHAVE_PTHREAD", 91*523fa7a6SAndroid Build Coastguard Worker ] 92*523fa7a6SAndroid Build Coastguard Worker 93*523fa7a6SAndroid Build Coastguard Worker pthread_deps = [] 94*523fa7a6SAndroid Build Coastguard Worker copts.append("-DNO_THREADS") 95*523fa7a6SAndroid Build Coastguard Worker 96*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 97*523fa7a6SAndroid Build Coastguard Worker native.cxx_library( 98*523fa7a6SAndroid Build Coastguard Worker name = name, 99*523fa7a6SAndroid Build Coastguard Worker deps = [":_" + name], 100*523fa7a6SAndroid Build Coastguard Worker exported_headers = exported_headers, 101*523fa7a6SAndroid Build Coastguard Worker header_namespace = "", 102*523fa7a6SAndroid Build Coastguard Worker visibility = ["PUBLIC"], 103*523fa7a6SAndroid Build Coastguard Worker ) 104*523fa7a6SAndroid Build Coastguard Worker 105*523fa7a6SAndroid Build Coastguard Worker # @lint-ignore BUCKLINT: native and fb_native are explicitly forbidden in fbcode. 106*523fa7a6SAndroid Build Coastguard Worker native.cxx_library( 107*523fa7a6SAndroid Build Coastguard Worker name = "_" + name, 108*523fa7a6SAndroid Build Coastguard Worker srcs = srcs, 109*523fa7a6SAndroid Build Coastguard Worker headers = headers, 110*523fa7a6SAndroid Build Coastguard Worker # Without header_namespace = "", include requires <third-party/gflags/gflags.h> 111*523fa7a6SAndroid Build Coastguard Worker # this change enables us to do `#include <gflags/gflags.h> 112*523fa7a6SAndroid Build Coastguard Worker header_namespace = "", 113*523fa7a6SAndroid Build Coastguard Worker soname = "lib{}.$(ext)".format(name), 114*523fa7a6SAndroid Build Coastguard Worker exported_headers = exported_headers, 115*523fa7a6SAndroid Build Coastguard Worker labels = [ 116*523fa7a6SAndroid Build Coastguard Worker "depslint_never_add", # Depslint should not add deps on these 117*523fa7a6SAndroid Build Coastguard Worker ], 118*523fa7a6SAndroid Build Coastguard Worker preprocessor_flags = copts, 119*523fa7a6SAndroid Build Coastguard Worker deps = deps + pthread_deps, 120*523fa7a6SAndroid Build Coastguard Worker visibility = ["PUBLIC"], 121*523fa7a6SAndroid Build Coastguard Worker **kwargs 122*523fa7a6SAndroid Build Coastguard Worker ) 123