Home | History | Annotate | Download | only in allocator
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 {
      6   'target_defaults': {
      7     'variables': {
      8       # This code gets run a lot and debugged rarely, so it should be fast
      9       # by default. See http://crbug.com/388949.
     10       'debug_optimize': '2',
     11       'win_debug_Optimization': '0',
     12       # Run time checks are incompatible with any level of optimizations.
     13       'win_debug_RuntimeChecks': '0',
     14     },
     15   },
     16   'variables': {
     17     'tcmalloc_dir': '../../third_party/tcmalloc/chromium',
     18     'use_vtable_verify%': 0,
     19     # Provide a way to force disable debugallocation in Debug builds
     20     # e.g. for profiling (it's more rare to profile Debug builds,
     21     # but people sometimes need to do that).
     22     'disable_debugallocation%': 0,
     23   },
     24   'targets': [
     25     # The only targets that should depend on allocator are 'base' and
     26     # executables that don't depend, directly or indirectly, on base (a few).
     27     #All the other targets get a transitive dependency on this target via base.
     28     {
     29       'target_name': 'allocator',
     30       'variables': {
     31         'conditions': [
     32           ['use_allocator!="none" or (OS=="win" and win_use_allocator_shim==1)', {
     33             'allocator_target_type%': 'static_library',
     34           }, {
     35             'allocator_target_type%': 'none',
     36           }],
     37         ],
     38       },
     39       'type': '<(allocator_target_type)',
     40       'toolsets': ['host', 'target'],
     41       'conditions': [
     42         ['OS=="win" and win_use_allocator_shim==1', {
     43           'msvs_settings': {
     44             # TODO(sgk):  merge this with build/common.gypi settings
     45             'VCLibrarianTool': {
     46               'AdditionalOptions': ['/ignore:4006,4221'],
     47             },
     48             'VCLinkerTool': {
     49               'AdditionalOptions': ['/ignore:4006'],
     50             },
     51           },
     52           'include_dirs': [
     53             '../..',
     54           ],
     55           'sources': [
     56             'allocator_shim_win.cc',
     57             'allocator_shim_win.h',
     58           ],
     59           'configurations': {
     60             'Debug_Base': {
     61               'msvs_settings': {
     62                 'VCCLCompilerTool': {
     63                   'RuntimeLibrary': '0',
     64                 },
     65               },
     66             },
     67           },
     68         }],  # OS=="win"
     69         ['use_allocator=="tcmalloc"', {
     70           # Disable the heap checker in tcmalloc.
     71           'defines': [
     72             'NO_HEAP_CHECK',
     73           ],
     74           'dependencies': [
     75             '../third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
     76           ],
     77           # The order of this include_dirs matters, as tc-malloc has its own
     78           # base/ mini-fork. Do not factor these out of this conditions section.
     79           'include_dirs': [
     80             '.',
     81             '<(tcmalloc_dir)/src/base',
     82             '<(tcmalloc_dir)/src',
     83             '../..',
     84           ],
     85           'sources': [
     86             # Generated for our configuration from tcmalloc's build
     87             # and checked in.
     88             '<(tcmalloc_dir)/src/config.h',
     89             '<(tcmalloc_dir)/src/config_android.h',
     90             '<(tcmalloc_dir)/src/config_linux.h',
     91             '<(tcmalloc_dir)/src/config_win.h',
     92 
     93             # all tcmalloc native and forked files
     94             '<(tcmalloc_dir)/src/addressmap-inl.h',
     95             '<(tcmalloc_dir)/src/base/abort.cc',
     96             '<(tcmalloc_dir)/src/base/abort.h',
     97             '<(tcmalloc_dir)/src/base/arm_instruction_set_select.h',
     98             '<(tcmalloc_dir)/src/base/atomicops-internals-arm-generic.h',
     99             '<(tcmalloc_dir)/src/base/atomicops-internals-arm-v6plus.h',
    100             '<(tcmalloc_dir)/src/base/atomicops-internals-linuxppc.h',
    101             '<(tcmalloc_dir)/src/base/atomicops-internals-macosx.h',
    102             '<(tcmalloc_dir)/src/base/atomicops-internals-windows.h',
    103             '<(tcmalloc_dir)/src/base/atomicops-internals-x86.cc',
    104             '<(tcmalloc_dir)/src/base/atomicops-internals-x86.h',
    105             '<(tcmalloc_dir)/src/base/atomicops.h',
    106             '<(tcmalloc_dir)/src/base/commandlineflags.h',
    107             '<(tcmalloc_dir)/src/base/cycleclock.h',
    108             # We don't list dynamic_annotations.c since its copy is already
    109             # present in the dynamic_annotations target.
    110             '<(tcmalloc_dir)/src/base/dynamic_annotations.h',
    111             '<(tcmalloc_dir)/src/base/elf_mem_image.cc',
    112             '<(tcmalloc_dir)/src/base/elf_mem_image.h',
    113             '<(tcmalloc_dir)/src/base/elfcore.h',
    114             '<(tcmalloc_dir)/src/base/googleinit.h',
    115             '<(tcmalloc_dir)/src/base/linux_syscall_support.h',
    116             '<(tcmalloc_dir)/src/base/linuxthreads.cc',
    117             '<(tcmalloc_dir)/src/base/linuxthreads.h',
    118             '<(tcmalloc_dir)/src/base/logging.cc',
    119             '<(tcmalloc_dir)/src/base/logging.h',
    120             '<(tcmalloc_dir)/src/base/low_level_alloc.cc',
    121             '<(tcmalloc_dir)/src/base/low_level_alloc.h',
    122             '<(tcmalloc_dir)/src/base/simple_mutex.h',
    123             '<(tcmalloc_dir)/src/base/spinlock.cc',
    124             '<(tcmalloc_dir)/src/base/spinlock.h',
    125             '<(tcmalloc_dir)/src/base/spinlock_internal.cc',
    126             '<(tcmalloc_dir)/src/base/spinlock_internal.h',
    127             '<(tcmalloc_dir)/src/base/spinlock_linux-inl.h',
    128             '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h',
    129             '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h',
    130             '<(tcmalloc_dir)/src/base/stl_allocator.h',
    131             '<(tcmalloc_dir)/src/base/synchronization_profiling.h',
    132             '<(tcmalloc_dir)/src/base/sysinfo.cc',
    133             '<(tcmalloc_dir)/src/base/sysinfo.h',
    134             '<(tcmalloc_dir)/src/base/thread_annotations.h',
    135             '<(tcmalloc_dir)/src/base/thread_lister.c',
    136             '<(tcmalloc_dir)/src/base/thread_lister.h',
    137             '<(tcmalloc_dir)/src/base/vdso_support.cc',
    138             '<(tcmalloc_dir)/src/base/vdso_support.h',
    139             '<(tcmalloc_dir)/src/central_freelist.cc',
    140             '<(tcmalloc_dir)/src/central_freelist.h',
    141             '<(tcmalloc_dir)/src/common.cc',
    142             '<(tcmalloc_dir)/src/common.h',
    143             '<(tcmalloc_dir)/src/debugallocation.cc',
    144             '<(tcmalloc_dir)/src/free_list.cc',
    145             '<(tcmalloc_dir)/src/free_list.h',
    146             '<(tcmalloc_dir)/src/getpc.h',
    147             '<(tcmalloc_dir)/src/gperftools/heap-checker.h',
    148             '<(tcmalloc_dir)/src/gperftools/heap-profiler.h',
    149             '<(tcmalloc_dir)/src/gperftools/malloc_extension.h',
    150             '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h',
    151             '<(tcmalloc_dir)/src/gperftools/malloc_hook.h',
    152             '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h',
    153             '<(tcmalloc_dir)/src/gperftools/profiler.h',
    154             '<(tcmalloc_dir)/src/gperftools/stacktrace.h',
    155             '<(tcmalloc_dir)/src/gperftools/tcmalloc.h',
    156             '<(tcmalloc_dir)/src/heap-checker-bcad.cc',
    157             '<(tcmalloc_dir)/src/heap-checker.cc',
    158             '<(tcmalloc_dir)/src/heap-profile-table.cc',
    159             '<(tcmalloc_dir)/src/heap-profile-table.h',
    160             '<(tcmalloc_dir)/src/heap-profiler.cc',
    161             '<(tcmalloc_dir)/src/internal_logging.cc',
    162             '<(tcmalloc_dir)/src/internal_logging.h',
    163             '<(tcmalloc_dir)/src/libc_override.h',
    164             '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h',
    165             '<(tcmalloc_dir)/src/libc_override_glibc.h',
    166             '<(tcmalloc_dir)/src/libc_override_osx.h',
    167             '<(tcmalloc_dir)/src/libc_override_redefine.h',
    168             '<(tcmalloc_dir)/src/linked_list.h',
    169             '<(tcmalloc_dir)/src/malloc_extension.cc',
    170             '<(tcmalloc_dir)/src/malloc_hook-inl.h',
    171             '<(tcmalloc_dir)/src/malloc_hook.cc',
    172             '<(tcmalloc_dir)/src/malloc_hook_mmap_freebsd.h',
    173             '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h',
    174             '<(tcmalloc_dir)/src/maybe_threads.cc',
    175             '<(tcmalloc_dir)/src/maybe_threads.h',
    176             '<(tcmalloc_dir)/src/memfs_malloc.cc',
    177             '<(tcmalloc_dir)/src/memory_region_map.cc',
    178             '<(tcmalloc_dir)/src/memory_region_map.h',
    179             '<(tcmalloc_dir)/src/packed-cache-inl.h',
    180             '<(tcmalloc_dir)/src/page_heap.cc',
    181             '<(tcmalloc_dir)/src/page_heap.h',
    182             '<(tcmalloc_dir)/src/page_heap_allocator.h',
    183             '<(tcmalloc_dir)/src/pagemap.h',
    184             '<(tcmalloc_dir)/src/profile-handler.cc',
    185             '<(tcmalloc_dir)/src/profile-handler.h',
    186             '<(tcmalloc_dir)/src/profiledata.cc',
    187             '<(tcmalloc_dir)/src/profiledata.h',
    188             '<(tcmalloc_dir)/src/profiler.cc',
    189             '<(tcmalloc_dir)/src/raw_printer.cc',
    190             '<(tcmalloc_dir)/src/raw_printer.h',
    191             '<(tcmalloc_dir)/src/sampler.cc',
    192             '<(tcmalloc_dir)/src/sampler.h',
    193             '<(tcmalloc_dir)/src/span.cc',
    194             '<(tcmalloc_dir)/src/span.h',
    195             '<(tcmalloc_dir)/src/stack_trace_table.cc',
    196             '<(tcmalloc_dir)/src/stack_trace_table.h',
    197             '<(tcmalloc_dir)/src/stacktrace.cc',
    198             '<(tcmalloc_dir)/src/stacktrace_arm-inl.h',
    199             '<(tcmalloc_dir)/src/stacktrace_config.h',
    200             '<(tcmalloc_dir)/src/stacktrace_generic-inl.h',
    201             '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h',
    202             '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h',
    203             '<(tcmalloc_dir)/src/stacktrace_win32-inl.h',
    204             '<(tcmalloc_dir)/src/stacktrace_with_context.cc',
    205             '<(tcmalloc_dir)/src/stacktrace_x86-inl.h',
    206             '<(tcmalloc_dir)/src/static_vars.cc',
    207             '<(tcmalloc_dir)/src/static_vars.h',
    208             '<(tcmalloc_dir)/src/symbolize.cc',
    209             '<(tcmalloc_dir)/src/symbolize.h',
    210             '<(tcmalloc_dir)/src/system-alloc.cc',
    211             '<(tcmalloc_dir)/src/system-alloc.h',
    212             '<(tcmalloc_dir)/src/tcmalloc.cc',
    213             '<(tcmalloc_dir)/src/tcmalloc_guard.h',
    214             '<(tcmalloc_dir)/src/thread_cache.cc',
    215             '<(tcmalloc_dir)/src/thread_cache.h',
    216 
    217             'debugallocation_shim.cc',
    218           ],
    219           # sources! means that these are not compiled directly.
    220           'sources!': [
    221             # We simply don't use these, but list them above so that IDE
    222             # users can view the full available source for reference, etc.
    223             '<(tcmalloc_dir)/src/addressmap-inl.h',
    224             '<(tcmalloc_dir)/src/base/atomicops-internals-linuxppc.h',
    225             '<(tcmalloc_dir)/src/base/atomicops-internals-macosx.h',
    226             '<(tcmalloc_dir)/src/base/atomicops-internals-x86-msvc.h',
    227             '<(tcmalloc_dir)/src/base/atomicops-internals-x86.h',
    228             '<(tcmalloc_dir)/src/base/atomicops.h',
    229             '<(tcmalloc_dir)/src/base/commandlineflags.h',
    230             '<(tcmalloc_dir)/src/base/cycleclock.h',
    231             '<(tcmalloc_dir)/src/base/elf_mem_image.h',
    232             '<(tcmalloc_dir)/src/base/elfcore.h',
    233             '<(tcmalloc_dir)/src/base/googleinit.h',
    234             '<(tcmalloc_dir)/src/base/linux_syscall_support.h',
    235             '<(tcmalloc_dir)/src/base/simple_mutex.h',
    236             '<(tcmalloc_dir)/src/base/spinlock_linux-inl.h',
    237             '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h',
    238             '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h',
    239             '<(tcmalloc_dir)/src/base/stl_allocator.h',
    240             '<(tcmalloc_dir)/src/base/thread_annotations.h',
    241             '<(tcmalloc_dir)/src/getpc.h',
    242             '<(tcmalloc_dir)/src/gperftools/heap-checker.h',
    243             '<(tcmalloc_dir)/src/gperftools/heap-profiler.h',
    244             '<(tcmalloc_dir)/src/gperftools/malloc_extension.h',
    245             '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h',
    246             '<(tcmalloc_dir)/src/gperftools/malloc_hook.h',
    247             '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h',
    248             '<(tcmalloc_dir)/src/gperftools/profiler.h',
    249             '<(tcmalloc_dir)/src/gperftools/stacktrace.h',
    250             '<(tcmalloc_dir)/src/gperftools/tcmalloc.h',
    251             '<(tcmalloc_dir)/src/heap-checker-bcad.cc',
    252             '<(tcmalloc_dir)/src/heap-checker.cc',
    253             '<(tcmalloc_dir)/src/libc_override.h',
    254             '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h',
    255             '<(tcmalloc_dir)/src/libc_override_glibc.h',
    256             '<(tcmalloc_dir)/src/libc_override_osx.h',
    257             '<(tcmalloc_dir)/src/libc_override_redefine.h',
    258             '<(tcmalloc_dir)/src/malloc_hook_mmap_freebsd.h',
    259             '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h',
    260             '<(tcmalloc_dir)/src/memfs_malloc.cc',
    261             '<(tcmalloc_dir)/src/packed-cache-inl.h',
    262             '<(tcmalloc_dir)/src/page_heap_allocator.h',
    263             '<(tcmalloc_dir)/src/pagemap.h',
    264             '<(tcmalloc_dir)/src/stacktrace_arm-inl.h',
    265             '<(tcmalloc_dir)/src/stacktrace_config.h',
    266             '<(tcmalloc_dir)/src/stacktrace_generic-inl.h',
    267             '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h',
    268             '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h',
    269             '<(tcmalloc_dir)/src/stacktrace_win32-inl.h',
    270             '<(tcmalloc_dir)/src/stacktrace_with_context.cc',
    271             '<(tcmalloc_dir)/src/stacktrace_x86-inl.h',
    272             '<(tcmalloc_dir)/src/tcmalloc_guard.h',
    273 
    274             # Included by debugallocation_shim.cc.
    275             '<(tcmalloc_dir)/src/debugallocation.cc',
    276             '<(tcmalloc_dir)/src/tcmalloc.cc',
    277           ],
    278           'variables': {
    279             'clang_warning_flags': [
    280               # tcmalloc initializes some fields in the wrong order.
    281               '-Wno-reorder',
    282               # tcmalloc contains some unused local template specializations.
    283               '-Wno-unused-function',
    284               # tcmalloc uses COMPILE_ASSERT without static_assert but with
    285               # typedefs.
    286               '-Wno-unused-local-typedefs',
    287               # for magic2_ in debugallocation.cc (only built in Debug builds)
    288               # typedefs.
    289               '-Wno-unused-private-field',
    290             ],
    291           },
    292           'conditions': [
    293             ['OS=="linux" or OS=="freebsd" or OS=="solaris" or OS=="android"', {
    294               'sources!': [
    295                 '<(tcmalloc_dir)/src/system-alloc.h',
    296               ],
    297               # We enable all warnings by default, but upstream disables a few.
    298               # Keep "-Wno-*" flags in sync with upstream by comparing against:
    299               # http://code.google.com/p/google-perftools/source/browse/trunk/Makefile.am
    300               'cflags': [
    301                 '-Wno-sign-compare',
    302                 '-Wno-unused-result',
    303               ],
    304               'link_settings': {
    305                 'ldflags': [
    306                   # Don't let linker rip this symbol out, otherwise the heap&cpu
    307                   # profilers will not initialize properly on startup.
    308                   '-Wl,-uIsHeapProfilerRunning,-uProfilerStart',
    309                   # Do the same for heap leak checker.
    310                   '-Wl,-u_Z21InitialMallocHook_NewPKvj,-u_Z22InitialMallocHook_MMapPKvS0_jiiix,-u_Z22InitialMallocHook_SbrkPKvi',
    311                   '-Wl,-u_Z21InitialMallocHook_NewPKvm,-u_Z22InitialMallocHook_MMapPKvS0_miiil,-u_Z22InitialMallocHook_SbrkPKvl',
    312                   '-Wl,-u_ZN15HeapLeakChecker12IgnoreObjectEPKv,-u_ZN15HeapLeakChecker14UnIgnoreObjectEPKv',
    313                 ],
    314               },
    315               # Compiling tcmalloc with -fvisibility=default is only necessary when
    316               # not using the allocator shim, which provides the correct visibility
    317               # annotations for those symbols which need to be exported (see
    318               # //base/allocator/allocator_shim_override_glibc_weak_symbols.h and
    319               # //base/allocator/allocator_shim_internals.h for the definition of
    320               # SHIM_ALWAYS_EXPORT).
    321               'conditions': [
    322                 ['use_experimental_allocator_shim==0', {
    323                   'cflags!': [
    324                     '-fvisibility=hidden',
    325                   ],
    326                 }],
    327               ],
    328             }],
    329             ['profiling!=1', {
    330               'sources!': [
    331                 # cpuprofiler
    332                 '<(tcmalloc_dir)/src/base/thread_lister.c',
    333                 '<(tcmalloc_dir)/src/base/thread_lister.h',
    334                 '<(tcmalloc_dir)/src/profile-handler.cc',
    335                 '<(tcmalloc_dir)/src/profile-handler.h',
    336                 '<(tcmalloc_dir)/src/profiledata.cc',
    337                 '<(tcmalloc_dir)/src/profiledata.h',
    338                 '<(tcmalloc_dir)/src/profiler.cc',
    339               ],
    340             }],
    341             ['use_experimental_allocator_shim==1', {
    342               'defines': [
    343                 'TCMALLOC_DONT_REPLACE_SYSTEM_ALLOC',
    344               ],
    345             }]
    346           ],
    347           'configurations': {
    348             'Debug_Base': {
    349               'conditions': [
    350                 ['disable_debugallocation==0', {
    351                   'defines': [
    352                     # Use debugallocation for Debug builds to catch problems
    353                     # early and cleanly, http://crbug.com/30715 .
    354                     'TCMALLOC_FOR_DEBUGALLOCATION',
    355                   ],
    356                 }],
    357               ],
    358             },
    359           },
    360         }],  # use_allocator=="tcmalloc
    361         # For CrOS builds with vtable verification. According to the author of
    362         # crrev.com/10854031 this is used in conjuction with some other CrOS
    363         # build flag, to enable verification of any allocator that uses virtual
    364         # function calls.
    365         ['use_vtable_verify==1', {
    366           'cflags': [
    367             '-fvtable-verify=preinit',
    368           ],
    369         }],
    370         ['order_profiling != 0', {
    371           'target_conditions' : [
    372             ['_toolset=="target"', {
    373               'cflags!': [ '-finstrument-functions' ],
    374             }],
    375           ],
    376         }],
    377       ],  # conditions of 'allocator' target.
    378     },  # 'allocator' target.
    379     {
    380       # GN: //base/allocator:features
    381       # When referenced from a target that might be compiled in the host
    382       # toolchain, always refer to 'allocator_features#target'.
    383       'target_name': 'allocator_features',
    384       'includes': [ '../../build/buildflag_header.gypi' ],
    385       'variables': {
    386         'buildflag_header_path': 'base/allocator/features.h',
    387         'buildflag_flags': [
    388           'USE_EXPERIMENTAL_ALLOCATOR_SHIM=<(use_experimental_allocator_shim)',
    389         ],
    390       },
    391     },  # 'allocator_features' target.
    392   ],  # targets.
    393   'conditions': [
    394     ['use_experimental_allocator_shim==1', {
    395       'targets': [
    396         {
    397           # GN: //base/allocator:unified_allocator_shim
    398           'target_name': 'unified_allocator_shim',
    399           'toolsets': ['host', 'target'],
    400           'type': 'static_library',
    401           'defines': [ 'BASE_IMPLEMENTATION' ],
    402           'sources': [
    403             'allocator_shim.cc',
    404             'allocator_shim.h',
    405             'allocator_shim_internals.h',
    406             'allocator_shim_override_cpp_symbols.h',
    407             'allocator_shim_override_libc_symbols.h',
    408           ],
    409           'include_dirs': [
    410             '../..',
    411           ],
    412           'conditions': [
    413             ['OS=="linux" and use_allocator=="tcmalloc"', {
    414               'sources': [
    415                 'allocator_shim_default_dispatch_to_tcmalloc.cc',
    416                 'allocator_shim_override_glibc_weak_symbols.h',
    417               ],
    418             }],
    419             ['use_allocator=="none" and (OS=="linux" or (OS=="android" and _toolset == "host" and host_os == "linux"))', {
    420               'sources': [
    421                 'allocator_shim_default_dispatch_to_glibc.cc',
    422               ],
    423             }],
    424             ['OS=="android" and _toolset == "target"', {
    425               'sources': [
    426                 'allocator_shim_default_dispatch_to_linker_wrapped_symbols.cc',
    427                 'allocator_shim_override_linker_wrapped_symbols.h',
    428               ],
    429               # On Android all references to malloc & friends symbols are
    430               # rewritten, at link time, and routed to the shim.
    431               # See //base/allocator/README.md.
    432               'all_dependent_settings': {
    433                 'ldflags': [
    434                   '-Wl,-wrap,calloc',
    435                   '-Wl,-wrap,free',
    436                   '-Wl,-wrap,malloc',
    437                   '-Wl,-wrap,memalign',
    438                   '-Wl,-wrap,posix_memalign',
    439                   '-Wl,-wrap,pvalloc',
    440                   '-Wl,-wrap,realloc',
    441                   '-Wl,-wrap,valloc',
    442                 ],
    443               },
    444             }],
    445           ]
    446         },  # 'unified_allocator_shim' target.
    447       ],
    448     }]
    449   ],
    450 }
    451