blob: 7f5e9d6a3f17cf1d9478c84d88cef12cccbc693d [file] [log] [blame]
licenses(["notice"])
load("//tools/build_rules:select.bzl", "compiler_select", "cpu_select")
load("//tools/build_rules:empty_main.bzl", "empty_main_if_asan")
common_copts = [
#Stuff from their Makefile.
"-Wno-cast-align",
"-Wno-sign-compare",
"-fno-builtin-malloc",
"-fno-builtin-free",
"-fno-builtin-realloc",
"-fno-builtin-calloc",
"-fno-builtin-cfree",
"-fno-builtin-memalign",
"-fno-builtin-posix_memalign",
"-fno-builtin-valloc",
"-fno-builtin-pvalloc",
"-Wno-unused-result",
"-fno-omit-frame-pointer",
"-DNDEBUG",
#Stuff to make it work for us.
"-Ithird_party/gperftools/src/",
"-Ithird_party/empty_config_h",
"-Wno-unused-parameter",
"-Wno-missing-field-initializers",
"-Wno-unused-function",
"-Wno-unused-variable",
"-Wno-format-nonliteral",
"-Wno-switch-enum",
"-Wno-error=cast-align",
"-Wno-error=cast-qual",
#Stuff pulled out of config.h.
"-DHAVE_BUILTIN_EXPECT=1",
"-DHAVE_DECL_CFREE=1",
"-DHAVE_DECL_MEMALIGN=1",
"-DHAVE_DECL_POSIX_MEMALIGN=1",
"-DHAVE_DECL_PVALLOC=1",
"-DHAVE_DECL_UNAME=1",
"-DHAVE_DECL_VALLOC=1",
"-DHAVE_DLFCN_H=1",
"-DHAVE_ELF32_VERSYM=1",
"-DHAVE_EXECINFO_H=1",
"-DHAVE_FCNTL_H=1",
"-DHAVE_FEATURES_H=1",
"-DHAVE_FORK=1",
"-DHAVE_GETEUID=1",
"-DHAVE_GLOB_H=1",
"-DHAVE_GRP_H=1",
"-DHAVE_INTTYPES_H=1",
"-DHAVE_LINUX_PTRACE_H=1",
"-DHAVE_LINUX_SIGEV_THREAD_ID=1",
"-DHAVE_MALLOC_H=1",
"-DHAVE_MEMORY_H=1",
"-DHAVE_MMAP=1",
"-DHAVE_NAMESPACES=1",
"-DHAVE_POLL_H=1",
"-DHAVE_PROGRAM_INVOCATION_NAME=1",
"-DHAVE_PTHREAD=1",
"-DHAVE_PWD_H=1",
"-DHAVE_SBRK=1",
"-DHAVE_SCHED_H=1",
"-DHAVE_STDINT_H=1",
"-DHAVE_STDLIB_H=1",
"-DHAVE_STRINGS_H=1",
"-DHAVE_STRING_H=1",
"-DHAVE_STRUCT_MALLINFO=1",
"-DHAVE_SYS_CDEFS_H=1",
"-DHAVE_SYS_PRCTL_H=1",
"-DHAVE_SYS_RESOURCE_H=1",
"-DHAVE_SYS_SOCKET_H=1",
"-DHAVE_SYS_STAT_H=1",
"-DHAVE_SYS_SYSCALL_H=1",
"-DHAVE_SYS_TYPES_H=1",
"-DHAVE_SYS_UCONTEXT_H=1",
"-DHAVE_SYS_WAIT_H=1",
"-DHAVE_TLS=1",
"-DHAVE_UCONTEXT_H=1",
"-DHAVE_UNISTD_H=1",
"-DHAVE_UNWIND_H=1",
"-DHAVE___ATTRIBUTE__=1",
"-DHAVE___ENVIRON=1",
"-DMALLOC_HOOK_MAYBE_VOLATILE=volatile",
"-DPERFTOOLS_DLL_DECL=",
"-DSTDC_HEADERS=1",
"-DSTL_NAMESPACE=std",
"-DPACKAGE_STRING=\\\"gperftools\\ 2.4\\\"",
"-DPACKAGE_BUGREPORT=\\\"http://www.frc971.org/contact\\\"",
"-DPACKAGE_VERSION=\\\"2.4\\\"",
] + cpu_select({
"amd64": [
"-DHAVE_GETPAGESZE=1",
"-DHAVE_SYS_PARAM_H=1",
"-DPC_FROM_UCONTEXT=uc_mcontext.gregs[REG_RIP]",
"-DPRIdS=\\\"ld\\\"",
"-DPRIuS=\\\"lu\\\"",
"-DPRIxS=\\\"lx\\\"",
],
"arm": [
"-DPC_FROM_UCONTEXT=uc_mcontext.arm_pc",
"-DPRIdS=\\\"d\\\"",
"-DPRIuS=\\\"u\\\"",
"-DPRIxS=\\\"x\\\"",
],
}) + compiler_select({
"clang": [
"-Wno-unused-const-variable",
"-Wno-gnu-alignof-expression",
"-Wno-unused-private-field",
],
"gcc": [],
})
cc_library(
name = "tcmalloc",
srcs = glob(
include = [
"src/*.cc",
"src/*.c",
"src/base/*.cc",
"src/base/*.c",
],
exclude = [
"**/*_unittest.cc",
"**/*_test.cc",
"src/debugallocation.cc",
],
),
hdrs = glob([
"src/*.h",
"src/base/*.h",
"src/gperftools/*.h",
]) + [
"src/third_party/valgrind.h",
],
copts = common_copts,
includes = ["src"],
linkopts = [
"-lrt",
"-lpthread",
],
nocopts = "-std=gnu\\+\\+1y",
visibility = ["//visibility:public"],
deps = [
"//third_party/empty_config_h",
],
alwayslink = True,
)
cc_library(
name = "testutil",
srcs = [
"src/tests/testutil.cc",
],
hdrs = [
"src/tests/testutil.h",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "low_level_alloc_unittest",
size = "medium",
srcs = [
"src/tests/low_level_alloc_unittest.cc",
],
copts = common_copts,
defines = [
"NO_TCMALLOC_SAMPLES",
],
deps = [
":tcmalloc",
],
)
cc_test(
name = "atomicops_unittest",
size = "small",
srcs = [
"src/tests/atomicops_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "stacktrace_unittest",
size = "small",
srcs = [
"src/tests/stacktrace_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "tcmalloc_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/tcmalloc_unittest.cc",
]),
copts = common_copts + [
"-fno-builtin",
#Add this back in when we upgrade clang.
#'-Wno-mismatched-new-delete',
],
deps = [
":tcmalloc",
":testutil",
],
)
cc_test(
name = "tcmalloc_large_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/tcmalloc_large_unittest.cc",
]),
copts = common_copts + [
"-fno-builtin",
],
deps = [
":tcmalloc",
],
)
cc_test(
name = "addressmap_unittest",
size = "medium",
srcs = [
"src/tests/addressmap_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "system_alloc_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/system-alloc_unittest.cc",
]),
copts = common_copts + [
"-fno-builtin",
],
deps = [
":tcmalloc",
],
)
cc_test(
name = "packed_cache_test",
size = "small",
srcs = [
"src/tests/packed-cache_test.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "frag_unittest",
size = "small",
srcs = [
"src/tests/frag_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "markidle_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/markidle_unittest.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
":testutil",
],
)
cc_test(
name = "current_allocated_bytes_test",
size = "small",
srcs = [
"src/tests/current_allocated_bytes_test.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "malloc_hook_test",
size = "small",
srcs = [
"src/tests/malloc_hook_test.cc",
],
copts = common_copts + compiler_select({
"gcc": [
"-Wno-maybe-uninitialized",
],
"clang": [],
}),
deps = [
":tcmalloc",
":testutil",
],
)
cc_test(
name = "malloc_extension_test",
size = "small",
srcs = empty_main_if_asan([
"src/tests/malloc_extension_test.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "malloc_extension_c_test",
size = "small",
srcs = empty_main_if_asan([
"src/tests/malloc_extension_c_test.c",
]),
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "memalign_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/memalign_unittest.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
":testutil",
],
)
cc_test(
name = "page_heap_test",
size = "small",
srcs = [
"src/tests/page_heap_test.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "pagemap_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/pagemap_unittest.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "realloc_unittest",
size = "small",
srcs = [
"src/tests/realloc_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "stack_trace_table_test",
size = "small",
srcs = [
"src/tests/stack_trace_table_test.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "thread_dealloc_unittest",
size = "small",
srcs = [
"src/tests/thread_dealloc_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
":testutil",
],
)
"""
We don't build this because it actually needs to be in a separate binary.
cc_test(
name = 'debugallocation_test',
srcs = [
'src/tests/debugallocation_test.cc',
],
deps = [
':tcmalloc',
],
copts = common_copts,
size = 'small',
)
"""
cc_test(
name = "tcmalloc_large_heap_fragmentation_unittest",
size = "small",
srcs = empty_main_if_asan([
"src/tests/large_heap_fragmentation_unittest.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "raw_printer_test",
size = "small",
srcs = [
"src/tests/raw_printer_test.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "getpc_test",
size = "small",
srcs = empty_main_if_asan([
"src/tests/getpc_test.cc",
]),
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "profiledata_unittest",
size = "small",
srcs = [
"src/tests/profiledata_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "profile_handler_unittest",
size = "small",
srcs = [
"src/tests/profile-handler_unittest.cc",
],
copts = common_copts,
flaky = True,
deps = [
":tcmalloc",
],
)
cc_test(
name = "heap_profiler_unittest",
size = "small",
srcs = [
"src/tests/heap-profiler_unittest.cc",
],
copts = common_copts,
deps = [
":tcmalloc",
],
)
cc_test(
name = "sampler_test",
size = "small",
srcs = [
"src/tests/sampler_test.cc",
],
copts = common_copts + [
"-Wno-type-limits",
],
deps = [
":tcmalloc",
],
)