| // |
| // Copyright (C) 2018 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_GNU_SOURCE", |
| "-D_REENTRANT", |
| "-Wall", |
| "-Wshorten-64-to-32", |
| "-Wsign-compare", |
| "-Wundef", |
| "-Wno-format-zero-length", |
| "-pipe", |
| "-g3", |
| "-fvisibility=hidden", |
| "-O3", |
| "-funroll-loops", |
| |
| // The following flags are for avoiding errors when compiling. |
| "-Wno-unused-parameter", |
| "-Wno-unused-function", |
| "-Wno-missing-field-initializers", |
| |
| "-U_FORTIFY_SOURCE", |
| ] |
| |
| common_c_local_includes = [ |
| "src", |
| "include", |
| ] |
| |
| // These parameters change the way jemalloc works. |
| // ANDROID_NUM_ARENAS=XX |
| // The total number of arenas to create. |
| // ANDROID_TCACHE_NSLOTS_SMALL_MIN=XX |
| // The minimum number of small slots held in the tcache. This must be |
| // at least 1. |
| // 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_common_cflags = [ |
| // Default some parameters to small values to minimize PSS. |
| // These parameters will be overridden by android_product_variables |
| // for non-svelte configs. |
| "-DANDROID_NUM_ARENAS=1", |
| // This value cannot go below 2. |
| "-DANDROID_TCACHE_NSLOTS_SMALL_MAX=2", |
| "-DANDROID_TCACHE_NSLOTS_LARGE=1", |
| ] |
| |
| android_product_variables = { |
| // Only enable the tcache on non-svelte configurations, to save PSS. |
| malloc_not_svelte: { |
| cflags: [ |
| "-DANDROID_ENABLE_TCACHE", |
| "-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16", |
| |
| "-UANDROID_NUM_ARENAS", |
| "-DANDROID_NUM_ARENAS=2", |
| |
| "-UANDROID_TCACHE_NSLOTS_SMALL_MAX", |
| "-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8", |
| |
| "-UANDROID_TCACHE_NSLOTS_LARGE", |
| "-DANDROID_TCACHE_NSLOTS_LARGE=16", |
| ], |
| }, |
| } |
| |
| cc_defaults { |
| name: "jemalloc5_defaults", |
| defaults: ["linux_bionic_supported"], |
| host_supported: true, |
| native_bridge_supported: true, |
| cflags: common_cflags, |
| |
| target: { |
| android: { |
| cflags: android_common_cflags, |
| product_variables: android_product_variables, |
| }, |
| linux_glibc: { |
| enabled: true, |
| }, |
| }, |
| |
| local_include_dirs: common_c_local_includes, |
| stl: "none", |
| } |
| |
| lib_src_files = [ |
| "src/jemalloc.c", |
| "src/arena.c", |
| "src/background_thread.c", |
| "src/base.c", |
| "src/bin.c", |
| "src/bitmap.c", |
| "src/ckh.c", |
| "src/ctl.c", |
| "src/div.c", |
| "src/extent.c", |
| "src/extent_dss.c", |
| "src/extent_mmap.c", |
| "src/hash.c", |
| "src/hooks.c", |
| "src/large.c", |
| "src/log.c", |
| "src/malloc_io.c", |
| "src/mutex.c", |
| "src/mutex_pool.c", |
| "src/nstime.c", |
| "src/pages.c", |
| "src/prng.c", |
| "src/prof.c", |
| "src/rtree.c", |
| "src/stats.c", |
| "src/sz.c", |
| "src/tcache.c", |
| "src/ticker.c", |
| "src/tsd.c", |
| "src/witness.c", |
| ] |
| |
| //----------------------------------------------------------------------- |
| // jemalloc static library |
| //----------------------------------------------------------------------- |
| cc_library { |
| name: "libjemalloc5", |
| ramdisk_available: true, |
| recovery_available: true, |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| srcs: lib_src_files, |
| |
| export_include_dirs: ["include"], |
| |
| target: { |
| android: { |
| shared: { |
| enabled: false, |
| }, |
| system_shared_libs: [], |
| header_libs: ["libc_headers"], |
| }, |
| linux_bionic: { |
| system_shared_libs: [], |
| header_libs: ["libc_headers"], |
| }, |
| }, |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc static jet library |
| //----------------------------------------------------------------------- |
| cc_library_static { |
| name: "libjemalloc5_jet", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| cflags: [ |
| "-DJEMALLOC_JET", |
| ], |
| |
| srcs: lib_src_files, |
| } |
| |
| jemalloc5_testlib_srcs = [ |
| "test/src/btalloc.c", |
| "test/src/btalloc_0.c", |
| "test/src/btalloc_1.c", |
| "test/src/math.c", |
| "test/src/mtx.c", |
| "test/src/mq.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: "libjemalloc5_unittest", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| cflags: [ |
| "-DJEMALLOC_UNIT_TEST", |
| ], |
| |
| local_include_dirs: [ |
| "test/include", |
| ], |
| |
| srcs: jemalloc5_testlib_srcs, |
| |
| whole_static_libs: ["libjemalloc5_jet"], |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc unit tests |
| //----------------------------------------------------------------------- |
| unit_tests = [ |
| "test/unit/a0.c", |
| "test/unit/arena_reset.c", |
| "test/unit/atomic.c", |
| "test/unit/background_thread.c", |
| "test/unit/background_thread_enable.c", |
| "test/unit/base.c", |
| "test/unit/bitmap.c", |
| "test/unit/ckh.c", |
| "test/unit/decay.c", |
| "test/unit/div.c", |
| "test/unit/emitter.c", |
| "test/unit/extent_quantize.c", |
| "test/unit/fork.c", |
| "test/unit/hash.c", |
| "test/unit/hooks.c", |
| "test/unit/junk.c", |
| "test/unit/junk_alloc.c", |
| "test/unit/junk_free.c", |
| "test/unit/log.c", |
| "test/unit/mallctl.c", |
| "test/unit/malloc_io.c", |
| "test/unit/math.c", |
| "test/unit/mq.c", |
| "test/unit/mtx.c", |
| "test/unit/pack.c", |
| "test/unit/pages.c", |
| "test/unit/ph.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_tctx.c", |
| "test/unit/prof_thread_name.c", |
| "test/unit/ql.c", |
| "test/unit/qr.c", |
| "test/unit/rb.c", |
| "test/unit/retained.c", |
| "test/unit/rtree.c", |
| "test/unit/SFMT.c", |
| "test/unit/size_classes.c", |
| "test/unit/slab.c", |
| "test/unit/smoothstep.c", |
| "test/unit/spin.c", |
| "test/unit/stats.c", |
| "test/unit/stats_print.c", |
| "test/unit/ticker.c", |
| "test/unit/nstime.c", |
| "test/unit/tsd.c", |
| "test/unit/witness.c", |
| "test/unit/zero.c", |
| ] |
| |
| cc_test { |
| name: "jemalloc5_unittests", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| gtest: false, |
| |
| cflags: common_cflags + [ |
| "-DJEMALLOC_UNIT_TEST", |
| ], |
| |
| local_include_dirs: common_c_local_includes + [ |
| "test/include", |
| ], |
| |
| srcs: unit_tests, |
| |
| static_libs: ["libjemalloc5_unittest"], |
| |
| test_per_src: true, |
| |
| target: { |
| linux_glibc: { |
| enabled: true, |
| // The sanitizer does not work for these tests on the host. |
| sanitize: { |
| never: true, |
| }, |
| }, |
| }, |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc integration test library |
| //----------------------------------------------------------------------- |
| cc_library_static { |
| name: "libjemalloc5_integrationtest", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| cflags: [ |
| "-U_FORTIFY_SOURCE", |
| "-DJEMALLOC_INTEGRATION_TEST", |
| ], |
| |
| local_include_dirs: [ |
| "test/include", |
| ], |
| |
| srcs: jemalloc5_testlib_srcs + lib_src_files, |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc integration tests |
| //----------------------------------------------------------------------- |
| integration_tests = [ |
| "test/integration/aligned_alloc.c", |
| "test/integration/allocated.c", |
| "test/integration/extent.c", |
| "test/integration/mallocx.c", |
| "test/integration/MALLOCX_ARENA.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/xallocx.c", |
| "test/integration/cpp/basic.cpp", |
| ] |
| |
| cc_test { |
| name: "jemalloc5_integrationtests", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| gtest: false, |
| |
| cflags: common_cflags + [ |
| "-DJEMALLOC_INTEGRATION_TEST", |
| ], |
| |
| local_include_dirs: common_c_local_includes + [ |
| "test/include", |
| ], |
| |
| srcs: integration_tests, |
| |
| static_libs: ["libjemalloc5_integrationtest"], |
| |
| test_per_src: true, |
| |
| target: { |
| linux_glibc: { |
| // The sanitizer does not work for these tests on the host. |
| sanitize: { |
| never: true, |
| }, |
| }, |
| }, |
| |
| // Needed for basic.cpp test. |
| stl: "libc++_static", |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc stress test library |
| //----------------------------------------------------------------------- |
| cc_library_static { |
| name: "libjemalloc5_stresstestlib", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| cflags: [ |
| "-DJEMALLOC_STRESS_TEST", |
| "-DJEMALLOC_STRESS_TESTLIB", |
| ], |
| |
| local_include_dirs: [ |
| "test/include", |
| ], |
| |
| srcs: jemalloc5_testlib_srcs, |
| } |
| |
| //----------------------------------------------------------------------- |
| // jemalloc stress tests |
| //----------------------------------------------------------------------- |
| // All tests are in the same order as in the original jemalloc Makefile |
| // to make it easier to track changes. |
| stress_tests = [ |
| "test/stress/microbench.c", |
| ] |
| |
| cc_test { |
| name: "jemalloc5_stresstests", |
| |
| defaults: ["jemalloc5_defaults"], |
| |
| gtest: false, |
| |
| cflags: common_cflags + [ |
| "-DJEMALLOC_STRESS_TEST", |
| ], |
| |
| local_include_dirs: common_c_local_includes + [ |
| "test/include", |
| ], |
| |
| srcs: stress_tests, |
| |
| static_libs: [ |
| "libjemalloc5", |
| "libjemalloc5_stresstestlib", |
| "libjemalloc5_jet", |
| ], |
| |
| test_per_src: true, |
| |
| target: { |
| linux_glibc: { |
| // The sanitizer does not work for these tests on the host. |
| sanitize: { |
| never: true, |
| }, |
| }, |
| }, |
| } |