219 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Implement a macro glog_library() that the BUILD file can load.
 | |
| 
 | |
| # By default, glog is built with gflags support.  You can change this behavior
 | |
| # by using glog_library(with_gflags=0)
 | |
| #
 | |
| # This file is inspired by the following sample BUILD files:
 | |
| #       https://github.com/google/glog/issues/61
 | |
| #       https://github.com/google/glog/files/393474/BUILD.txt
 | |
| #
 | |
| # Known issue: the namespace parameter is not supported on Win32.
 | |
| 
 | |
| def glog_library(namespace = "google", with_gflags = 1, **kwargs):
 | |
|     if native.repository_name() != "@":
 | |
|         repo_name = native.repository_name().lstrip("@")
 | |
|         gendir = "$(GENDIR)/external/" + repo_name
 | |
|         src_windows = "external/%s/src/windows" % repo_name
 | |
|     else:
 | |
|         gendir = "$(GENDIR)"
 | |
|         src_windows = "src/windows"
 | |
| 
 | |
|     # Config setting for WebAssembly target.
 | |
|     native.config_setting(
 | |
|         name = "wasm",
 | |
|         values = {"cpu": "wasm"},
 | |
|     )
 | |
| 
 | |
|     common_copts = [
 | |
|         "-DGLOG_BAZEL_BUILD",
 | |
|         "-DHAVE_STDINT_H",
 | |
|         "-DHAVE_STRING_H",
 | |
|         "-DHAVE_UNWIND_H",
 | |
|     ] + (["-DHAVE_LIB_GFLAGS"] if with_gflags else [])
 | |
| 
 | |
|     wasm_copts = [
 | |
|         # Disable warnings that exists in glog.
 | |
|         "-Wno-sign-compare",
 | |
|         "-Wno-unused-function",
 | |
|         "-Wno-unused-local-typedefs",
 | |
|         "-Wno-unused-variable",
 | |
|         # Inject a C++ namespace.
 | |
|         "-DGOOGLE_NAMESPACE='%s'" % namespace,
 | |
|         # Allows src/base/mutex.h to include pthread.h.
 | |
|         "-DHAVE_PTHREAD",
 | |
|         # Allows src/logging.cc to determine the host name.
 | |
|         "-DHAVE_SYS_UTSNAME_H",
 | |
|         # For src/utilities.cc.
 | |
|         "-DHAVE_SYS_TIME_H",
 | |
|         # Enable dumping stacktrace upon sigaction.
 | |
|         "-DHAVE_SIGACTION",
 | |
|         # For logging.cc.
 | |
|         "-DHAVE_PREAD",
 | |
|         "-DHAVE___ATTRIBUTE__",
 | |
|         "-I%s/glog_internal" % gendir,
 | |
|     ]
 | |
| 
 | |
|     linux_or_darwin_copts = wasm_copts + [
 | |
|         # For src/utilities.cc.
 | |
|         "-DHAVE_SYS_SYSCALL_H",
 | |
|     ]
 | |
| 
 | |
|     freebsd_only_copts = [
 | |
|         # Enable declaration of _Unwind_Backtrace
 | |
|         "-D_GNU_SOURCE",
 | |
|     ]
 | |
| 
 | |
|     darwin_only_copts = [
 | |
|         # For stacktrace.
 | |
|         "-DHAVE_DLADDR",
 | |
|     ]
 | |
| 
 | |
|     windows_only_copts = [
 | |
|         "-DHAVE_SNPRINTF",
 | |
|         "-I" + src_windows,
 | |
|     ]
 | |
| 
 | |
|     windows_only_srcs = [
 | |
|         "src/glog/log_severity.h",
 | |
|         "src/windows/config.h",
 | |
|         "src/windows/port.cc",
 | |
|         "src/windows/port.h",
 | |
|     ]
 | |
| 
 | |
|     gflags_deps = ["@com_github_gflags_gflags//:gflags"] if with_gflags else []
 | |
| 
 | |
|     native.cc_library(
 | |
|         name = "glog",
 | |
|         visibility = ["//visibility:public"],
 | |
|         srcs = [
 | |
|             "src/base/commandlineflags.h",
 | |
|             "src/base/googleinit.h",
 | |
|             "src/base/mutex.h",
 | |
|             "src/demangle.cc",
 | |
|             "src/demangle.h",
 | |
|             "src/logging.cc",
 | |
|             "src/raw_logging.cc",
 | |
|             "src/signalhandler.cc",
 | |
|             "src/stacktrace.h",
 | |
|             "src/stacktrace_generic-inl.h",
 | |
|             "src/stacktrace_libunwind-inl.h",
 | |
|             "src/stacktrace_powerpc-inl.h",
 | |
|             "src/stacktrace_windows-inl.h",
 | |
|             "src/stacktrace_x86-inl.h",
 | |
|             "src/stacktrace_x86_64-inl.h",
 | |
|             "src/symbolize.cc",
 | |
|             "src/symbolize.h",
 | |
|             "src/utilities.cc",
 | |
|             "src/utilities.h",
 | |
|             "src/vlog_is_on.cc",
 | |
|         ] + select({
 | |
|             "@bazel_tools//src/conditions:windows": windows_only_srcs,
 | |
|             "//conditions:default": [":config_h"],
 | |
|         }),
 | |
|         copts =
 | |
|             select({
 | |
|                 "@bazel_tools//src/conditions:windows": common_copts + windows_only_copts,
 | |
|                 "@bazel_tools//src/conditions:darwin": common_copts + linux_or_darwin_copts + darwin_only_copts,
 | |
|                 "@bazel_tools//src/conditions:freebsd": common_copts + linux_or_darwin_copts + freebsd_only_copts,
 | |
|                 ":wasm": common_copts + wasm_copts,
 | |
|                 "//conditions:default": common_copts + linux_or_darwin_copts,
 | |
|             }),
 | |
|         deps = [
 | |
|             ":glog_headers",
 | |
|         ] + gflags_deps,
 | |
|         **kwargs
 | |
|     )
 | |
| 
 | |
|     # glog headers vary depending on the os.
 | |
|     native.cc_library(
 | |
|         name = "glog_headers",
 | |
|         deps = select({
 | |
|             "@bazel_tools//src/conditions:windows": [":windows_glog_headers"],
 | |
|             "//conditions:default": [":default_glog_headers"],
 | |
|         }),
 | |
|     )
 | |
| 
 | |
|     native.cc_library(
 | |
|         name = "windows_glog_headers",
 | |
|         hdrs = native.glob(["src/windows/glog/*.h"]),
 | |
|         strip_include_prefix = "src/windows",
 | |
|         # We need to override the default GOOGLE_GLOG_DLL_DECL from
 | |
|         # src/windows/glog/*.h to match src/windows/config.h.
 | |
|         defines = ["GOOGLE_GLOG_DLL_DECL=__declspec(dllexport)"],
 | |
|         deps = [":strip_include_prefix_hack"],
 | |
|     )
 | |
| 
 | |
|     # Workaround https://github.com/bazelbuild/bazel/issues/6337 by declaring
 | |
|     # the dependencies without strip_include_prefix.
 | |
|     native.cc_library(
 | |
|         name = "strip_include_prefix_hack",
 | |
|         hdrs = native.glob(["src/windows/*.h"]),
 | |
|     )
 | |
| 
 | |
|     native.cc_library(
 | |
|         name = "default_glog_headers",
 | |
|         strip_include_prefix = "src",
 | |
|         hdrs = [
 | |
|             "src/glog/log_severity.h",
 | |
|             ":logging_h",
 | |
|             ":raw_logging_h",
 | |
|             ":stl_logging_h",
 | |
|             ":vlog_is_on_h",
 | |
|         ],
 | |
|     )
 | |
|     native.genrule(
 | |
|         name = "config_h",
 | |
|         srcs = [
 | |
|             "src/config.h.cmake.in",
 | |
|         ],
 | |
|         outs = [
 | |
|             "glog_internal/config.h",
 | |
|         ],
 | |
|         cmd = "awk '{ gsub(/^#cmakedefine/, \"//cmakedefine\"); print; }' $< > $@",
 | |
|     )
 | |
| 
 | |
|     native.genrule(
 | |
|         name = "gen_sh",
 | |
|         outs = [
 | |
|             "gen.sh",
 | |
|         ],
 | |
|         cmd = r'''\
 | |
| #!/bin/sh
 | |
| cat > $@ <<"EOF"
 | |
| sed -e 's/@ac_cv_cxx_using_operator@/1/g' \
 | |
|     -e 's/@ac_cv_have_unistd_h@/1/g' \
 | |
|     -e 's/@ac_cv_have_stdint_h@/1/g' \
 | |
|     -e 's/@ac_cv_have_systypes_h@/1/g' \
 | |
|     -e 's/@ac_cv_have_libgflags@/{}/g' \
 | |
|     -e 's/@ac_cv_have_uint16_t@/1/g' \
 | |
|     -e 's/@ac_cv_have___builtin_expect@/1/g' \
 | |
|     -e 's/@ac_cv_have_.*@/0/g' \
 | |
|     -e 's/@ac_google_start_namespace@/namespace google {{/g' \
 | |
|     -e 's/@ac_google_end_namespace@/}}/g' \
 | |
|     -e 's/@ac_google_namespace@/google/g' \
 | |
|     -e 's/@ac_cv___attribute___noinline@/__attribute__((noinline))/g' \
 | |
|     -e 's/@ac_cv___attribute___noreturn@/__attribute__((noreturn))/g' \
 | |
|     -e 's/@ac_cv___attribute___printf_4_5@/__attribute__((__format__ (__printf__, 4, 5)))/g'
 | |
| EOF
 | |
| '''.format(int(with_gflags)),
 | |
|     )
 | |
| 
 | |
|     [
 | |
|         native.genrule(
 | |
|             name = "%s_h" % f,
 | |
|             srcs = [
 | |
|                 "src/glog/%s.h.in" % f,
 | |
|             ],
 | |
|             outs = [
 | |
|                 "src/glog/%s.h" % f,
 | |
|             ],
 | |
|             cmd = "$(location :gen_sh) < $< > $@",
 | |
|             tools = [":gen_sh"],
 | |
|         )
 | |
|         for f in [
 | |
|             "vlog_is_on",
 | |
|             "stl_logging",
 | |
|             "raw_logging",
 | |
|             "logging",
 | |
|         ]
 | |
|     ]
 |