# 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",
            ]
}
