| # Copyright (c) 2012 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. |
| |
| { |
| 'variables': { |
| 'jemalloc_dir': '../../third_party/jemalloc/chromium', |
| 'tcmalloc_dir': '../../third_party/tcmalloc/chromium', |
| 'use_vtable_verify%': 0, |
| }, |
| 'targets': [ |
| # Only executables and not libraries should depend on the |
| # allocator target; only the application (the final executable) |
| # knows what allocator makes sense. |
| { |
| 'target_name': 'allocator', |
| 'type': 'static_library', |
| # Make sure the allocation library is optimized to |
| # the hilt in official builds. |
| 'variables': { |
| 'optimize': 'max', |
| }, |
| 'include_dirs': [ |
| '.', |
| '<(tcmalloc_dir)/src/base', |
| '<(tcmalloc_dir)/src', |
| '../..', |
| ], |
| 'defines': [ |
| 'NO_HEAP_CHECK', |
| ], |
| 'direct_dependent_settings': { |
| 'conditions': [ |
| ['OS=="win"', { |
| 'defines': [ |
| 'PERFTOOLS_DLL_DECL=', |
| ], |
| }], |
| ], |
| }, |
| 'sources': [ |
| # Generated for our configuration from tcmalloc's build |
| # and checked in. |
| '<(tcmalloc_dir)/src/config.h', |
| '<(tcmalloc_dir)/src/config_linux.h', |
| '<(tcmalloc_dir)/src/config_win.h', |
| |
| # all tcmalloc native and forked files |
| '<(tcmalloc_dir)/src/addressmap-inl.h', |
| '<(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-linuxppc.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-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/basictypes.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/dynamic_annotations.h', |
| '<(tcmalloc_dir)/src/base/elf_mem_image.cc', |
| '<(tcmalloc_dir)/src/base/elf_mem_image.h', |
| '<(tcmalloc_dir)/src/base/elfcore.h', |
| '<(tcmalloc_dir)/src/base/googleinit.h', |
| '<(tcmalloc_dir)/src/base/linux_syscall_support.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/simple_mutex.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/spinlock_linux-inl.h', |
| '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h', |
| '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h', |
| '<(tcmalloc_dir)/src/base/stl_allocator.h', |
| '<(tcmalloc_dir)/src/base/synchronization_profiling.h', |
| '<(tcmalloc_dir)/src/base/sysinfo.cc', |
| '<(tcmalloc_dir)/src/base/sysinfo.h', |
| '<(tcmalloc_dir)/src/base/thread_annotations.h', |
| '<(tcmalloc_dir)/src/base/thread_lister.c', |
| '<(tcmalloc_dir)/src/base/thread_lister.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', |
| '<(tcmalloc_dir)/src/debugallocation.cc', |
| '<(tcmalloc_dir)/src/deep-heap-profile.cc', |
| '<(tcmalloc_dir)/src/deep-heap-profile.h', |
| '<(tcmalloc_dir)/src/free_list.cc', |
| '<(tcmalloc_dir)/src/free_list.h', |
| '<(tcmalloc_dir)/src/getpc.h', |
| '<(tcmalloc_dir)/src/gperftools/heap-checker.h', |
| '<(tcmalloc_dir)/src/gperftools/heap-profiler.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_extension.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_hook.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h', |
| '<(tcmalloc_dir)/src/gperftools/profiler.h', |
| '<(tcmalloc_dir)/src/gperftools/stacktrace.h', |
| '<(tcmalloc_dir)/src/gperftools/tcmalloc.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/libc_override.h', |
| '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h', |
| '<(tcmalloc_dir)/src/libc_override_glibc.h', |
| '<(tcmalloc_dir)/src/libc_override_osx.h', |
| '<(tcmalloc_dir)/src/libc_override_redefine.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/malloc_hook_mmap_freebsd.h', |
| '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h', |
| '<(tcmalloc_dir)/src/maybe_threads.cc', |
| '<(tcmalloc_dir)/src/maybe_threads.h', |
| '<(tcmalloc_dir)/src/memfs_malloc.cc', |
| '<(tcmalloc_dir)/src/memory_region_map.cc', |
| '<(tcmalloc_dir)/src/memory_region_map.h', |
| '<(tcmalloc_dir)/src/packed-cache-inl.h', |
| '<(tcmalloc_dir)/src/page_heap.cc', |
| '<(tcmalloc_dir)/src/page_heap.h', |
| '<(tcmalloc_dir)/src/page_heap_allocator.h', |
| '<(tcmalloc_dir)/src/pagemap.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', |
| '<(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/stacktrace_arm-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_config.h', |
| '<(tcmalloc_dir)/src/stacktrace_generic-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_win32-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_with_context.cc', |
| '<(tcmalloc_dir)/src/stacktrace_x86-inl.h', |
| '<(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', |
| '<(tcmalloc_dir)/src/tcmalloc.cc', |
| '<(tcmalloc_dir)/src/tcmalloc_guard.h', |
| '<(tcmalloc_dir)/src/thread_cache.cc', |
| '<(tcmalloc_dir)/src/thread_cache.h', |
| '<(tcmalloc_dir)/src/windows/config.h', |
| '<(tcmalloc_dir)/src/windows/get_mangled_names.cc', |
| '<(tcmalloc_dir)/src/windows/gperftools/tcmalloc.h', |
| '<(tcmalloc_dir)/src/windows/ia32_modrm_map.cc', |
| '<(tcmalloc_dir)/src/windows/ia32_opcode_map.cc', |
| '<(tcmalloc_dir)/src/windows/mingw.h', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler.cc', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler.h', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler_types.h', |
| '<(tcmalloc_dir)/src/windows/override_functions.cc', |
| '<(tcmalloc_dir)/src/windows/patch_functions.cc', |
| '<(tcmalloc_dir)/src/windows/port.cc', |
| '<(tcmalloc_dir)/src/windows/port.h', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher.cc', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher.h', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher_with_stub.cc', |
| |
| # jemalloc files |
| '<(jemalloc_dir)/jemalloc.c', |
| '<(jemalloc_dir)/jemalloc.h', |
| '<(jemalloc_dir)/ql.h', |
| '<(jemalloc_dir)/qr.h', |
| '<(jemalloc_dir)/rb.h', |
| |
| 'allocator_shim.cc', |
| 'allocator_shim.h', |
| 'debugallocation_shim.cc', |
| 'generic_allocators.cc', |
| 'win_allocator.cc', |
| ], |
| # sources! means that these are not compiled directly. |
| 'sources!': [ |
| # Included by allocator_shim.cc for maximal inlining. |
| 'generic_allocators.cc', |
| 'win_allocator.cc', |
| |
| # Included by debugallocation_shim.cc. |
| '<(tcmalloc_dir)/src/debugallocation.cc', |
| '<(tcmalloc_dir)/src/tcmalloc.cc', |
| |
| # We simply don't use these, but list them above so that IDE |
| # users can view the full available source for reference, etc. |
| '<(tcmalloc_dir)/src/addressmap-inl.h', |
| '<(tcmalloc_dir)/src/base/atomicops-internals-linuxppc.h', |
| '<(tcmalloc_dir)/src/base/atomicops-internals-macosx.h', |
| '<(tcmalloc_dir)/src/base/atomicops-internals-x86-msvc.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/basictypes.h', |
| '<(tcmalloc_dir)/src/base/commandlineflags.h', |
| '<(tcmalloc_dir)/src/base/cycleclock.h', |
| '<(tcmalloc_dir)/src/base/elf_mem_image.h', |
| '<(tcmalloc_dir)/src/base/elfcore.h', |
| '<(tcmalloc_dir)/src/base/googleinit.h', |
| '<(tcmalloc_dir)/src/base/linux_syscall_support.h', |
| '<(tcmalloc_dir)/src/base/simple_mutex.h', |
| '<(tcmalloc_dir)/src/base/spinlock_linux-inl.h', |
| '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h', |
| '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h', |
| '<(tcmalloc_dir)/src/base/stl_allocator.h', |
| '<(tcmalloc_dir)/src/base/thread_annotations.h', |
| '<(tcmalloc_dir)/src/getpc.h', |
| '<(tcmalloc_dir)/src/gperftools/heap-checker.h', |
| '<(tcmalloc_dir)/src/gperftools/heap-profiler.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_extension.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_hook.h', |
| '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h', |
| '<(tcmalloc_dir)/src/gperftools/profiler.h', |
| '<(tcmalloc_dir)/src/gperftools/stacktrace.h', |
| '<(tcmalloc_dir)/src/gperftools/tcmalloc.h', |
| '<(tcmalloc_dir)/src/libc_override.h', |
| '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h', |
| '<(tcmalloc_dir)/src/libc_override_glibc.h', |
| '<(tcmalloc_dir)/src/libc_override_osx.h', |
| '<(tcmalloc_dir)/src/libc_override_redefine.h', |
| '<(tcmalloc_dir)/src/malloc_hook_mmap_freebsd.h', |
| '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h', |
| '<(tcmalloc_dir)/src/memfs_malloc.cc', |
| '<(tcmalloc_dir)/src/packed-cache-inl.h', |
| '<(tcmalloc_dir)/src/page_heap_allocator.h', |
| '<(tcmalloc_dir)/src/pagemap.h', |
| '<(tcmalloc_dir)/src/stacktrace_arm-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_config.h', |
| '<(tcmalloc_dir)/src/stacktrace_generic-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_win32-inl.h', |
| '<(tcmalloc_dir)/src/stacktrace_with_context.cc', |
| '<(tcmalloc_dir)/src/stacktrace_x86-inl.h', |
| '<(tcmalloc_dir)/src/tcmalloc_guard.h', |
| '<(tcmalloc_dir)/src/windows/config.h', |
| '<(tcmalloc_dir)/src/windows/gperftools/tcmalloc.h', |
| '<(tcmalloc_dir)/src/windows/get_mangled_names.cc', |
| '<(tcmalloc_dir)/src/windows/ia32_modrm_map.cc', |
| '<(tcmalloc_dir)/src/windows/ia32_opcode_map.cc', |
| '<(tcmalloc_dir)/src/windows/mingw.h', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler.cc', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler.h', |
| '<(tcmalloc_dir)/src/windows/mini_disassembler_types.h', |
| '<(tcmalloc_dir)/src/windows/override_functions.cc', |
| '<(tcmalloc_dir)/src/windows/patch_functions.cc', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher.cc', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher.h', |
| '<(tcmalloc_dir)/src/windows/preamble_patcher_with_stub.cc', |
| ], |
| 'dependencies': [ |
| '../third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', |
| ], |
| 'msvs_settings': { |
| # TODO(sgk): merge this with build/common.gypi settings |
| 'VCLibrarianTool': { |
| 'AdditionalOptions': ['/ignore:4006,4221'], |
| 'AdditionalLibraryDirectories': |
| ['<(DEPTH)/third_party/platformsdk_win7/files/Lib'], |
| }, |
| 'VCLinkerTool': { |
| 'AdditionalOptions': ['/ignore:4006'], |
| }, |
| }, |
| 'configurations': { |
| 'Debug_Base': { |
| 'msvs_settings': { |
| 'VCCLCompilerTool': { |
| 'RuntimeLibrary': '0', |
| }, |
| }, |
| 'variables': { |
| # 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). |
| 'disable_debugallocation%': 1, |
| }, |
| 'conditions': [ |
| ['disable_debugallocation==0', { |
| 'defines': [ |
| # Use debugallocation for Debug builds to catch problems early |
| # and cleanly, http://crbug.com/30715 . |
| 'TCMALLOC_FOR_DEBUGALLOCATION', |
| ], |
| }], |
| ], |
| }, |
| }, |
| 'conditions': [ |
| [ 'clang==1', { |
| 'cflags': [ |
| '-Wno-non-literal-null-conversion', |
| ], |
| }], |
| ], |
| }, |
| { |
| # This library is linked in to src/base.gypi:base and allocator_unittests |
| # It can't depend on either and nothing else should depend on it - all |
| # other code should use the interfaced provided by base. |
| 'target_name': 'allocator_extension_thunks', |
| 'type': 'static_library', |
| 'sources': [ |
| 'allocator_extension_thunks.cc', |
| 'allocator_extension_thunks.h', |
| ], |
| 'toolsets': ['host', 'target'], |
| 'include_dirs': [ |
| '../../' |
| ], |
| }, |
| ], |
| 'conditions': [ |
| ['OS=="win"', { |
| 'targets': [ |
| { |
| 'target_name': 'libcmt', |
| 'type': 'none', |
| 'actions': [ |
| { |
| 'action_name': 'libcmt', |
| 'inputs': [ |
| 'prep_libc.py', |
| ], |
| 'outputs': [ |
| '<(SHARED_INTERMEDIATE_DIR)/allocator/libcmt.lib', |
| ], |
| 'action': [ |
| 'python', |
| 'prep_libc.py', |
| '$(VCInstallDir)lib', |
| '<(SHARED_INTERMEDIATE_DIR)/allocator', |
| ], |
| }, |
| ], |
| }, |
| { |
| 'target_name': 'allocator_unittests', |
| 'type': 'executable', |
| 'dependencies': [ |
| 'allocator', |
| 'allocator_extension_thunks', |
| '../../testing/gtest.gyp:gtest', |
| ], |
| 'include_dirs': [ |
| '.', |
| '<(tcmalloc_dir)/src/base', |
| '<(tcmalloc_dir)/src', |
| '../..', |
| ], |
| 'sources': [ |
| 'allocator_unittests.cc', |
| '../profiler/alternate_timer.cc', |
| '../profiler/alternate_timer.h', |
| ], |
| }, |
| { |
| 'target_name': 'allocator_extension_thunks_win64', |
| 'type': 'static_library', |
| 'sources': [ |
| 'allocator_extension_thunks.cc', |
| 'allocator_extension_thunks.h', |
| ], |
| 'toolsets': ['host', 'target'], |
| 'include_dirs': [ |
| '../../' |
| ], |
| }, |
| { |
| 'target_name': 'tcmalloc_unittest', |
| 'type': 'executable', |
| 'sources': [ |
| 'tcmalloc_unittest.cc', |
| ], |
| 'include_dirs': [ |
| '../..', |
| # For constants of TCMalloc. |
| '<(tcmalloc_dir)/src', |
| ], |
| 'dependencies': [ |
| '../../testing/gtest.gyp:gtest', |
| '../base.gyp:base', |
| 'allocator', |
| ], |
| }, |
| ], |
| }], |
| ['OS=="linux" and clang_type_profiler==1', { |
| # Some targets in this section undo dependencies and cflags_cc for |
| # type_profiler which build/common.gypi injects into all targets. |
| 'targets': [ |
| { |
| 'target_name': 'type_profiler', |
| 'type': 'static_library', |
| 'dependencies!': [ |
| 'type_profiler', |
| ], |
| 'cflags_cc!': [ |
| '-fintercept-allocation-functions', |
| ], |
| 'include_dirs': [ |
| '../..', |
| ], |
| 'sources': [ |
| 'type_profiler.cc', |
| 'type_profiler.h', |
| 'type_profiler_control.h', |
| ], |
| 'toolsets': ['host', 'target'], |
| }, |
| { |
| 'target_name': 'type_profiler_tcmalloc', |
| 'type': 'static_library', |
| 'dependencies!': [ |
| 'type_profiler', |
| ], |
| 'cflags_cc!': [ |
| '-fintercept-allocation-functions', |
| ], |
| 'include_dirs': [ |
| '<(tcmalloc_dir)/src', |
| '../..', |
| ], |
| 'sources': [ |
| 'type_profiler_tcmalloc.cc', |
| 'type_profiler_tcmalloc.h', |
| '<(tcmalloc_dir)/src/gperftools/type_profiler_map.h', |
| '<(tcmalloc_dir)/src/type_profiler_map.cc', |
| ], |
| }, |
| { |
| 'target_name': 'type_profiler_unittests', |
| 'type': 'executable', |
| 'dependencies': [ |
| '../../testing/gtest.gyp:gtest', |
| '../base.gyp:base', |
| 'allocator', |
| 'type_profiler_tcmalloc', |
| ], |
| 'include_dirs': [ |
| '../..', |
| ], |
| 'sources': [ |
| 'type_profiler_control.cc', |
| 'type_profiler_control.h', |
| 'type_profiler_unittests.cc', |
| ], |
| }, |
| { |
| 'target_name': 'type_profiler_map_unittests', |
| 'type': 'executable', |
| 'dependencies': [ |
| '../../testing/gtest.gyp:gtest', |
| '../base.gyp:base', |
| 'allocator', |
| ], |
| 'dependencies!': [ |
| 'type_profiler', |
| ], |
| 'cflags_cc!': [ |
| '-fintercept-allocation-functions', |
| ], |
| 'include_dirs': [ |
| '<(tcmalloc_dir)/src', |
| '../..', |
| ], |
| 'sources': [ |
| 'type_profiler_map_unittests.cc', |
| '<(tcmalloc_dir)/src/gperftools/type_profiler_map.h', |
| '<(tcmalloc_dir)/src/type_profiler_map.cc', |
| ], |
| }, |
| ], |
| }], |
| ], |
| } |