1*08ab5237SOystein Eftevaag# ------------------------------------------------------------------------------ 2*08ab5237SOystein Eftevaag# Add native rules to configure source files 3*08ab5237SOystein Eftevaagdef gflags_sources(namespace=["google", "gflags"]): 4*08ab5237SOystein Eftevaag native.genrule( 5*08ab5237SOystein Eftevaag name = "gflags_declare_h", 6*08ab5237SOystein Eftevaag srcs = ["src/gflags_declare.h.in"], 7*08ab5237SOystein Eftevaag outs = ["gflags_declare.h"], 8*08ab5237SOystein Eftevaag cmd = ("awk '{ " + 9*08ab5237SOystein Eftevaag "gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); " + 10*08ab5237SOystein Eftevaag "gsub(/@(HAVE_STDINT_H|HAVE_SYS_TYPES_H|HAVE_INTTYPES_H|GFLAGS_INTTYPES_FORMAT_C99)@/, \"1\"); " + 11*08ab5237SOystein Eftevaag "gsub(/@([A-Z0-9_]+)@/, \"0\"); " + 12*08ab5237SOystein Eftevaag "print; }' $(<) > $(@)") 13*08ab5237SOystein Eftevaag ) 14*08ab5237SOystein Eftevaag gflags_ns_h_files = [] 15*08ab5237SOystein Eftevaag for ns in namespace[1:]: 16*08ab5237SOystein Eftevaag gflags_ns_h_file = "gflags_{}.h".format(ns) 17*08ab5237SOystein Eftevaag native.genrule( 18*08ab5237SOystein Eftevaag name = gflags_ns_h_file.replace('.', '_'), 19*08ab5237SOystein Eftevaag srcs = ["src/gflags_ns.h.in"], 20*08ab5237SOystein Eftevaag outs = [gflags_ns_h_file], 21*08ab5237SOystein Eftevaag cmd = ("awk '{ " + 22*08ab5237SOystein Eftevaag "gsub(/@ns@/, \"" + ns + "\"); " + 23*08ab5237SOystein Eftevaag "gsub(/@NS@/, \"" + ns.upper() + "\"); " + 24*08ab5237SOystein Eftevaag "print; }' $(<) > $(@)") 25*08ab5237SOystein Eftevaag ) 26*08ab5237SOystein Eftevaag gflags_ns_h_files.append(gflags_ns_h_file) 27*08ab5237SOystein Eftevaag native.genrule( 28*08ab5237SOystein Eftevaag name = "gflags_h", 29*08ab5237SOystein Eftevaag srcs = ["src/gflags.h.in"], 30*08ab5237SOystein Eftevaag outs = ["gflags.h"], 31*08ab5237SOystein Eftevaag cmd = ("awk '{ " + 32*08ab5237SOystein Eftevaag "gsub(/@GFLAGS_ATTRIBUTE_UNUSED@/, \"\"); " + 33*08ab5237SOystein Eftevaag "gsub(/@INCLUDE_GFLAGS_NS_H@/, \"" + '\n'.join(["#include \\\"gflags/{}\\\"".format(hdr) for hdr in gflags_ns_h_files]) + "\"); " + 34*08ab5237SOystein Eftevaag "print; }' $(<) > $(@)") 35*08ab5237SOystein Eftevaag ) 36*08ab5237SOystein Eftevaag native.genrule( 37*08ab5237SOystein Eftevaag name = "gflags_completions_h", 38*08ab5237SOystein Eftevaag srcs = ["src/gflags_completions.h.in"], 39*08ab5237SOystein Eftevaag outs = ["gflags_completions.h"], 40*08ab5237SOystein Eftevaag cmd = "awk '{ gsub(/@GFLAGS_NAMESPACE@/, \"" + namespace[0] + "\"); print; }' $(<) > $(@)" 41*08ab5237SOystein Eftevaag ) 42*08ab5237SOystein Eftevaag hdrs = [":gflags_h", ":gflags_declare_h", ":gflags_completions_h"] 43*08ab5237SOystein Eftevaag hdrs.extend([':' + hdr.replace('.', '_') for hdr in gflags_ns_h_files]) 44*08ab5237SOystein Eftevaag srcs = [ 45*08ab5237SOystein Eftevaag "src/config.h", 46*08ab5237SOystein Eftevaag "src/gflags.cc", 47*08ab5237SOystein Eftevaag "src/gflags_completions.cc", 48*08ab5237SOystein Eftevaag "src/gflags_reporting.cc", 49*08ab5237SOystein Eftevaag "src/mutex.h", 50*08ab5237SOystein Eftevaag "src/util.h", 51*08ab5237SOystein Eftevaag ] + select({ 52*08ab5237SOystein Eftevaag "//:x64_windows": [ 53*08ab5237SOystein Eftevaag "src/windows_port.cc", 54*08ab5237SOystein Eftevaag "src/windows_port.h", 55*08ab5237SOystein Eftevaag ], 56*08ab5237SOystein Eftevaag "//conditions:default": [], 57*08ab5237SOystein Eftevaag }) 58*08ab5237SOystein Eftevaag return [hdrs, srcs] 59*08ab5237SOystein Eftevaag 60*08ab5237SOystein Eftevaag# ------------------------------------------------------------------------------ 61*08ab5237SOystein Eftevaag# Add native rule to build gflags library 62*08ab5237SOystein Eftevaagdef gflags_library(hdrs=[], srcs=[], threads=1): 63*08ab5237SOystein Eftevaag name = "gflags" 64*08ab5237SOystein Eftevaag copts = [ 65*08ab5237SOystein Eftevaag "-DGFLAGS_BAZEL_BUILD", 66*08ab5237SOystein Eftevaag "-DGFLAGS_INTTYPES_FORMAT_C99", 67*08ab5237SOystein Eftevaag "-DGFLAGS_IS_A_DLL=0", 68*08ab5237SOystein Eftevaag # macros otherwise defined by CMake configured defines.h file 69*08ab5237SOystein Eftevaag "-DHAVE_STDINT_H", 70*08ab5237SOystein Eftevaag "-DHAVE_SYS_TYPES_H", 71*08ab5237SOystein Eftevaag "-DHAVE_INTTYPES_H", 72*08ab5237SOystein Eftevaag "-DHAVE_SYS_STAT_H", 73*08ab5237SOystein Eftevaag "-DHAVE_STRTOLL", 74*08ab5237SOystein Eftevaag "-DHAVE_STRTOQ", 75*08ab5237SOystein Eftevaag "-DHAVE_RWLOCK", 76*08ab5237SOystein Eftevaag ] + select({ 77*08ab5237SOystein Eftevaag "//:x64_windows": [ 78*08ab5237SOystein Eftevaag "-DOS_WINDOWS", 79*08ab5237SOystein Eftevaag ], 80*08ab5237SOystein Eftevaag "//conditions:default": [ 81*08ab5237SOystein Eftevaag "-DHAVE_UNISTD_H", 82*08ab5237SOystein Eftevaag "-DHAVE_FNMATCH_H", 83*08ab5237SOystein Eftevaag "-DHAVE_PTHREAD", 84*08ab5237SOystein Eftevaag ], 85*08ab5237SOystein Eftevaag }) 86*08ab5237SOystein Eftevaag linkopts = [] 87*08ab5237SOystein Eftevaag if threads: 88*08ab5237SOystein Eftevaag linkopts += select({ 89*08ab5237SOystein Eftevaag "//:x64_windows": [], 90*08ab5237SOystein Eftevaag "//conditions:default": ["-lpthread"], 91*08ab5237SOystein Eftevaag }) 92*08ab5237SOystein Eftevaag else: 93*08ab5237SOystein Eftevaag name += "_nothreads" 94*08ab5237SOystein Eftevaag copts += ["-DNO_THREADS"] 95*08ab5237SOystein Eftevaag native.cc_library( 96*08ab5237SOystein Eftevaag name = name, 97*08ab5237SOystein Eftevaag hdrs = hdrs, 98*08ab5237SOystein Eftevaag srcs = srcs, 99*08ab5237SOystein Eftevaag copts = copts, 100*08ab5237SOystein Eftevaag linkopts = linkopts, 101*08ab5237SOystein Eftevaag visibility = ["//visibility:public"], 102*08ab5237SOystein Eftevaag include_prefix = 'gflags' 103*08ab5237SOystein Eftevaag ) 104