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
19common_cflags := \
20	-std=gnu99 \
21	-D_REENTRANT \
22	-fvisibility=hidden \
23	-Wno-unused-parameter \
24
25# These parameters change the way jemalloc works.
26#   ANDROID_ALWAYS_PURGE
27#     If defined, always purge immediately when a page is purgeable.
28#   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.
42common_cflags += \
43	-DANDROID_ALWAYS_PURGE \
44	-DANDROID_MAX_ARENAS=2 \
45	-DANDROID_TCACHE_NSLOTS_SMALL_MAX=8 \
46	-DANDROID_TCACHE_NSLOTS_LARGE=16 \
47	-DANDROID_LG_TCACHE_MAXCLASS_DEFAULT=16 \
48
49common_c_includes := \
50	$(LOCAL_PATH)/src \
51	$(LOCAL_PATH)/include \
52
53lib_src_files := \
54	src/arena.c \
55	src/atomic.c \
56	src/base.c \
57	src/bitmap.c \
58	src/chunk.c \
59	src/chunk_dss.c \
60	src/chunk_mmap.c \
61	src/ckh.c \
62	src/ctl.c \
63	src/extent.c \
64	src/hash.c \
65	src/huge.c \
66	src/jemalloc.c \
67	src/mb.c \
68	src/mutex.c \
69	src/prof.c \
70	src/quarantine.c \
71	src/rtree.c \
72	src/stats.c \
73	src/tcache.c \
74	src/tsd.c \
75	src/util.c \
76
77#-----------------------------------------------------------------------
78# jemalloc static library
79#-----------------------------------------------------------------------
80include $(CLEAR_VARS)
81
82LOCAL_MODULE := libjemalloc
83LOCAL_MODULE_TAGS := optional
84
85LOCAL_ADDITIONAL_DEPENDENCIES := \
86	$(LOCAL_PATH)/Android.mk \
87
88LOCAL_CFLAGS := \
89	$(common_cflags) \
90
91LOCAL_C_INCLUDES := \
92	$(common_c_includes) \
93
94LOCAL_SRC_FILES := \
95	$(lib_src_files) \
96	android/src/je_mallinfo.c
97
98include $(BUILD_STATIC_LIBRARY)
99
100#-----------------------------------------------------------------------
101# jemalloc static jet library
102#-----------------------------------------------------------------------
103include $(CLEAR_VARS)
104
105LOCAL_MODULE := libjemalloc_jet
106LOCAL_MODULE_TAGS := optional
107
108LOCAL_ADDITIONAL_DEPENDENCIES := \
109	$(LOCAL_PATH)/Android.mk \
110
111LOCAL_CFLAGS := \
112	$(common_cflags) \
113	-DJEMALLOC_JET \
114
115LOCAL_C_INCLUDES := \
116	$(common_c_includes) \
117
118LOCAL_SRC_FILES := \
119	$(lib_src_files) \
120
121include $(BUILD_STATIC_LIBRARY)
122
123#-----------------------------------------------------------------------
124# jemalloc unit test library
125#-----------------------------------------------------------------------
126include $(CLEAR_VARS)
127
128LOCAL_MODULE := libjemalloc_unittest
129LOCAL_MODULE_TAGS := optional
130
131LOCAL_ADDITIONAL_DEPENDENCIES := \
132	$(LOCAL_PATH)/Android.mk \
133
134LOCAL_CFLAGS := \
135	$(common_cflags) \
136	-DJEMALLOC_UNIT_TEST \
137
138LOCAL_C_INCLUDES := \
139	$(common_c_includes) \
140	$(LOCAL_PATH)/test/src \
141	$(LOCAL_PATH)/test/include \
142
143LOCAL_SRC_FILES := \
144	test/src/math.c \
145	test/src/mtx.c \
146	test/src/SFMT.c \
147	test/src/test.c \
148	test/src/thd.c \
149
150LOCAL_WHOLE_STATIC_LIBRARIES := libjemalloc_jet
151
152include $(BUILD_STATIC_LIBRARY)
153
154#-----------------------------------------------------------------------
155# jemalloc unit tests
156#-----------------------------------------------------------------------
157unit_tests := \
158	test/unit/bitmap.c \
159	test/unit/ckh.c \
160	test/unit/hash.c \
161	test/unit/junk.c \
162	test/unit/mallctl.c \
163	test/unit/math.c \
164	test/unit/mq.c \
165	test/unit/mtx.c \
166	test/unit/prof_accum.c \
167	test/unit/prof_gdump.c \
168	test/unit/prof_idump.c \
169	test/unit/ql.c \
170	test/unit/qr.c \
171	test/unit/quarantine.c \
172	test/unit/rb.c \
173	test/unit/rtree.c \
174	test/unit/SFMT.c \
175	test/unit/stats.c \
176	test/unit/tsd.c \
177	test/unit/util.c \
178	test/unit/zero.c \
179
180$(foreach test,$(unit_tests), \
181  $(eval test_name := $(basename $(notdir $(test)))); \
182  $(eval test_src := $(test)); \
183  $(eval test_cflags := -DJEMALLOC_UNIT_TEST); \
184  $(eval test_libs := libjemalloc_unittest); \
185  $(eval test_path := jemalloc_unittests); \
186  $(eval include $(LOCAL_PATH)/Android.test.mk) \
187)
188
189#-----------------------------------------------------------------------
190# jemalloc integration test library
191#-----------------------------------------------------------------------
192include $(CLEAR_VARS)
193
194LOCAL_MODULE := libjemalloc_integrationtest
195LOCAL_MODULE_TAGS := optional
196
197LOCAL_ADDITIONAL_DEPENDENCIES := \
198	$(LOCAL_PATH)/Android.mk \
199
200LOCAL_CFLAGS := \
201	$(common_cflags) \
202	-DJEMALLOC_INTEGRATION_TEST \
203
204LOCAL_C_INCLUDES := \
205	$(common_c_includes) \
206	$(LOCAL_PATH)/test/src \
207	$(LOCAL_PATH)/test/include \
208
209LOCAL_SRC_FILES := \
210	test/src/math.c \
211	test/src/mtx.c \
212	test/src/SFMT.c \
213	test/src/test.c \
214	test/src/thd.c \
215
216LOCAL_WHOLE_STATIC_LIBRARIES := libjemalloc
217
218include $(BUILD_STATIC_LIBRARY)
219
220#-----------------------------------------------------------------------
221# jemalloc integration tests
222#-----------------------------------------------------------------------
223integration_tests := \
224	test/integration/aligned_alloc.c \
225	test/integration/allocated.c \
226	test/integration/chunk.c \
227	test/integration/mallocx.c \
228	test/integration/MALLOCX_ARENA.c \
229	test/integration/posix_memalign.c \
230	test/integration/rallocx.c \
231	test/integration/thread_arena.c \
232	test/integration/thread_tcache_enabled.c \
233	test/integration/xallocx.c \
234
235$(foreach test,$(integration_tests), \
236  $(eval test_name := $(basename $(notdir $(test)))); \
237  $(eval test_src := $(test)); \
238  $(eval test_cflags := -DJEMALLOC_INTEGRATION_TEST); \
239  $(eval test_libs := libjemalloc_integrationtest); \
240  $(eval test_path := jemalloc_integrationtests); \
241  $(eval include $(LOCAL_PATH)/Android.test.mk) \
242)
243