• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
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
17LOCAL_PATH := $(call my-dir)
18
19jemalloc_common_cflags := \
20	-std=gnu99 \
21	-D_REENTRANT \
22	-fvisibility=hidden \
23	-Wno-unused-parameter \
24	-Wno-type-limits \
25
26# These parameters change the way jemalloc works.
27#   ANDROID_MAX_ARENAS=XX
28#     The total number of arenas will be less than or equal to this number.
29#     The number of arenas will be calculated as 2 * the number of cpus
30#     but no larger than XX.
31#   ANDROID_TCACHE_NSLOTS_SMALL_MAX=XX
32#     The number of small slots held in the tcache. The higher this number
33#     is, the higher amount of PSS consumed. If this number is set too low
34#     then small allocations will take longer to complete.
35#   ANDROID_TCACHE_NSLOTS_LARGE=XX
36#     The number of large slots held in the tcache. The higher this number
37#     is, the higher amount of PSS consumed. If this number is set too low
38#     then large allocations will take longer to complete.
39#   ANDROID_LG_TCACHE_MAXCLASS_DEFAULT=XX
40#     1 << XX is the maximum sized allocation that will be in the tcache.
41#   ANDROID_LG_CHUNK_DEFAULT=XX
42#     1 << XX is the default chunk size used by the system. Decreasing this
43#     usually decreases the amount of PSS used, but can increase
44#     fragmentation.
45jemalloc_common_cflags += \
46	-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16 \
47
48ifeq ($(MALLOC_SVELTE),true)
49# Use a single arena on svelte devices to keep the PSS consumption as low
50# as possible.
51jemalloc_common_cflags += \
52	-DANDROID_MAX_ARENAS=1 \
53
54else
55# Only enable the tcache on non-svelte configurations, to save PSS.
56jemalloc_common_cflags += \
57	-DANDROID_MAX_ARENAS=2 \
58	-DJEMALLOC_TCACHE \
59	-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8 \
60	-DANDROID_TCACHE_NSLOTS_LARGE=16 \
61
62endif
63
64# Use a 512K chunk size on 32 bit systems.
65# This keeps the total amount of virtual address space consumed
66# by jemalloc lower.
67jemalloc_common_cflags_32 += \
68	-DANDROID_LG_CHUNK_DEFAULT=19 \
69
70# Use a 2MB chunk size on 64 bit systems.
71# This is the default currently used by 4.0.0.
72jemalloc_common_cflags_64 += \
73	-DANDROID_LG_CHUNK_DEFAULT=21 \
74
75jemalloc_common_c_includes := \
76	$(LOCAL_PATH)/src \
77	$(LOCAL_PATH)/include \
78
79jemalloc_lib_src_files := \
80	src/arena.c \
81	src/atomic.c \
82	src/base.c \
83	src/bitmap.c \
84	src/chunk.c \
85	src/chunk_dss.c \
86	src/chunk_mmap.c \
87	src/ckh.c \
88	src/ctl.c \
89	src/extent.c \
90	src/hash.c \
91	src/huge.c \
92	src/jemalloc.c \
93	src/mb.c \
94	src/mutex.c \
95	src/nstime.c \
96	src/pages.c \
97	src/prng.c \
98	src/prof.c \
99	src/quarantine.c \
100	src/rtree.c \
101	src/stats.c \
102	src/tcache.c \
103	src/ticker.c \
104	src/tsd.c \
105	src/util.c \
106
107#-----------------------------------------------------------------------
108# jemalloc static library
109#-----------------------------------------------------------------------
110include $(CLEAR_VARS)
111
112LOCAL_MODULE := libjemalloc
113LOCAL_MODULE_TAGS := optional
114
115LOCAL_ADDITIONAL_DEPENDENCIES := \
116	$(LOCAL_PATH)/Android.mk \
117
118LOCAL_CFLAGS := \
119	$(jemalloc_common_cflags) \
120	-include bionic/libc/private/libc_logging.h \
121
122LOCAL_CFLAGS_32 := $(jemalloc_common_cflags_32)
123LOCAL_CFLAGS_64 := $(jemalloc_common_cflags_64)
124
125LOCAL_C_INCLUDES := \
126	$(jemalloc_common_c_includes) \
127
128LOCAL_SRC_FILES := \
129	$(jemalloc_lib_src_files) \
130
131# This is linked into libc, which asan runtime library depends on.
132LOCAL_SANITIZE := never
133
134include $(BUILD_STATIC_LIBRARY)
135
136#-----------------------------------------------------------------------
137# jemalloc static jet library
138#-----------------------------------------------------------------------
139include $(CLEAR_VARS)
140
141LOCAL_MODULE := libjemalloc_jet
142LOCAL_MODULE_TAGS := optional
143
144LOCAL_ADDITIONAL_DEPENDENCIES := \
145	$(LOCAL_PATH)/Android.mk \
146
147LOCAL_CFLAGS := \
148	$(jemalloc_common_cflags) \
149	-DJEMALLOC_JET \
150	-include $(LOCAL_PATH)/android/include/libc_logging.h \
151
152LOCAL_CFLAGS_32 := $(jemalloc_common_cflags_32)
153LOCAL_CFLAGS_64 := $(jemalloc_common_cflags_64)
154
155LOCAL_C_INCLUDES := \
156	$(jemalloc_common_c_includes) \
157
158LOCAL_SRC_FILES := \
159	$(jemalloc_lib_src_files) \
160
161include $(BUILD_STATIC_LIBRARY)
162
163jemalloc_testlib_srcs := \
164	test/src/btalloc.c \
165	test/src/btalloc_0.c \
166	test/src/btalloc_1.c \
167	test/src/math.c \
168	test/src/mq.c \
169	test/src/mtx.c \
170	test/src/SFMT.c \
171	test/src/test.c \
172	test/src/thd.c \
173	test/src/timer.c \
174
175#-----------------------------------------------------------------------
176# jemalloc unit test library
177#-----------------------------------------------------------------------
178include $(CLEAR_VARS)
179
180LOCAL_MODULE := libjemalloc_unittest
181LOCAL_MODULE_TAGS := optional
182
183LOCAL_ADDITIONAL_DEPENDENCIES := \
184	$(LOCAL_PATH)/Android.mk \
185
186LOCAL_CFLAGS := \
187	$(jemalloc_common_cflags) \
188	-DJEMALLOC_UNIT_TEST \
189	-include $(LOCAL_PATH)/android/include/libc_logging.h \
190
191LOCAL_CFLAGS_32 := $(jemalloc_common_cflags_32)
192LOCAL_CFLAGS_64 := $(jemalloc_common_cflags_64)
193
194LOCAL_C_INCLUDES := \
195	$(jemalloc_common_c_includes) \
196	$(LOCAL_PATH)/test/src \
197	$(LOCAL_PATH)/test/include \
198
199LOCAL_SRC_FILES := $(jemalloc_testlib_srcs)
200
201LOCAL_WHOLE_STATIC_LIBRARIES := libjemalloc_jet
202
203include $(BUILD_STATIC_LIBRARY)
204#include $(BUILD_SHARED_LIBRARY)
205
206#-----------------------------------------------------------------------
207# jemalloc unit tests
208#-----------------------------------------------------------------------
209jemalloc_unit_tests := \
210	test/unit/atomic.c \
211	test/unit/bitmap.c \
212	test/unit/ckh.c \
213	test/unit/decay.c \
214	test/unit/hash.c \
215	test/unit/junk.c \
216	test/unit/junk_alloc.c \
217	test/unit/junk_free.c \
218	test/unit/lg_chunk.c \
219	test/unit/mallctl.c \
220	test/unit/math.c \
221	test/unit/mq.c \
222	test/unit/mtx.c \
223	test/unit/nstime.c \
224	test/unit/prng.c \
225	test/unit/prof_accum.c \
226	test/unit/prof_active.c \
227	test/unit/prof_gdump.c \
228	test/unit/prof_idump.c \
229	test/unit/prof_reset.c \
230	test/unit/prof_thread_name.c \
231	test/unit/ql.c \
232	test/unit/qr.c \
233	test/unit/quarantine.c \
234	test/unit/rb.c \
235	test/unit/rtree.c \
236	test/unit/run_quantize.c \
237	test/unit/SFMT.c \
238	test/unit/size_classes.c \
239	test/unit/smoothstep.c \
240	test/unit/stats.c \
241	test/unit/ticker.c \
242	test/unit/tsd.c \
243	test/unit/util.c \
244	test/unit/zero.c \
245
246$(foreach test,$(jemalloc_unit_tests), \
247  $(eval test_name := $(basename $(notdir $(test)))); \
248  $(eval test_src := $(test)); \
249  $(eval test_cflags := -DJEMALLOC_UNIT_TEST); \
250  $(eval test_libs := libjemalloc_unittest); \
251  $(eval test_path := jemalloc_unittests); \
252  $(eval include $(LOCAL_PATH)/Android.test.mk) \
253)
254
255#-----------------------------------------------------------------------
256# jemalloc integration test library
257#-----------------------------------------------------------------------
258include $(CLEAR_VARS)
259
260LOCAL_MODULE := libjemalloc_integrationtest
261LOCAL_MODULE_TAGS := optional
262
263LOCAL_ADDITIONAL_DEPENDENCIES := \
264	$(LOCAL_PATH)/Android.mk \
265
266LOCAL_CFLAGS := \
267	$(jemalloc_common_cflags) \
268	-DJEMALLOC_INTEGRATION_TEST \
269	-include $(LOCAL_PATH)/android/include/libc_logging.h \
270
271LOCAL_CFLAGS_32 := $(jemalloc_common_cflags_32)
272LOCAL_CFLAGS_64 := $(jemalloc_common_cflags_64)
273
274LOCAL_C_INCLUDES := \
275	$(jemalloc_common_c_includes) \
276	$(LOCAL_PATH)/test/src \
277	$(LOCAL_PATH)/test/include \
278
279LOCAL_SRC_FILES := \
280	$(jemalloc_testlib_srcs) \
281	$(jemalloc_lib_src_files) \
282
283include $(BUILD_STATIC_LIBRARY)
284
285#-----------------------------------------------------------------------
286# jemalloc integration tests
287#-----------------------------------------------------------------------
288jemalloc_integration_tests := \
289	test/integration/aligned_alloc.c \
290	test/integration/allocated.c \
291	test/integration/chunk.c \
292	test/integration/iterate.c \
293	test/integration/MALLOCX_ARENA.c \
294	test/integration/mallocx.c \
295	test/integration/overflow.c \
296	test/integration/posix_memalign.c \
297	test/integration/rallocx.c \
298	test/integration/sdallocx.c \
299	test/integration/thread_arena.c \
300	test/integration/thread_tcache_enabled.c \
301	test/integration/xallocx.c \
302
303$(foreach test,$(jemalloc_integration_tests), \
304  $(eval test_name := $(basename $(notdir $(test)))); \
305  $(eval test_src := $(test)); \
306  $(eval test_cflags := -DJEMALLOC_INTEGRATION_TEST); \
307  $(eval test_libs := libjemalloc_integrationtest); \
308  $(eval test_path := jemalloc_integrationtests); \
309  $(eval include $(LOCAL_PATH)/Android.test.mk) \
310)
311