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 # Only executables and not libraries should depend on the 26 # allocator target; only the application (the final executable) 27 # knows what allocator makes sense. 28 { 29 'target_name': 'allocator', 30 # TODO(primiano): This should be type: none for the noop cases (an empty 31 # static lib can confuse some gyp generators). Fix it once the refactoring 32 # (crbug.com/564618) bring this file to a saner state (fewer conditions). 33 'type': 'static_library', 34 'conditions': [ 35 ['OS=="win" and win_use_allocator_shim==1', { 36 'msvs_settings': { 37 # TODO(sgk): merge this with build/common.gypi settings 38 'VCLibrarianTool': { 39 'AdditionalOptions': ['/ignore:4006,4221'], 40 }, 41 'VCLinkerTool': { 42 'AdditionalOptions': ['/ignore:4006'], 43 }, 44 }, 45 'dependencies': [ 46 'libcmt', 47 ], 48 'include_dirs': [ 49 '../..', 50 ], 51 'sources': [ 52 'allocator_shim_win.cc', 53 ], 54 'configurations': { 55 'Debug_Base': { 56 'msvs_settings': { 57 'VCCLCompilerTool': { 58 'RuntimeLibrary': '0', 59 }, 60 }, 61 }, 62 }, 63 'direct_dependent_settings': { 64 'configurations': { 65 'Common_Base': { 66 'msvs_settings': { 67 'VCLinkerTool': { 68 'IgnoreDefaultLibraryNames': ['libcmtd.lib', 'libcmt.lib'], 69 'AdditionalDependencies': [ 70 '<(SHARED_INTERMEDIATE_DIR)/allocator/libcmt.lib' 71 ], 72 }, 73 }, 74 }, 75 }, 76 }, 77 }], # OS=="win" 78 ['use_allocator=="tcmalloc"', { 79 # Disable the heap checker in tcmalloc. 80 'defines': [ 81 'NO_HEAP_CHECK', 82 ], 83 'dependencies': [ 84 '../third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', 85 ], 86 # The order of this include_dirs matters, as tc-malloc has its own 87 # base/ mini-fork. Do not factor these out of this conditions section. 88 'include_dirs': [ 89 '.', 90 '<(tcmalloc_dir)/src/base', 91 '<(tcmalloc_dir)/src', 92 '../..', 93 ], 94 'sources': [ 95 # Generated for our configuration from tcmalloc's build 96 # and checked in. 97 '<(tcmalloc_dir)/src/config.h', 98 '<(tcmalloc_dir)/src/config_android.h', 99 '<(tcmalloc_dir)/src/config_linux.h', 100 '<(tcmalloc_dir)/src/config_win.h', 101 102 # all tcmalloc native and forked files 103 '<(tcmalloc_dir)/src/addressmap-inl.h', 104 '<(tcmalloc_dir)/src/base/abort.cc', 105 '<(tcmalloc_dir)/src/base/abort.h', 106 '<(tcmalloc_dir)/src/base/arm_instruction_set_select.h', 107 '<(tcmalloc_dir)/src/base/atomicops-internals-arm-generic.h', 108 '<(tcmalloc_dir)/src/base/atomicops-internals-arm-v6plus.h', 109 '<(tcmalloc_dir)/src/base/atomicops-internals-linuxppc.h', 110 '<(tcmalloc_dir)/src/base/atomicops-internals-macosx.h', 111 '<(tcmalloc_dir)/src/base/atomicops-internals-windows.h', 112 '<(tcmalloc_dir)/src/base/atomicops-internals-x86.cc', 113 '<(tcmalloc_dir)/src/base/atomicops-internals-x86.h', 114 '<(tcmalloc_dir)/src/base/atomicops.h', 115 '<(tcmalloc_dir)/src/base/commandlineflags.h', 116 '<(tcmalloc_dir)/src/base/cycleclock.h', 117 # We don't list dynamic_annotations.c since its copy is already 118 # present in the dynamic_annotations target. 119 '<(tcmalloc_dir)/src/base/dynamic_annotations.h', 120 '<(tcmalloc_dir)/src/base/elf_mem_image.cc', 121 '<(tcmalloc_dir)/src/base/elf_mem_image.h', 122 '<(tcmalloc_dir)/src/base/elfcore.h', 123 '<(tcmalloc_dir)/src/base/googleinit.h', 124 '<(tcmalloc_dir)/src/base/linux_syscall_support.h', 125 '<(tcmalloc_dir)/src/base/linuxthreads.cc', 126 '<(tcmalloc_dir)/src/base/linuxthreads.h', 127 '<(tcmalloc_dir)/src/base/logging.cc', 128 '<(tcmalloc_dir)/src/base/logging.h', 129 '<(tcmalloc_dir)/src/base/low_level_alloc.cc', 130 '<(tcmalloc_dir)/src/base/low_level_alloc.h', 131 '<(tcmalloc_dir)/src/base/simple_mutex.h', 132 '<(tcmalloc_dir)/src/base/spinlock.cc', 133 '<(tcmalloc_dir)/src/base/spinlock.h', 134 '<(tcmalloc_dir)/src/base/spinlock_internal.cc', 135 '<(tcmalloc_dir)/src/base/spinlock_internal.h', 136 '<(tcmalloc_dir)/src/base/spinlock_linux-inl.h', 137 '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h', 138 '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h', 139 '<(tcmalloc_dir)/src/base/stl_allocator.h', 140 '<(tcmalloc_dir)/src/base/synchronization_profiling.h', 141 '<(tcmalloc_dir)/src/base/sysinfo.cc', 142 '<(tcmalloc_dir)/src/base/sysinfo.h', 143 '<(tcmalloc_dir)/src/base/thread_annotations.h', 144 '<(tcmalloc_dir)/src/base/thread_lister.c', 145 '<(tcmalloc_dir)/src/base/thread_lister.h', 146 '<(tcmalloc_dir)/src/base/vdso_support.cc', 147 '<(tcmalloc_dir)/src/base/vdso_support.h', 148 '<(tcmalloc_dir)/src/central_freelist.cc', 149 '<(tcmalloc_dir)/src/central_freelist.h', 150 '<(tcmalloc_dir)/src/common.cc', 151 '<(tcmalloc_dir)/src/common.h', 152 '<(tcmalloc_dir)/src/debugallocation.cc', 153 '<(tcmalloc_dir)/src/free_list.cc', 154 '<(tcmalloc_dir)/src/free_list.h', 155 '<(tcmalloc_dir)/src/getpc.h', 156 '<(tcmalloc_dir)/src/gperftools/heap-checker.h', 157 '<(tcmalloc_dir)/src/gperftools/heap-profiler.h', 158 '<(tcmalloc_dir)/src/gperftools/malloc_extension.h', 159 '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h', 160 '<(tcmalloc_dir)/src/gperftools/malloc_hook.h', 161 '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h', 162 '<(tcmalloc_dir)/src/gperftools/profiler.h', 163 '<(tcmalloc_dir)/src/gperftools/stacktrace.h', 164 '<(tcmalloc_dir)/src/gperftools/tcmalloc.h', 165 '<(tcmalloc_dir)/src/heap-checker-bcad.cc', 166 '<(tcmalloc_dir)/src/heap-checker.cc', 167 '<(tcmalloc_dir)/src/heap-profile-table.cc', 168 '<(tcmalloc_dir)/src/heap-profile-table.h', 169 '<(tcmalloc_dir)/src/heap-profiler.cc', 170 '<(tcmalloc_dir)/src/internal_logging.cc', 171 '<(tcmalloc_dir)/src/internal_logging.h', 172 '<(tcmalloc_dir)/src/libc_override.h', 173 '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h', 174 '<(tcmalloc_dir)/src/libc_override_glibc.h', 175 '<(tcmalloc_dir)/src/libc_override_osx.h', 176 '<(tcmalloc_dir)/src/libc_override_redefine.h', 177 '<(tcmalloc_dir)/src/linked_list.h', 178 '<(tcmalloc_dir)/src/malloc_extension.cc', 179 '<(tcmalloc_dir)/src/malloc_hook-inl.h', 180 '<(tcmalloc_dir)/src/malloc_hook.cc', 181 '<(tcmalloc_dir)/src/malloc_hook_mmap_freebsd.h', 182 '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h', 183 '<(tcmalloc_dir)/src/maybe_threads.cc', 184 '<(tcmalloc_dir)/src/maybe_threads.h', 185 '<(tcmalloc_dir)/src/memfs_malloc.cc', 186 '<(tcmalloc_dir)/src/memory_region_map.cc', 187 '<(tcmalloc_dir)/src/memory_region_map.h', 188 '<(tcmalloc_dir)/src/packed-cache-inl.h', 189 '<(tcmalloc_dir)/src/page_heap.cc', 190 '<(tcmalloc_dir)/src/page_heap.h', 191 '<(tcmalloc_dir)/src/page_heap_allocator.h', 192 '<(tcmalloc_dir)/src/pagemap.h', 193 '<(tcmalloc_dir)/src/profile-handler.cc', 194 '<(tcmalloc_dir)/src/profile-handler.h', 195 '<(tcmalloc_dir)/src/profiledata.cc', 196 '<(tcmalloc_dir)/src/profiledata.h', 197 '<(tcmalloc_dir)/src/profiler.cc', 198 '<(tcmalloc_dir)/src/raw_printer.cc', 199 '<(tcmalloc_dir)/src/raw_printer.h', 200 '<(tcmalloc_dir)/src/sampler.cc', 201 '<(tcmalloc_dir)/src/sampler.h', 202 '<(tcmalloc_dir)/src/span.cc', 203 '<(tcmalloc_dir)/src/span.h', 204 '<(tcmalloc_dir)/src/stack_trace_table.cc', 205 '<(tcmalloc_dir)/src/stack_trace_table.h', 206 '<(tcmalloc_dir)/src/stacktrace.cc', 207 '<(tcmalloc_dir)/src/stacktrace_arm-inl.h', 208 '<(tcmalloc_dir)/src/stacktrace_config.h', 209 '<(tcmalloc_dir)/src/stacktrace_generic-inl.h', 210 '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h', 211 '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h', 212 '<(tcmalloc_dir)/src/stacktrace_win32-inl.h', 213 '<(tcmalloc_dir)/src/stacktrace_with_context.cc', 214 '<(tcmalloc_dir)/src/stacktrace_x86-inl.h', 215 '<(tcmalloc_dir)/src/static_vars.cc', 216 '<(tcmalloc_dir)/src/static_vars.h', 217 '<(tcmalloc_dir)/src/symbolize.cc', 218 '<(tcmalloc_dir)/src/symbolize.h', 219 '<(tcmalloc_dir)/src/system-alloc.cc', 220 '<(tcmalloc_dir)/src/system-alloc.h', 221 '<(tcmalloc_dir)/src/tcmalloc.cc', 222 '<(tcmalloc_dir)/src/tcmalloc_guard.h', 223 '<(tcmalloc_dir)/src/thread_cache.cc', 224 '<(tcmalloc_dir)/src/thread_cache.h', 225 226 'debugallocation_shim.cc', 227 ], 228 # sources! means that these are not compiled directly. 229 'sources!': [ 230 # We simply don't use these, but list them above so that IDE 231 # users can view the full available source for reference, etc. 232 '<(tcmalloc_dir)/src/addressmap-inl.h', 233 '<(tcmalloc_dir)/src/base/atomicops-internals-linuxppc.h', 234 '<(tcmalloc_dir)/src/base/atomicops-internals-macosx.h', 235 '<(tcmalloc_dir)/src/base/atomicops-internals-x86-msvc.h', 236 '<(tcmalloc_dir)/src/base/atomicops-internals-x86.h', 237 '<(tcmalloc_dir)/src/base/atomicops.h', 238 '<(tcmalloc_dir)/src/base/commandlineflags.h', 239 '<(tcmalloc_dir)/src/base/cycleclock.h', 240 '<(tcmalloc_dir)/src/base/elf_mem_image.h', 241 '<(tcmalloc_dir)/src/base/elfcore.h', 242 '<(tcmalloc_dir)/src/base/googleinit.h', 243 '<(tcmalloc_dir)/src/base/linux_syscall_support.h', 244 '<(tcmalloc_dir)/src/base/simple_mutex.h', 245 '<(tcmalloc_dir)/src/base/spinlock_linux-inl.h', 246 '<(tcmalloc_dir)/src/base/spinlock_posix-inl.h', 247 '<(tcmalloc_dir)/src/base/spinlock_win32-inl.h', 248 '<(tcmalloc_dir)/src/base/stl_allocator.h', 249 '<(tcmalloc_dir)/src/base/thread_annotations.h', 250 '<(tcmalloc_dir)/src/getpc.h', 251 '<(tcmalloc_dir)/src/gperftools/heap-checker.h', 252 '<(tcmalloc_dir)/src/gperftools/heap-profiler.h', 253 '<(tcmalloc_dir)/src/gperftools/malloc_extension.h', 254 '<(tcmalloc_dir)/src/gperftools/malloc_extension_c.h', 255 '<(tcmalloc_dir)/src/gperftools/malloc_hook.h', 256 '<(tcmalloc_dir)/src/gperftools/malloc_hook_c.h', 257 '<(tcmalloc_dir)/src/gperftools/profiler.h', 258 '<(tcmalloc_dir)/src/gperftools/stacktrace.h', 259 '<(tcmalloc_dir)/src/gperftools/tcmalloc.h', 260 '<(tcmalloc_dir)/src/heap-checker-bcad.cc', 261 '<(tcmalloc_dir)/src/heap-checker.cc', 262 '<(tcmalloc_dir)/src/libc_override.h', 263 '<(tcmalloc_dir)/src/libc_override_gcc_and_weak.h', 264 '<(tcmalloc_dir)/src/libc_override_glibc.h', 265 '<(tcmalloc_dir)/src/libc_override_osx.h', 266 '<(tcmalloc_dir)/src/libc_override_redefine.h', 267 '<(tcmalloc_dir)/src/malloc_hook_mmap_freebsd.h', 268 '<(tcmalloc_dir)/src/malloc_hook_mmap_linux.h', 269 '<(tcmalloc_dir)/src/memfs_malloc.cc', 270 '<(tcmalloc_dir)/src/packed-cache-inl.h', 271 '<(tcmalloc_dir)/src/page_heap_allocator.h', 272 '<(tcmalloc_dir)/src/pagemap.h', 273 '<(tcmalloc_dir)/src/stacktrace_arm-inl.h', 274 '<(tcmalloc_dir)/src/stacktrace_config.h', 275 '<(tcmalloc_dir)/src/stacktrace_generic-inl.h', 276 '<(tcmalloc_dir)/src/stacktrace_libunwind-inl.h', 277 '<(tcmalloc_dir)/src/stacktrace_powerpc-inl.h', 278 '<(tcmalloc_dir)/src/stacktrace_win32-inl.h', 279 '<(tcmalloc_dir)/src/stacktrace_with_context.cc', 280 '<(tcmalloc_dir)/src/stacktrace_x86-inl.h', 281 '<(tcmalloc_dir)/src/tcmalloc_guard.h', 282 283 # Included by debugallocation_shim.cc. 284 '<(tcmalloc_dir)/src/debugallocation.cc', 285 '<(tcmalloc_dir)/src/tcmalloc.cc', 286 ], 287 'variables': { 288 'clang_warning_flags': [ 289 # tcmalloc initializes some fields in the wrong order. 290 '-Wno-reorder', 291 # tcmalloc contains some unused local template specializations. 292 '-Wno-unused-function', 293 # tcmalloc uses COMPILE_ASSERT without static_assert but with 294 # typedefs. 295 '-Wno-unused-local-typedefs', 296 # for magic2_ in debugallocation.cc (only built in Debug builds) 297 # typedefs. 298 '-Wno-unused-private-field', 299 ], 300 }, 301 'conditions': [ 302 ['OS=="linux" or OS=="freebsd" or OS=="solaris" or OS=="android"', { 303 'sources!': [ 304 '<(tcmalloc_dir)/src/system-alloc.h', 305 ], 306 # We enable all warnings by default, but upstream disables a few. 307 # Keep "-Wno-*" flags in sync with upstream by comparing against: 308 # http://code.google.com/p/google-perftools/source/browse/trunk/Makefile.am 309 'cflags': [ 310 '-Wno-sign-compare', 311 '-Wno-unused-result', 312 ], 313 'cflags!': [ 314 '-fvisibility=hidden', 315 ], 316 'link_settings': { 317 'ldflags': [ 318 # Don't let linker rip this symbol out, otherwise the heap&cpu 319 # profilers will not initialize properly on startup. 320 '-Wl,-uIsHeapProfilerRunning,-uProfilerStart', 321 # Do the same for heap leak checker. 322 '-Wl,-u_Z21InitialMallocHook_NewPKvj,-u_Z22InitialMallocHook_MMapPKvS0_jiiix,-u_Z22InitialMallocHook_SbrkPKvi', 323 '-Wl,-u_Z21InitialMallocHook_NewPKvm,-u_Z22InitialMallocHook_MMapPKvS0_miiil,-u_Z22InitialMallocHook_SbrkPKvl', 324 '-Wl,-u_ZN15HeapLeakChecker12IgnoreObjectEPKv,-u_ZN15HeapLeakChecker14UnIgnoreObjectEPKv', 325 ], 326 }, 327 }], 328 ['profiling!=1', { 329 'sources!': [ 330 # cpuprofiler 331 '<(tcmalloc_dir)/src/base/thread_lister.c', 332 '<(tcmalloc_dir)/src/base/thread_lister.h', 333 '<(tcmalloc_dir)/src/profile-handler.cc', 334 '<(tcmalloc_dir)/src/profile-handler.h', 335 '<(tcmalloc_dir)/src/profiledata.cc', 336 '<(tcmalloc_dir)/src/profiledata.h', 337 '<(tcmalloc_dir)/src/profiler.cc', 338 ], 339 }], 340 ], 341 'configurations': { 342 'Debug_Base': { 343 'conditions': [ 344 ['disable_debugallocation==0', { 345 'defines': [ 346 # Use debugallocation for Debug builds to catch problems 347 # early and cleanly, http://crbug.com/30715 . 348 'TCMALLOC_FOR_DEBUGALLOCATION', 349 ], 350 }], 351 ], 352 }, 353 }, 354 }], # use_allocator=="tcmalloc 355 # For CrOS builds with vtable verification. According to the author of 356 # crrev.com/10854031 this is used in conjuction with some other CrOS 357 # build flag, to enable verification of any allocator that uses virtual 358 # function calls. 359 ['use_vtable_verify==1', { 360 'cflags': [ 361 '-fvtable-verify=preinit', 362 ], 363 }], 364 ['order_profiling != 0', { 365 'target_conditions' : [ 366 ['_toolset=="target"', { 367 'cflags!': [ '-finstrument-functions' ], 368 }], 369 ], 370 }], 371 ], # conditions of 'allocator' target. 372 }, # 'allocator' target. 373 ], # targets. 374 'conditions': [ 375 ['OS=="win" and component!="shared_library"', { 376 'targets': [ 377 { 378 'target_name': 'libcmt', 379 'type': 'none', 380 'actions': [ 381 { 382 'action_name': 'libcmt', 383 'inputs': [ 384 'prep_libc.py', 385 ], 386 'outputs': [ 387 '<(SHARED_INTERMEDIATE_DIR)/allocator/libcmt.lib', 388 ], 389 'action': [ 390 'python', 391 'prep_libc.py', 392 '$(VCInstallDir)lib', 393 '<(SHARED_INTERMEDIATE_DIR)/allocator', 394 '<(target_arch)', 395 ], 396 }, 397 ], 398 }, 399 ], 400 }], 401 ], 402 } 403