// // Copyright (C) 2014 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // common_cflags = [ "-D_REENTRANT", "-O3", "-funroll-loops", "-fvisibility=hidden", "-Wno-unused-parameter", "-Wno-type-limits", ] // These parameters change the way jemalloc works. // ANDROID_MAX_ARENAS=XX // The total number of arenas will be less than or equal to this number. // The number of arenas will be calculated as 2 * the number of cpus // but no larger than XX. // ANDROID_TCACHE_NSLOTS_SMALL_MAX=XX // The number of small slots held in the tcache. The higher this number // is, the higher amount of PSS consumed. If this number is set too low // then small allocations will take longer to complete. // ANDROID_TCACHE_NSLOTS_LARGE=XX // The number of large slots held in the tcache. The higher this number // is, the higher amount of PSS consumed. If this number is set too low // then large allocations will take longer to complete. // ANDROID_LG_TCACHE_MAXCLASS_DEFAULT=XX // 1 << XX is the maximum sized allocation that will be in the tcache. // ANDROID_LG_CHUNK_DEFAULT=XX // 1 << XX is the default chunk size used by the system. Decreasing this // usually decreases the amount of PSS used, but can increase // fragmentation. // Default to a single arena for svelte configurations to minimize // PSS consumed by jemalloc. common_cflags += [ "-DANDROID_MAX_ARENAS=1", "-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16", ] common_c_local_includes = [ "src", "include", ] common_product_variables = { // Only enable the tcache on non-svelte configurations, to save PSS. malloc_not_svelte: { cflags: [ "-UANDROID_MAX_ARENAS", "-DANDROID_MAX_ARENAS=2", "-DJEMALLOC_TCACHE", "-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8", "-DANDROID_TCACHE_NSLOTS_LARGE=16", ], }, } cc_defaults { name: "jemalloc_defaults", defaults: ["linux_bionic_supported"], cflags: common_cflags, product_variables: common_product_variables, multilib: { lib32: { // Use a 512K chunk size on 32 bit systems. // This keeps the total amount of virtual address space consumed // by jemalloc lower. cflags: [ "-DANDROID_LG_CHUNK_DEFAULT=19", ], }, lib64: { // Use a 2MB chunk size on 64 bit systems. // This is the default currently used by 4.0.0 cflags: [ "-DANDROID_LG_CHUNK_DEFAULT=21", ], }, }, local_include_dirs: common_c_local_includes, stl: "none", } lib_src_files = [ "src/arena.c", "src/atomic.c", "src/base.c", "src/bitmap.c", "src/chunk.c", "src/chunk_dss.c", "src/chunk_mmap.c", "src/ckh.c", "src/ctl.c", "src/extent.c", "src/hash.c", "src/huge.c", "src/jemalloc.c", "src/mb.c", "src/mutex.c", "src/nstime.c", "src/pages.c", "src/prng.c", "src/prof.c", "src/quarantine.c", "src/rtree.c", "src/spin.c", "src/stats.c", "src/tcache.c", "src/ticker.c", "src/tsd.c", "src/util.c", "src/witness.c", ] //----------------------------------------------------------------------- // jemalloc static library //----------------------------------------------------------------------- cc_library_static { name: "libjemalloc", defaults: ["jemalloc_defaults"], cflags: ["-include bionic/libc/async_safe/include/async_safe/log.h"], srcs: lib_src_files, } //----------------------------------------------------------------------- // jemalloc static jet library //----------------------------------------------------------------------- cc_library_static { name: "libjemalloc_jet", defaults: ["jemalloc_defaults"], cflags: [ "-DJEMALLOC_JET", "-include android/include/log.h", ], srcs: lib_src_files, } jemalloc_testlib_srcs = [ "test/src/btalloc.c", "test/src/btalloc_0.c", "test/src/btalloc_1.c", "test/src/math.c", "test/src/mq.c", "test/src/mtx.c", "test/src/SFMT.c", "test/src/test.c", "test/src/thd.c", "test/src/timer.c", ] //----------------------------------------------------------------------- // jemalloc unit test library //----------------------------------------------------------------------- cc_library_static { name: "libjemalloc_unittest", defaults: ["jemalloc_defaults"], cflags: [ "-DJEMALLOC_UNIT_TEST", "-include android/include/log.h", ], local_include_dirs: [ "test/src", "test/include", ], srcs: jemalloc_testlib_srcs, whole_static_libs: ["libjemalloc_jet"], } //----------------------------------------------------------------------- // jemalloc unit tests //----------------------------------------------------------------------- unit_tests = [ "test/unit/a0.c", "test/unit/arena_reset.c", "test/unit/atomic.c", "test/unit/bitmap.c", "test/unit/ckh.c", "test/unit/decay.c", "test/unit/fork.c", "test/unit/hash.c", "test/unit/junk.c", "test/unit/junk_alloc.c", "test/unit/junk_free.c", "test/unit/lg_chunk.c", "test/unit/mallctl.c", "test/unit/math.c", "test/unit/mq.c", "test/unit/mtx.c", "test/unit/nstime.c", "test/unit/pack.c", "test/unit/pages.c", "test/unit/prng.c", "test/unit/prof_accum.c", "test/unit/prof_active.c", "test/unit/prof_gdump.c", "test/unit/prof_idump.c", "test/unit/prof_reset.c", "test/unit/prof_thread_name.c", "test/unit/ql.c", "test/unit/qr.c", "test/unit/quarantine.c", "test/unit/rb.c", "test/unit/rtree.c", "test/unit/run_quantize.c", "test/unit/SFMT.c", "test/unit/size_classes.c", "test/unit/smoothstep.c", "test/unit/stats.c", "test/unit/ticker.c", "test/unit/tsd.c", "test/unit/util.c", "test/unit/witness.c", "test/unit/zero.c", ] cc_test { name: "jemalloc_unittests", gtest: false, product_variables: common_product_variables, cflags: common_cflags + [ "-DJEMALLOC_UNIT_TEST", "-include android/include/log.h", ], local_include_dirs: common_c_local_includes + [ "test/src", "test/include", ], srcs: unit_tests, static_libs: ["libjemalloc_unittest"], shared_libs: ["liblog"], test_per_src: true, } //----------------------------------------------------------------------- // jemalloc integration test library //----------------------------------------------------------------------- cc_library_static { name: "libjemalloc_integrationtest", defaults: ["jemalloc_defaults"], cflags: [ "-DJEMALLOC_INTEGRATION_TEST", "-include android/include/log.h", ], local_include_dirs: [ "test/src", "test/include", ], srcs: jemalloc_testlib_srcs + lib_src_files, } //----------------------------------------------------------------------- // jemalloc integration tests //----------------------------------------------------------------------- integration_tests = [ "test/integration/aligned_alloc.c", "test/integration/allocated.c", "test/integration/chunk.c", "test/integration/iterate.c", "test/integration/MALLOCX_ARENA.c", "test/integration/mallocx.c", "test/integration/overflow.c", "test/integration/posix_memalign.c", "test/integration/rallocx.c", "test/integration/sdallocx.c", "test/integration/thread_arena.c", "test/integration/thread_tcache_enabled.c", "test/integration/xallocx.c", ] cc_test { name: "jemalloc_integrationtests", gtest: false, product_variables: common_product_variables, cflags: common_cflags + [ "-DJEMALLOC_INTEGRATION_TEST", "-include android/include/log.h", ], local_include_dirs: common_c_local_includes + [ "test/src", "test/include", ], srcs: integration_tests, static_libs: ["libjemalloc_integrationtest"], shared_libs: ["liblog"], test_per_src: true, }