blob: cea3a8df704e9015fc0824c195b6fa7acb8a254e [file] [log] [blame]
Dan Willemsen1bd78892015-09-11 13:08:19 -07001//
2// Copyright (C) 2014 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17common_cflags = [
Dan Willemsen1bd78892015-09-11 13:08:19 -070018 "-D_REENTRANT",
Alex Naidis5a22dd02016-08-19 22:57:27 +020019 "-O3",
20 "-funroll-loops",
Dan Willemsen1bd78892015-09-11 13:08:19 -070021 "-fvisibility=hidden",
Chih-Hung Hsieh033b6fd2017-09-28 12:17:52 -070022 "-Werror",
Dan Willemsen1bd78892015-09-11 13:08:19 -070023 "-Wno-unused-parameter",
Colin Cross70274782015-12-29 16:56:11 -080024 "-Wno-type-limits",
Dan Willemsen1bd78892015-09-11 13:08:19 -070025]
26
27// These parameters change the way jemalloc works.
Dan Willemsen1bd78892015-09-11 13:08:19 -070028// ANDROID_MAX_ARENAS=XX
29// The total number of arenas will be less than or equal to this number.
30// The number of arenas will be calculated as 2 * the number of cpus
31// but no larger than XX.
32// ANDROID_TCACHE_NSLOTS_SMALL_MAX=XX
33// The number of small slots held in the tcache. The higher this number
34// is, the higher amount of PSS consumed. If this number is set too low
35// then small allocations will take longer to complete.
36// ANDROID_TCACHE_NSLOTS_LARGE=XX
37// The number of large slots held in the tcache. The higher this number
38// is, the higher amount of PSS consumed. If this number is set too low
39// then large allocations will take longer to complete.
40// ANDROID_LG_TCACHE_MAXCLASS_DEFAULT=XX
41// 1 << XX is the maximum sized allocation that will be in the tcache.
42// ANDROID_LG_CHUNK_DEFAULT=XX
43// 1 << XX is the default chunk size used by the system. Decreasing this
44// usually decreases the amount of PSS used, but can increase
45// fragmentation.
Christopher Ferris53bf3352016-07-19 14:05:20 -070046
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +000047android_common_cflags = [
48 // Default to a single arena for svelte configurations to minimize
49 // PSS. This will be overridden by android_product_variables for
50 // non-svelte configs.
Christopher Ferris53bf3352016-07-19 14:05:20 -070051 "-DANDROID_MAX_ARENAS=1",
Dan Willemsen1bd78892015-09-11 13:08:19 -070052 "-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16",
53]
54
Dan Willemsen1bd78892015-09-11 13:08:19 -070055common_c_local_includes = [
56 "src",
57 "include",
58]
59
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +000060android_product_variables = {
Dan Willemsene67f1d52016-03-01 17:23:40 -080061 // Only enable the tcache on non-svelte configurations, to save PSS.
62 malloc_not_svelte: {
Christopher Ferris53bf3352016-07-19 14:05:20 -070063 cflags: [
64 "-UANDROID_MAX_ARENAS",
65 "-DANDROID_MAX_ARENAS=2",
66 "-DJEMALLOC_TCACHE",
67 "-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8",
68 "-DANDROID_TCACHE_NSLOTS_LARGE=16",
69 ],
Dan Willemsene67f1d52016-03-01 17:23:40 -080070 },
71}
72
73cc_defaults {
74 name: "jemalloc_defaults",
Dan Willemsenba738bb2016-11-04 12:25:48 -070075 defaults: ["linux_bionic_supported"],
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +000076 host_supported: true,
Dan Willemsene67f1d52016-03-01 17:23:40 -080077 cflags: common_cflags,
78
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +000079 target: {
80 android: {
81 cflags: android_common_cflags + [
82 "-include android/include/log.h",
83 ],
84 product_variables: android_product_variables,
85 },
Dan Willemsen9447c6b2018-10-12 00:37:49 -070086 linux_bionic: {
87 cflags: ["-DJEMALLOC_TCACHE"],
88 },
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +000089 linux_glibc: {
90 enabled: true,
91 },
92 },
Dan Willemsene67f1d52016-03-01 17:23:40 -080093
94 multilib: {
95 lib32: {
96 // Use a 512K chunk size on 32 bit systems.
97 // This keeps the total amount of virtual address space consumed
98 // by jemalloc lower.
99 cflags: [
100 "-DANDROID_LG_CHUNK_DEFAULT=19",
101 ],
102 },
103 lib64: {
104 // Use a 2MB chunk size on 64 bit systems.
105 // This is the default currently used by 4.0.0
106 cflags: [
107 "-DANDROID_LG_CHUNK_DEFAULT=21",
108 ],
109 },
110 },
111
112 local_include_dirs: common_c_local_includes,
Colin Cross4daa75d2016-04-07 13:28:20 -0700113 stl: "none",
Dan Willemsene67f1d52016-03-01 17:23:40 -0800114}
115
Dan Willemsen1bd78892015-09-11 13:08:19 -0700116lib_src_files = [
117 "src/arena.c",
118 "src/atomic.c",
119 "src/base.c",
120 "src/bitmap.c",
121 "src/chunk.c",
122 "src/chunk_dss.c",
123 "src/chunk_mmap.c",
124 "src/ckh.c",
125 "src/ctl.c",
126 "src/extent.c",
127 "src/hash.c",
128 "src/huge.c",
129 "src/jemalloc.c",
130 "src/mb.c",
131 "src/mutex.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800132 "src/nstime.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700133 "src/pages.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800134 "src/prng.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700135 "src/prof.c",
136 "src/quarantine.c",
137 "src/rtree.c",
Christopher Ferrisfb1f0942016-11-08 14:47:48 -0800138 "src/spin.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700139 "src/stats.c",
140 "src/tcache.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800141 "src/ticker.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700142 "src/tsd.c",
143 "src/util.c",
Christopher Ferris35452472016-06-14 14:28:47 -0700144 "src/witness.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700145]
146
147//-----------------------------------------------------------------------
148// jemalloc static library
149//-----------------------------------------------------------------------
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000150cc_library {
Dan Willemsen1bd78892015-09-11 13:08:19 -0700151 name: "libjemalloc",
Jiyong Park20a932e2018-04-27 21:47:48 +0900152 recovery_available: true,
Dan Willemsen1bd78892015-09-11 13:08:19 -0700153
Dan Willemsene67f1d52016-03-01 17:23:40 -0800154 defaults: ["jemalloc_defaults"],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700155
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000156 target: {
157 android: {
158 shared: {
159 enabled: false,
160 },
161 },
162 },
Dan Willemsen1bd78892015-09-11 13:08:19 -0700163
Dan Willemsen1bd78892015-09-11 13:08:19 -0700164 srcs: lib_src_files,
Dan Willemsen1bd78892015-09-11 13:08:19 -0700165}
166
167//-----------------------------------------------------------------------
168// jemalloc static jet library
169//-----------------------------------------------------------------------
170cc_library_static {
Dan Willemsen1bd78892015-09-11 13:08:19 -0700171 name: "libjemalloc_jet",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700172
Dan Willemsene67f1d52016-03-01 17:23:40 -0800173 defaults: ["jemalloc_defaults"],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700174
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700175 cflags: [
176 "-DJEMALLOC_JET",
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700177 ],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700178
Dan Willemsen1bd78892015-09-11 13:08:19 -0700179 srcs: lib_src_files,
180
181}
182
183jemalloc_testlib_srcs = [
184 "test/src/btalloc.c",
185 "test/src/btalloc_0.c",
186 "test/src/btalloc_1.c",
187 "test/src/math.c",
188 "test/src/mq.c",
189 "test/src/mtx.c",
190 "test/src/SFMT.c",
191 "test/src/test.c",
192 "test/src/thd.c",
193 "test/src/timer.c",
194]
195
196//-----------------------------------------------------------------------
197// jemalloc unit test library
198//-----------------------------------------------------------------------
199cc_library_static {
Dan Willemsen1bd78892015-09-11 13:08:19 -0700200 name: "libjemalloc_unittest",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700201
Dan Willemsene67f1d52016-03-01 17:23:40 -0800202 defaults: ["jemalloc_defaults"],
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700203 cflags: [
204 "-DJEMALLOC_UNIT_TEST",
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700205 ],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700206
Dan Willemsene67f1d52016-03-01 17:23:40 -0800207 local_include_dirs: [
Dan Willemsen1bd78892015-09-11 13:08:19 -0700208 "test/src",
209 "test/include",
210 ],
211
212 srcs: jemalloc_testlib_srcs,
213
214 whole_static_libs: ["libjemalloc_jet"],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700215}
216
217//-----------------------------------------------------------------------
218// jemalloc unit tests
219//-----------------------------------------------------------------------
220unit_tests = [
Christopher Ferris35452472016-06-14 14:28:47 -0700221 "test/unit/a0.c",
222 "test/unit/arena_reset.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700223 "test/unit/atomic.c",
224 "test/unit/bitmap.c",
225 "test/unit/ckh.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800226 "test/unit/decay.c",
Christopher Ferris35452472016-06-14 14:28:47 -0700227 "test/unit/fork.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700228 "test/unit/hash.c",
229 "test/unit/junk.c",
230 "test/unit/junk_alloc.c",
231 "test/unit/junk_free.c",
232 "test/unit/lg_chunk.c",
233 "test/unit/mallctl.c",
234 "test/unit/math.c",
235 "test/unit/mq.c",
236 "test/unit/mtx.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800237 "test/unit/nstime.c",
Christopher Ferrisbf9b0182016-12-08 11:56:18 -0800238 "test/unit/pack.c",
239 "test/unit/pages.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800240 "test/unit/prng.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700241 "test/unit/prof_accum.c",
242 "test/unit/prof_active.c",
243 "test/unit/prof_gdump.c",
244 "test/unit/prof_idump.c",
245 "test/unit/prof_reset.c",
246 "test/unit/prof_thread_name.c",
247 "test/unit/ql.c",
248 "test/unit/qr.c",
249 "test/unit/quarantine.c",
250 "test/unit/rb.c",
251 "test/unit/rtree.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800252 "test/unit/run_quantize.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700253 "test/unit/SFMT.c",
254 "test/unit/size_classes.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800255 "test/unit/smoothstep.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700256 "test/unit/stats.c",
Dan Willemsenec006d82016-03-07 16:22:25 -0800257 "test/unit/ticker.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700258 "test/unit/tsd.c",
259 "test/unit/util.c",
Christopher Ferris35452472016-06-14 14:28:47 -0700260 "test/unit/witness.c",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700261 "test/unit/zero.c",
262]
263
Dan Willemsenf0f45852015-12-21 15:29:32 -0800264cc_test {
Colin Cross89d0f3c2015-09-17 15:34:16 -0700265 name: "jemalloc_unittests",
Dan Willemsenf0f45852015-12-21 15:29:32 -0800266
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000267 defaults: ["jemalloc_defaults"],
Dan Willemsene67f1d52016-03-01 17:23:40 -0800268
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000269 gtest: false,
Christopher Ferrisf4496b22018-09-13 18:08:30 +0000270
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700271 cflags: common_cflags + [
272 "-DJEMALLOC_UNIT_TEST",
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700273 ],
Colin Cross89d0f3c2015-09-17 15:34:16 -0700274
275 local_include_dirs: common_c_local_includes + [
276 "test/src",
277 "test/include",
278 ],
279
280 srcs: unit_tests,
281
282 static_libs: ["libjemalloc_unittest"],
283
Dan Willemsene67f1d52016-03-01 17:23:40 -0800284 shared_libs: ["liblog"],
Colin Cross89d0f3c2015-09-17 15:34:16 -0700285
286 test_per_src: true,
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000287
288 target: {
289 linux_glibc: {
290 // The sanitizer does not work for these tests on the host.
291 sanitize: {
292 never: true,
293 },
294 },
295 },
Colin Cross89d0f3c2015-09-17 15:34:16 -0700296}
297
Dan Willemsen1bd78892015-09-11 13:08:19 -0700298//-----------------------------------------------------------------------
299// jemalloc integration test library
300//-----------------------------------------------------------------------
301cc_library_static {
Dan Willemsen1bd78892015-09-11 13:08:19 -0700302 name: "libjemalloc_integrationtest",
Dan Willemsen1bd78892015-09-11 13:08:19 -0700303
Dan Willemsene67f1d52016-03-01 17:23:40 -0800304 defaults: ["jemalloc_defaults"],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700305
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700306 cflags: [
307 "-DJEMALLOC_INTEGRATION_TEST",
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700308 ],
Dan Willemsen1bd78892015-09-11 13:08:19 -0700309
Dan Willemsene67f1d52016-03-01 17:23:40 -0800310 local_include_dirs: [
Dan Willemsen1bd78892015-09-11 13:08:19 -0700311 "test/src",
312 "test/include",
313 ],
314
315 srcs: jemalloc_testlib_srcs + lib_src_files,
316
317}
318
319//-----------------------------------------------------------------------
320// jemalloc integration tests
321//-----------------------------------------------------------------------
322integration_tests = [
323 "test/integration/aligned_alloc.c",
324 "test/integration/allocated.c",
325 "test/integration/chunk.c",
326 "test/integration/MALLOCX_ARENA.c",
327 "test/integration/mallocx.c",
328 "test/integration/overflow.c",
329 "test/integration/posix_memalign.c",
330 "test/integration/rallocx.c",
331 "test/integration/sdallocx.c",
332 "test/integration/thread_arena.c",
333 "test/integration/thread_tcache_enabled.c",
334 "test/integration/xallocx.c",
335]
Colin Cross89d0f3c2015-09-17 15:34:16 -0700336
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000337android_integration_tests = [
338 "test/integration/iterate.c",
339]
Dan Willemsenf0f45852015-12-21 15:29:32 -0800340
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000341cc_test {
Christopher Ferrisf4496b22018-09-13 18:08:30 +0000342 name: "jemalloc_integrationtests",
Christopher Ferrisfa930162018-09-07 15:15:16 -0700343
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000344 defaults: ["jemalloc_defaults"],
345
Dan Willemsenf0f45852015-12-21 15:29:32 -0800346 gtest: false,
Colin Cross89d0f3c2015-09-17 15:34:16 -0700347
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700348 cflags: common_cflags + [
349 "-DJEMALLOC_INTEGRATION_TEST",
Dan Willemsen2ee91d82016-05-25 15:06:55 -0700350 ],
Colin Cross89d0f3c2015-09-17 15:34:16 -0700351
352 local_include_dirs: common_c_local_includes + [
353 "test/src",
354 "test/include",
355 ],
356
357 srcs: integration_tests,
Christopher Ferrisbb9b1cf2018-09-13 20:24:10 +0000358 target: {
359 android: {
360 srcs: android_integration_tests,
361 },
362 linux_glibc: {
363 // The sanitizer does not work for these tests on the host.
364 sanitize: {
365 never: true,
366 },
367 },
368 },
Colin Cross89d0f3c2015-09-17 15:34:16 -0700369
370 static_libs: ["libjemalloc_integrationtest"],
371
Dan Willemsene67f1d52016-03-01 17:23:40 -0800372 shared_libs: ["liblog"],
Colin Cross89d0f3c2015-09-17 15:34:16 -0700373
374 test_per_src: true,
375}