dart-sdk/third_party/tcmalloc/BUILD.gn
Daco Harkes b1e59721d4 Revert "[vm] Remove tcmalloc and malloc profiler."
This reverts commit c67fac9cb4.

Reason for revert: Regresses `dart:io` performance and causes
failures.
https://github.com/dart-lang/sdk/issues/51639

Original change's description:
> [vm] Remove tcmalloc and malloc profiler.
>
> The standalone VM originally began statically linking tcmalloc to work around bugs in the system malloc for Fiber. Later it used tcmalloc's hooks to implement a profiler, but this is rarely used since it is only available in debug mode, misses early allocations, and often misses late allocations from an exhausted sample buffer. Removing it altogether avoids build complexity around which combinations of compiler/architecture/sysroot support tcmalloc, and reduces binary size.
>
> TEST=ci
> Change-Id: I4b259e18b82b2d12a2a60962aabf83bd8d997d19
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286120
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Commit-Queue: Ryan Macnak <rmacnak@google.com>

Change-Id: I4395edd6f5bd7e26b4e38f4d931ad2ea67afba18
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286925
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2023-03-06 10:28:33 +00:00

138 lines
3.4 KiB
Plaintext

# Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
import("tcmalloc_sources.gni")
config("internal_config") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
cflags = [
"-Wall",
"-Wextra",
"-Wno-format",
"-Wno-missing-field-initializers",
"-Wno-sign-compare",
"-Wno-type-limits",
"-Wno-unused-result",
"-Wno-unused-parameter",
"-Wno-unused-function",
"-Wno-unused-but-set-variable",
"-Wno-vla",
"-g3",
"-ggdb3",
"-fstack-protector",
"-Wa,--noexecstack",
"-fno-omit-frame-pointer",
"-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",
"-fsized-deallocation",
"-faligned-new",
]
if (is_clang) {
cflags += [
"-Wno-unused-const-variable",
"-Wno-implicit-int-float-conversion",
]
}
if (current_cpu == "arm" && !is_clang) {
cflags += [ "-Wno-psabi" ]
}
}
config("link_config") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
ldflags = [
# Don't let linker rip this symbol out, otherwise the heap&cpu
# profilers will not initialize properly on startup.
"-Wl,-uIsHeapProfilerRunning,-uProfilerStart",
]
}
source_set("dynamic_annotations") {
configs -= [
"//build/config/compiler:chromium_code",
"//build/config/compiler:clang_stackrealign",
]
configs += [ ":internal_config" ]
include_dirs = [
"include",
"gperftools/src/base",
"gperftools/src",
]
sources = [
"gperftools/src/base/dynamic_annotations.c",
"gperftools/src/base/dynamic_annotations.h",
]
}
source_set("tcmalloc") {
configs -= [
"//build/config/compiler:chromium_code",
"//build/config/compiler:clang_stackrealign",
"//build/config/compiler:compiler_arm_thumb",
]
configs += [ ":internal_config" ]
public_configs = [ ":link_config" ]
deps = [ ":dynamic_annotations" ]
include_dirs = [
"include",
"gperftools/src/base",
"gperftools/src",
]
# Disable the heap checker in tcmalloc.
defines = [
"ENABLE_EMERGENCY_MALLOC",
"NO_HEAP_CHECK",
# Disable debug even in a Dart Debug build. It is too slow.
"NDEBUG",
]
if (is_product) {
# Disable stack sampling for heap profiling in Product builds.
defines += [ "NO_TCMALLOC_SAMPLES" ]
# To override the C library functions, we can't hide symbols.
configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
}
cflags = [
"-Wnon-virtual-dtor",
"-Woverloaded-virtual",
"-fno-rtti",
"-fpermissive",
]
if (!is_clang) {
cflags += [ "-Wno-format" ]
}
sources = tcmalloc_sources - [
# No debug allocator.
"gperftools/src/debugallocation.cc",
# Not needed when using emergency malloc.
"gperftools/src/fake_stacktrace_scope.cc",
# Not using the cpuprofiler
"gperftools/src/profile-handler.cc",
"gperftools/src/profile-handler.h",
"gperftools/src/profiledata.cc",
"gperftools/src/profiledata.h",
"gperftools/src/profiler.cc",
]
}