# 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-missing-field-initializers",
    "-Wno-sign-compare",
    "-Wno-type-limits",
    "-Wno-unused-result",
    "-Wno-unused-parameter",
    "-Wno-unused-function",
    "-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",
  ]
  if (is_clang) {
    cflags += [ "-Wno-unused-const-variable" ]
  }
  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" ]
  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" ]
  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" ]
  }

  set_sources_assignment_filter([
                                  # 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/base/thread_lister.c",
                                  "gperftools/src/base/thread_lister.h",
                                  "gperftools/src/profile-handler.cc",
                                  "gperftools/src/profile-handler.h",
                                  "gperftools/src/profiledata.cc",
                                  "gperftools/src/profiledata.h",
                                  "gperftools/src/profiler.cc",
                                ])

  sources = tcmalloc_sources
}
