# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")
import("//build/config/allocator.gni")
import("//build/config/compiler/compiler.gni")

declare_args() {
  # Provide a way to force disable debugallocation in Debug builds,
  # e.g. for profiling (it's more rare to profile Debug builds,
  # but people sometimes need to do that).
  enable_debugallocation = is_debug
}

# Allocator shim is only enabled for Release static builds.
win_use_allocator_shim = is_win && !is_component_build && !is_debug

# This "allocator" meta-target will forward to the default allocator according
# to the build settings.
group("allocator") {
  public_deps = []
  deps = []

  if (use_allocator == "tcmalloc") {
    deps += [ ":tcmalloc" ]
  }

  if (win_use_allocator_shim) {
    public_deps += [ ":allocator_shim" ]
  }
}

# This config defines ALLOCATOR_SHIM in the same conditions that the allocator
# shim will be used by the allocator target.
#
# TODO(brettw) this is only used in one place and is kind of mess, because it
# assumes that the library using it will eventually be linked with
# //base/allocator in the default way. Clean this up and delete this.
config("allocator_shim_define") {
  if (win_use_allocator_shim) {
    defines = [ "ALLOCATOR_SHIM" ]
  }
}

config("tcmalloc_flags") {
  defines = []
  if (enable_debugallocation) {
    defines += [
      # Use debugallocation for Debug builds to catch problems early
      # and cleanly, http://crbug.com/30715 .
      "TCMALLOC_FOR_DEBUGALLOCATION",
    ]
  }
  if (use_experimental_allocator_shim) {
    defines += [ "TCMALLOC_DONT_REPLACE_SYSTEM_ALLOC" ]
  }
  if (is_clang) {
    cflags = [
      # tcmalloc initializes some fields in the wrong order.
      "-Wno-reorder",

      # tcmalloc contains some unused local template specializations.
      "-Wno-unused-function",

      # tcmalloc uses COMPILE_ASSERT without static_assert but with
      # typedefs.
      "-Wno-unused-local-typedefs",

      # for magic2_ in debugallocation.cc (only built in Debug builds)
      # typedefs.
      "-Wno-unused-private-field",
    ]
  }
}

# This config is only used on Windows static release builds for the
# allocator shim.
if (win_use_allocator_shim) {
  source_set("allocator_shim") {
    sources = [
      "allocator_shim_win.cc",
      "allocator_shim_win.h",
    ]
    configs += [ ":allocator_shim_define" ]
  }
}

if (use_allocator == "tcmalloc") {
  # tcmalloc currently won't compile on Android.
  source_set("tcmalloc") {
    tcmalloc_dir = "//third_party/tcmalloc/chromium"

    # Don't check tcmalloc's includes. These files include various files like
    # base/foo.h and they actually refer to tcmalloc's forked copy of base
    # rather than the regular one, which confuses the header checker.
    check_includes = false

    sources = [
      # Generated for our configuration from tcmalloc's build
      # and checked in.
      "$tcmalloc_dir/src/config.h",
      "$tcmalloc_dir/src/config_android.h",
      "$tcmalloc_dir/src/config_linux.h",
      "$tcmalloc_dir/src/config_win.h",

      # tcmalloc native and forked files.
      "$tcmalloc_dir/src/base/abort.cc",
      "$tcmalloc_dir/src/base/abort.h",
      "$tcmalloc_dir/src/base/arm_instruction_set_select.h",
      "$tcmalloc_dir/src/base/atomicops-internals-arm-generic.h",
      "$tcmalloc_dir/src/base/atomicops-internals-arm-v6plus.h",
      "$tcmalloc_dir/src/base/atomicops-internals-linuxppc.h",
      "$tcmalloc_dir/src/base/atomicops-internals-macosx.h",
      "$tcmalloc_dir/src/base/atomicops-internals-windows.h",
      "$tcmalloc_dir/src/base/atomicops-internals-x86.cc",
      "$tcmalloc_dir/src/base/atomicops-internals-x86.h",
      "$tcmalloc_dir/src/base/atomicops.h",
      "$tcmalloc_dir/src/base/commandlineflags.h",
      "$tcmalloc_dir/src/base/cycleclock.h",

      # We don't list dynamic_annotations.c since its copy is already
      # present in the dynamic_annotations target.
      "$tcmalloc_dir/src/base/elf_mem_image.cc",
      "$tcmalloc_dir/src/base/elf_mem_image.h",
      "$tcmalloc_dir/src/base/linuxthreads.cc",
      "$tcmalloc_dir/src/base/linuxthreads.h",
      "$tcmalloc_dir/src/base/logging.cc",
      "$tcmalloc_dir/src/base/logging.h",
      "$tcmalloc_dir/src/base/low_level_alloc.cc",
      "$tcmalloc_dir/src/base/low_level_alloc.h",
      "$tcmalloc_dir/src/base/spinlock.cc",
      "$tcmalloc_dir/src/base/spinlock.h",
      "$tcmalloc_dir/src/base/spinlock_internal.cc",
      "$tcmalloc_dir/src/base/spinlock_internal.h",
      "$tcmalloc_dir/src/base/synchronization_profiling.h",
      "$tcmalloc_dir/src/base/sysinfo.cc",
      "$tcmalloc_dir/src/base/sysinfo.h",
      "$tcmalloc_dir/src/base/vdso_support.cc",
      "$tcmalloc_dir/src/base/vdso_support.h",
      "$tcmalloc_dir/src/central_freelist.cc",
      "$tcmalloc_dir/src/central_freelist.h",
      "$tcmalloc_dir/src/common.cc",
      "$tcmalloc_dir/src/common.h",

      # #included by debugallocation_shim.cc
      #"$tcmalloc_dir/src/debugallocation.cc",
      "$tcmalloc_dir/src/free_list.cc",
      "$tcmalloc_dir/src/free_list.h",
      "$tcmalloc_dir/src/heap-profile-table.cc",
      "$tcmalloc_dir/src/heap-profile-table.h",
      "$tcmalloc_dir/src/heap-profiler.cc",
      "$tcmalloc_dir/src/internal_logging.cc",
      "$tcmalloc_dir/src/internal_logging.h",
      "$tcmalloc_dir/src/linked_list.h",
      "$tcmalloc_dir/src/malloc_extension.cc",
      "$tcmalloc_dir/src/malloc_hook-inl.h",
      "$tcmalloc_dir/src/malloc_hook.cc",
      "$tcmalloc_dir/src/maybe_threads.cc",
      "$tcmalloc_dir/src/maybe_threads.h",
      "$tcmalloc_dir/src/memory_region_map.cc",
      "$tcmalloc_dir/src/memory_region_map.h",
      "$tcmalloc_dir/src/page_heap.cc",
      "$tcmalloc_dir/src/page_heap.h",
      "$tcmalloc_dir/src/raw_printer.cc",
      "$tcmalloc_dir/src/raw_printer.h",
      "$tcmalloc_dir/src/sampler.cc",
      "$tcmalloc_dir/src/sampler.h",
      "$tcmalloc_dir/src/span.cc",
      "$tcmalloc_dir/src/span.h",
      "$tcmalloc_dir/src/stack_trace_table.cc",
      "$tcmalloc_dir/src/stack_trace_table.h",
      "$tcmalloc_dir/src/stacktrace.cc",
      "$tcmalloc_dir/src/static_vars.cc",
      "$tcmalloc_dir/src/static_vars.h",
      "$tcmalloc_dir/src/symbolize.cc",
      "$tcmalloc_dir/src/symbolize.h",
      "$tcmalloc_dir/src/system-alloc.cc",
      "$tcmalloc_dir/src/system-alloc.h",

      # #included by debugallocation_shim.cc
      #"$tcmalloc_dir/src/tcmalloc.cc",
      "$tcmalloc_dir/src/thread_cache.cc",
      "$tcmalloc_dir/src/thread_cache.h",
      "$tcmalloc_dir/src/windows/port.cc",
      "$tcmalloc_dir/src/windows/port.h",
      "debugallocation_shim.cc",

      # These are both #included by allocator_shim for maximal linking.
      #"generic_allocators.cc",
      #"win_allocator.cc",
    ]

    # Disable the heap checker in tcmalloc.
    defines = [ "NO_HEAP_CHECK" ]

    include_dirs = [
      ".",
      "$tcmalloc_dir/src/base",
      "$tcmalloc_dir/src",
    ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      ":tcmalloc_flags",
    ]

    deps = []

    if (enable_profiling) {
      sources += [
        "$tcmalloc_dir/src/base/thread_lister.c",
        "$tcmalloc_dir/src/base/thread_lister.h",
        "$tcmalloc_dir/src/profile-handler.cc",
        "$tcmalloc_dir/src/profile-handler.h",
        "$tcmalloc_dir/src/profiledata.cc",
        "$tcmalloc_dir/src/profiledata.h",
        "$tcmalloc_dir/src/profiler.cc",
      ]
      defines += [ "ENABLE_PROFILING=1" ]
    }

    if (is_linux || is_android) {
      sources -= [
        "$tcmalloc_dir/src/system-alloc.h",
        "$tcmalloc_dir/src/windows/port.cc",
        "$tcmalloc_dir/src/windows/port.h",
      ]

      # We enable all warnings by default, but upstream disables a few.
      # Keep "-Wno-*" flags in sync with upstream by comparing against:
      # http://code.google.com/p/google-perftools/source/browse/trunk/Makefile.am
      cflags = [
        "-Wno-sign-compare",
        "-Wno-unused-result",
      ]

      configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
      configs += [ "//build/config/gcc:symbol_visibility_default" ]

      ldflags = [
        # Don't let linker rip this symbol out, otherwise the heap&cpu
        # profilers will not initialize properly on startup.
        "-Wl,-uIsHeapProfilerRunning,-uProfilerStart",

        # Do the same for heap leak checker.
        "-Wl,-u_Z21InitialMallocHook_NewPKvj,-u_Z22InitialMallocHook_MMapPKvS0_jiiix,-u_Z22InitialMallocHook_SbrkPKvi",
        "-Wl,-u_Z21InitialMallocHook_NewPKvm,-u_Z22InitialMallocHook_MMapPKvS0_miiil,-u_Z22InitialMallocHook_SbrkPKvl",
        "-Wl,-u_ZN15HeapLeakChecker12IgnoreObjectEPKv,-u_ZN15HeapLeakChecker14UnIgnoreObjectEPKv",
      ]
    }

    # Make sure the allocation library is optimized as much as possible when
    # we"re in release mode.
    if (!is_debug) {
      configs -= [ "//build/config/compiler:default_optimization" ]
      configs += [ "//build/config/compiler:optimize_max" ]
    }

    deps += [ "//base/third_party/dynamic_annotations" ]
  }
}  # use_allocator == "tcmalloc"

buildflag_header("features") {
  header = "features.h"
  flags = [ "USE_EXPERIMENTAL_ALLOCATOR_SHIM=$use_experimental_allocator_shim" ]
}

if (use_experimental_allocator_shim) {
  # Used to shim malloc symbols on Android. see //base/allocator/README.md.
  config("wrap_malloc_symbols") {
    ldflags = [
      "-Wl,-wrap,calloc",
      "-Wl,-wrap,free",
      "-Wl,-wrap,malloc",
      "-Wl,-wrap,memalign",
      "-Wl,-wrap,posix_memalign",
      "-Wl,-wrap,pvalloc",
      "-Wl,-wrap,realloc",
      "-Wl,-wrap,valloc",
    ]
  }

  source_set("unified_allocator_shim") {
    # TODO(primiano): support other platforms, currently this works only on
    # Linux/CrOS/Android. http://crbug.com/550886 .
    configs += [ "//base:base_implementation" ]  # for BASE_EXPORT
    visibility = [ "//base:base" ]
    sources = [
      "allocator_shim.cc",
      "allocator_shim.h",
      "allocator_shim_internals.h",
      "allocator_shim_override_cpp_symbols.h",
      "allocator_shim_override_libc_symbols.h",
    ]
    if (is_linux && use_allocator == "tcmalloc") {
      sources += [
        "allocator_shim_default_dispatch_to_tcmalloc.cc",
        "allocator_shim_override_glibc_weak_symbols.h",
      ]
      deps = [
        ":tcmalloc",
      ]
    } else if (is_linux && use_allocator == "none") {
      sources += [ "allocator_shim_default_dispatch_to_glibc.cc" ]
    } else if (is_android && use_allocator == "none") {
      sources += [
        "allocator_shim_default_dispatch_to_linker_wrapped_symbols.cc",
        "allocator_shim_override_linker_wrapped_symbols.h",
      ]
      all_dependent_configs = [ ":wrap_malloc_symbols" ]
    }
  }
}
