277 lines
8.9 KiB
Python
277 lines
8.9 KiB
Python
|
# Implement a macro glog_library() that the BUILD.bazel 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 expand_template_impl(ctx):
|
||
|
ctx.actions.expand_template(
|
||
|
template = ctx.file.template,
|
||
|
output = ctx.outputs.out,
|
||
|
substitutions = ctx.attr.substitutions,
|
||
|
)
|
||
|
|
||
|
expand_template = rule(
|
||
|
implementation = expand_template_impl,
|
||
|
attrs = {
|
||
|
"template": attr.label(mandatory = True, allow_single_file = True),
|
||
|
"substitutions": attr.string_dict(mandatory = True),
|
||
|
"out": attr.output(mandatory = True),
|
||
|
},
|
||
|
)
|
||
|
|
||
|
def dict_union(x, y):
|
||
|
z = {}
|
||
|
z.update(x)
|
||
|
z.update(y)
|
||
|
return z
|
||
|
|
||
|
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"},
|
||
|
)
|
||
|
|
||
|
# Detect when building with clang-cl on Windows.
|
||
|
native.config_setting(
|
||
|
name = "clang-cl",
|
||
|
values = {"compiler": "clang-cl"},
|
||
|
)
|
||
|
|
||
|
common_copts = [
|
||
|
"-DGLOG_BAZEL_BUILD",
|
||
|
# Inject a C++ namespace.
|
||
|
"-DGOOGLE_NAMESPACE='%s'" % namespace,
|
||
|
"-DHAVE_CXX11_NULLPTR_T",
|
||
|
"-DHAVE_STDINT_H",
|
||
|
"-DHAVE_STRING_H",
|
||
|
"-DGLOG_CUSTOM_PREFIX_SUPPORT",
|
||
|
"-I%s/glog_internal" % gendir,
|
||
|
] + (["-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",
|
||
|
# 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",
|
||
|
"-DHAVE_UNWIND_H",
|
||
|
# Enable dumping stacktrace upon sigaction.
|
||
|
"-DHAVE_SIGACTION",
|
||
|
# For logging.cc.
|
||
|
"-DHAVE_PREAD",
|
||
|
"-DHAVE___ATTRIBUTE__",
|
||
|
]
|
||
|
|
||
|
linux_or_darwin_copts = wasm_copts + [
|
||
|
"-DGLOG_EXPORT=__attribute__((visibility(\\\"default\\\")))",
|
||
|
# For src/utilities.cc.
|
||
|
"-DHAVE_SYS_SYSCALL_H",
|
||
|
# For src/logging.cc to create symlinks.
|
||
|
"-DHAVE_UNISTD_H",
|
||
|
"-fvisibility-inlines-hidden",
|
||
|
"-fvisibility=hidden",
|
||
|
]
|
||
|
|
||
|
freebsd_only_copts = [
|
||
|
# Enable declaration of _Unwind_Backtrace
|
||
|
"-D_GNU_SOURCE",
|
||
|
]
|
||
|
|
||
|
darwin_only_copts = [
|
||
|
# For stacktrace.
|
||
|
"-DHAVE_DLADDR",
|
||
|
# Avoid deprecated syscall().
|
||
|
"-DHAVE_PTHREAD_THREADID_NP",
|
||
|
]
|
||
|
|
||
|
windows_only_copts = [
|
||
|
# Override -DGLOG_EXPORT= from the cc_library's defines.
|
||
|
"-DGLOG_EXPORT=__declspec(dllexport)",
|
||
|
"-DGLOG_NO_ABBREVIATED_SEVERITIES",
|
||
|
"-DHAVE_SNPRINTF",
|
||
|
"-I" + src_windows,
|
||
|
]
|
||
|
|
||
|
clang_cl_only_copts = [
|
||
|
# Allow the override of -DGLOG_EXPORT.
|
||
|
"-Wno-macro-redefined",
|
||
|
]
|
||
|
|
||
|
windows_only_srcs = [
|
||
|
"src/glog/log_severity.h",
|
||
|
"src/windows/dirent.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 = [
|
||
|
":config_h",
|
||
|
"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_unwind-inl.h",
|
||
|
"src/stacktrace_windows-inl.h",
|
||
|
"src/stacktrace_x86-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": [],
|
||
|
}),
|
||
|
hdrs = [
|
||
|
"src/glog/log_severity.h",
|
||
|
"src/glog/platform.h",
|
||
|
":logging_h",
|
||
|
":raw_logging_h",
|
||
|
":stl_logging_h",
|
||
|
":vlog_is_on_h",
|
||
|
],
|
||
|
strip_include_prefix = "src",
|
||
|
defines = select({
|
||
|
# GLOG_EXPORT is normally set by export.h, but that's not
|
||
|
# generated for Bazel.
|
||
|
"@bazel_tools//src/conditions:windows": [
|
||
|
"GLOG_EXPORT=",
|
||
|
"GLOG_DEPRECATED=__declspec(deprecated)",
|
||
|
"GLOG_NO_ABBREVIATED_SEVERITIES",
|
||
|
],
|
||
|
"//conditions:default": [
|
||
|
"GLOG_DEPRECATED=__attribute__((deprecated))",
|
||
|
"GLOG_EXPORT=__attribute__((visibility(\\\"default\\\")))",
|
||
|
],
|
||
|
}),
|
||
|
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,
|
||
|
}) +
|
||
|
select({
|
||
|
":clang-cl": clang_cl_only_copts,
|
||
|
"//conditions:default": []
|
||
|
}),
|
||
|
deps = gflags_deps + select({
|
||
|
"@bazel_tools//src/conditions:windows": [":strip_include_prefix_hack"],
|
||
|
"//conditions:default": [],
|
||
|
}),
|
||
|
**kwargs
|
||
|
)
|
||
|
|
||
|
# 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 = [
|
||
|
"src/glog/log_severity.h",
|
||
|
":logging_h",
|
||
|
":raw_logging_h",
|
||
|
":stl_logging_h",
|
||
|
":vlog_is_on_h",
|
||
|
],
|
||
|
)
|
||
|
|
||
|
expand_template(
|
||
|
name = "config_h",
|
||
|
template = "src/config.h.cmake.in",
|
||
|
out = "glog_internal/config.h",
|
||
|
substitutions = {"#cmakedefine": "//cmakedefine"},
|
||
|
)
|
||
|
|
||
|
common_config = {
|
||
|
"@ac_cv_cxx11_atomic@": "1",
|
||
|
"@ac_cv_cxx11_constexpr@": "1",
|
||
|
"@ac_cv_cxx11_chrono@": "1",
|
||
|
"@ac_cv_cxx11_nullptr_t@": "1",
|
||
|
"@ac_cv_cxx_using_operator@": "1",
|
||
|
"@ac_cv_have_inttypes_h@": "0",
|
||
|
"@ac_cv_have_u_int16_t@": "0",
|
||
|
"@ac_cv_have_glog_export@": "0",
|
||
|
"@ac_google_start_namespace@": "namespace google {",
|
||
|
"@ac_google_end_namespace@": "}",
|
||
|
"@ac_google_namespace@": "google",
|
||
|
}
|
||
|
|
||
|
posix_config = dict_union(common_config, {
|
||
|
"@ac_cv_have_unistd_h@": "1",
|
||
|
"@ac_cv_have_stdint_h@": "1",
|
||
|
"@ac_cv_have_systypes_h@": "1",
|
||
|
"@ac_cv_have_uint16_t@": "1",
|
||
|
"@ac_cv_have___uint16@": "0",
|
||
|
"@ac_cv_have___builtin_expect@": "1",
|
||
|
"@ac_cv_have_libgflags@": "1" if with_gflags else "0",
|
||
|
"@ac_cv___attribute___noinline@": "__attribute__((noinline))",
|
||
|
"@ac_cv___attribute___noreturn@": "__attribute__((noreturn))",
|
||
|
"@ac_cv___attribute___printf_4_5@": "__attribute__((__format__(__printf__, 4, 5)))",
|
||
|
})
|
||
|
|
||
|
windows_config = dict_union(common_config, {
|
||
|
"@ac_cv_have_unistd_h@": "0",
|
||
|
"@ac_cv_have_stdint_h@": "0",
|
||
|
"@ac_cv_have_systypes_h@": "0",
|
||
|
"@ac_cv_have_uint16_t@": "0",
|
||
|
"@ac_cv_have___uint16@": "1",
|
||
|
"@ac_cv_have___builtin_expect@": "0",
|
||
|
"@ac_cv_have_libgflags@": "0",
|
||
|
"@ac_cv___attribute___noinline@": "",
|
||
|
"@ac_cv___attribute___noreturn@": "__declspec(noreturn)",
|
||
|
"@ac_cv___attribute___printf_4_5@": "",
|
||
|
})
|
||
|
|
||
|
[
|
||
|
expand_template(
|
||
|
name = "%s_h" % f,
|
||
|
template = "src/glog/%s.h.in" % f,
|
||
|
out = "src/glog/%s.h" % f,
|
||
|
substitutions = select({
|
||
|
"@bazel_tools//src/conditions:windows": windows_config,
|
||
|
"//conditions:default": posix_config,
|
||
|
}),
|
||
|
)
|
||
|
for f in [
|
||
|
"vlog_is_on",
|
||
|
"stl_logging",
|
||
|
"raw_logging",
|
||
|
"logging",
|
||
|
]
|
||
|
]
|