2 # Copyright (C) 2015 The Android Open Source Project
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
16 LOCAL_PATH := $(call my-dir)
18 simpleperf_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/null)
20 simpleperf_common_cppflags := -Wextra -Wunused -Wno-unknown-pragmas \
21 -DSIMPLEPERF_REVISION='"$(simpleperf_version)"'
23 simpleperf_cppflags_target := $(simpleperf_common_cppflags)
25 simpleperf_cppflags_host := $(simpleperf_common_cppflags) \
26 -DUSE_BIONIC_UAPI_HEADERS -I bionic/libc/kernel \
29 simpleperf_cppflags_host_darwin := -I $(LOCAL_PATH)/nonlinux_support/include
30 simpleperf_cppflags_host_windows := -I $(LOCAL_PATH)/nonlinux_support/include
33 LLVM_ROOT_PATH := external/llvm
34 include $(LLVM_ROOT_PATH)/llvm.mk
36 simpleperf_static_libraries_target := \
37 libbacktrace_offline \
54 libprotobuf-cpp-lite \
57 simpleperf_static_libraries_with_libc_target := \
58 $(simpleperf_static_libraries_target) \
61 simpleperf_static_libraries_host := \
74 libprotobuf-cpp-lite \
76 simpleperf_static_libraries_host_linux := \
78 libbacktrace_offline \
84 simpleperf_ldlibs_host_linux := -lrt
87 # =========================================================
88 libsimpleperf_src_files := \
93 cmd_report_sample.cpp \
102 record_file_reader.cpp \
103 report_sample.proto \
108 libsimpleperf_src_files_linux := \
115 event_selection_set.cpp \
116 InplaceSamplerClient.cpp \
119 record_file_writer.cpp \
123 libsimpleperf_src_files_darwin := \
124 nonlinux_support/nonlinux_support.cpp \
126 libsimpleperf_src_files_windows := \
127 nonlinux_support/nonlinux_support.cpp \
129 # libsimpleperf target
130 include $(CLEAR_VARS)
132 LOCAL_MODULE := libsimpleperf
133 LOCAL_MODULE_TAGS := debug
134 LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
135 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
137 $(libsimpleperf_src_files) \
138 $(libsimpleperf_src_files_linux) \
140 LOCAL_STATIC_LIBRARIES := $(simpleperf_static_libraries_target)
141 LOCAL_MULTILIB := both
142 LOCAL_PROTOC_OPTIMIZE_TYPE := lite-static
143 include $(LLVM_DEVICE_BUILD_MK)
144 include $(BUILD_STATIC_LIBRARY)
147 include $(CLEAR_VARS)
148 #LOCAL_CLANG := true # Comment it to build on windows.
149 LOCAL_MODULE := libsimpleperf
150 LOCAL_MODULE_HOST_OS := darwin linux windows
151 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
152 LOCAL_CPPFLAGS_darwin := $(simpleperf_cppflags_host_darwin)
153 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
154 LOCAL_CPPFLAGS_windows := $(simpleperf_cppflags_host_windows)
155 LOCAL_SRC_FILES := $(libsimpleperf_src_files)
156 LOCAL_SRC_FILES_darwin := $(libsimpleperf_src_files_darwin)
157 LOCAL_SRC_FILES_linux := $(libsimpleperf_src_files_linux)
158 LOCAL_SRC_FILES_windows := $(libsimpleperf_src_files_windows)
159 LOCAL_STATIC_LIBRARIES := $(simpleperf_static_libraries_host)
160 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
161 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
162 LOCAL_MULTILIB := both
163 LOCAL_PROTOC_OPTIMIZE_TYPE := lite-static
164 LOCAL_CXX_STL := libc++_static
165 include $(LLVM_HOST_BUILD_MK)
166 include $(BUILD_HOST_STATIC_LIBRARY)
170 # =========================================================
173 include $(CLEAR_VARS)
175 LOCAL_MODULE := simpleperf
176 LOCAL_MODULE_TAGS := debug
177 LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
178 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
179 LOCAL_SRC_FILES := main.cpp
180 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_with_libc_target)
181 ifdef TARGET_2ND_ARCH
182 LOCAL_MULTILIB := both
183 LOCAL_MODULE_STEM_32 := simpleperf32
184 LOCAL_MODULE_STEM_64 := simpleperf
186 LOCAL_FORCE_STATIC_EXECUTABLE := true
187 include $(LLVM_DEVICE_BUILD_MK)
188 include $(BUILD_EXECUTABLE)
190 $(call dist-for-goals,sdk,$(ALL_MODULES.simpleperf.BUILT))
191 ifdef TARGET_2ND_ARCH
192 $(call dist-for-goals,sdk,$(ALL_MODULES.simpleperf$(TARGET_2ND_ARCH_MODULE_SUFFIX).BUILT))
196 include $(CLEAR_VARS)
197 LOCAL_MODULE := simpleperf_host
198 LOCAL_MODULE_HOST_OS := darwin linux windows
199 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
200 LOCAL_CPPFLAGS_darwin := $(simpleperf_cppflags_host_darwin)
201 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
202 LOCAL_CPPFLAGS_windows := $(simpleperf_cppflags_host_windows)
203 LOCAL_SRC_FILES := main.cpp
204 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
205 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
206 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
207 LOCAL_MULTILIB := both
208 LOCAL_MODULE_STEM_32 := simpleperf32
209 LOCAL_MODULE_STEM_64 := simpleperf
210 LOCAL_CXX_STL := libc++_static
211 include $(LLVM_HOST_BUILD_MK)
212 include $(BUILD_HOST_EXECUTABLE)
214 $(call dist-for-goals,sdk,$(ALL_MODULES.simpleperf_host.BUILT):simpleperf_host)
216 $(call dist-for-goals,sdk,$(ALL_MODULES.simpleperf_host$(HOST_2ND_ARCH_MODULE_SUFFIX).BUILT):simpleperf_host32)
218 $(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_simpleperf_host.BUILT))
219 ifdef HOST_CROSS_2ND_ARCH
220 $(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_simpleperf_host$(HOST_CROSS_2ND_ARCH_MODULE_SUFFIX).BUILT))
223 # libsimpleperf_record.a and libsimpleperf_record.so
224 # They are linked to user's program, to get profile
225 # counters and samples for specified code ranges.
226 # =========================================================
228 # libsimpleperf_record.a on target
229 include $(CLEAR_VARS)
231 LOCAL_MODULE := libsimpleperf_record
232 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
233 LOCAL_SRC_FILES := record_lib_interface.cpp
234 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_target)
235 LOCAL_MULTILIB := both
236 LOCAL_CXX_STL := libc++_static
237 LOCAL_LDLIBS := -Wl,--exclude-libs,ALL
238 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
239 include $(LLVM_DEVICE_BUILD_MK)
240 include $(BUILD_STATIC_LIBRARY)
242 # libsimpleperf_record.so on target
243 include $(CLEAR_VARS)
245 LOCAL_MODULE := libsimpleperf_record
246 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
247 LOCAL_SRC_FILES := record_lib_interface.cpp
248 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_target)
249 LOCAL_MULTILIB := both
250 LOCAL_CXX_STL := libc++_static
251 LOCAL_LDLIBS := -Wl,--exclude-libs,ALL
252 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
253 include $(LLVM_DEVICE_BUILD_MK)
254 include $(BUILD_SHARED_LIBRARY)
256 # libsimpleperf_record.a on host
257 include $(CLEAR_VARS)
259 LOCAL_MODULE := libsimpleperf_record
260 LOCAL_MODULE_HOST_OS := linux
261 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
262 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
263 LOCAL_SRC_FILES := record_lib_interface.cpp
264 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
265 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
266 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux) -Wl,--exclude-libs,ALL
267 LOCAL_MULTILIB := both
268 LOCAL_CXX_STL := libc++_static
269 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
270 include $(LLVM_HOST_BUILD_MK)
271 include $(BUILD_HOST_STATIC_LIBRARY)
273 # libsimpleperf_record.so on host
274 include $(CLEAR_VARS)
276 LOCAL_MODULE := libsimpleperf_record
277 LOCAL_MODULE_HOST_OS := linux
278 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
279 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
280 LOCAL_SRC_FILES := record_lib_interface.cpp
281 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
282 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
283 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux) -Wl,--exclude-libs,ALL
284 LOCAL_MULTILIB := both
285 LOCAL_CXX_STL := libc++_static
286 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
287 include $(LLVM_HOST_BUILD_MK)
288 include $(BUILD_HOST_SHARED_LIBRARY)
291 # libsimpleperf_report.so
292 # It is the shared library used on host by python scripts
293 # to report samples in different ways.
294 # =========================================================
295 include $(CLEAR_VARS)
296 LOCAL_MODULE := libsimpleperf_report
297 LOCAL_MODULE_HOST_OS := darwin linux windows
298 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
299 LOCAL_CPPFLAGS_darwin := $(simpleperf_cppflags_host_darwin)
300 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
301 LOCAL_CPPFLAGS_windows := $(simpleperf_cppflags_host_windows)
302 LOCAL_SRC_FILES := report_lib_interface.cpp
303 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
304 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
305 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux) -Wl,--exclude-libs,ALL
306 LOCAL_MULTILIB := both
307 LOCAL_CXX_STL := libc++_static
308 include $(LLVM_HOST_BUILD_MK)
309 include $(BUILD_HOST_SHARED_LIBRARY)
311 $(call dist-for-goals,sdk,$(ALL_MODULES.libsimpleperf_report.BUILT))
313 $(call dist-for-goals,sdk,$(ALL_MODULES.libsimpleperf_report$(HOST_2ND_ARCH_MODULE_SUFFIX).BUILT):libsimpleperf_report32.so)
315 $(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_libsimpleperf_report.BUILT):libsimpleperf_report32.dll)
316 ifdef HOST_CROSS_2ND_ARCH
317 $(call dist-for-goals,win_sdk,$(ALL_MODULES.host_cross_libsimpleperf_report$(HOST_CROSS_2ND_ARCH_MODULE_SUFFIX).BUILT))
321 # libsimpleperf_inplace_sampler.so
322 # It is the shared library linked with user's app and get samples from
323 # signal handlers in each thread.
324 # =========================================================
326 # libsimpleperf_inplace_sampler.so on target
327 include $(CLEAR_VARS)
329 LOCAL_MODULE := libsimpleperf_inplace_sampler
330 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
331 LOCAL_SRC_FILES := inplace_sampler_lib.cpp
332 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_target)
333 LOCAL_MULTILIB := both
334 LOCAL_CXX_STL := libc++_static
335 LOCAL_LDLIBS := -Wl,--exclude-libs,ALL
336 include $(LLVM_DEVICE_BUILD_MK)
337 include $(BUILD_SHARED_LIBRARY)
339 # libsimpleperf_inplace_sampler.so on host
340 include $(CLEAR_VARS)
342 LOCAL_MODULE := libsimpleperf_inplace_sampler
343 LOCAL_MODULE_HOST_OS := linux
344 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
345 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
346 LOCAL_SRC_FILES := inplace_sampler_lib.cpp
347 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
348 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
349 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux) -Wl,--exclude-libs,ALL
350 LOCAL_MULTILIB := both
351 LOCAL_CXX_STL := libc++_static
352 include $(LLVM_HOST_BUILD_MK)
353 include $(BUILD_HOST_SHARED_LIBRARY)
356 # simpleperf_unit_test
357 # =========================================================
358 simpleperf_unit_test_src_files := \
360 cmd_report_test.cpp \
361 cmd_report_sample_test.cpp \
367 sample_tree_test.cpp \
370 simpleperf_unit_test_src_files_linux := \
371 cmd_dumprecord_test.cpp \
373 cmd_record_test.cpp \
375 environment_test.cpp \
376 IOEventLoop_test.cpp \
377 record_file_test.cpp \
378 UnixSocket_test.cpp \
381 # simpleperf_unit_test target
382 include $(CLEAR_VARS)
384 LOCAL_MODULE := simpleperf_unit_test
385 LOCAL_COMPATIBILITY_SUITE := device-tests
386 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
388 $(simpleperf_unit_test_src_files) \
389 $(simpleperf_unit_test_src_files_linux) \
391 LOCAL_STATIC_LIBRARIES += libsimpleperf $(simpleperf_static_libraries_with_libc_target)
392 LOCAL_TEST_DATA := $(call find-test-data-in-subdirs,$(LOCAL_PATH),"*",testdata)
393 LOCAL_MULTILIB := both
394 LOCAL_FORCE_STATIC_EXECUTABLE := true
395 include $(LLVM_DEVICE_BUILD_MK)
396 include $(BUILD_NATIVE_TEST)
398 # simpleperf_unit_test host
399 include $(CLEAR_VARS)
400 LOCAL_MODULE := simpleperf_unit_test
401 LOCAL_MODULE_HOST_OS := darwin linux windows
402 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
403 LOCAL_CPPFLAGS_darwin := $(simpleperf_cppflags_host_darwin)
404 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
405 LOCAL_CPPFLAGS_windows := $(simpleperf_cppflags_host_windows)
406 LOCAL_SRC_FILES := $(simpleperf_unit_test_src_files)
407 LOCAL_SRC_FILES_linux := $(simpleperf_unit_test_src_files_linux)
408 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
409 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
410 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
411 LOCAL_MULTILIB := both
412 include $(LLVM_HOST_BUILD_MK)
413 include $(BUILD_HOST_NATIVE_TEST)
416 # simpleperf_cpu_hotplug_test
417 # =========================================================
418 simpleperf_cpu_hotplug_test_src_files := \
419 cpu_hotplug_test.cpp \
421 # simpleperf_cpu_hotplug_test target
422 include $(CLEAR_VARS)
424 LOCAL_MODULE := simpleperf_cpu_hotplug_test
425 LOCAL_COMPATIBILITY_SUITE := device-tests
426 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
427 LOCAL_SRC_FILES := $(simpleperf_cpu_hotplug_test_src_files)
428 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_with_libc_target)
429 LOCAL_MULTILIB := both
430 LOCAL_FORCE_STATIC_EXECUTABLE := true
431 include $(LLVM_DEVICE_BUILD_MK)
432 include $(BUILD_NATIVE_TEST)
434 # simpleperf_cpu_hotplug_test linux host
435 include $(CLEAR_VARS)
437 LOCAL_MODULE := simpleperf_cpu_hotplug_test
438 LOCAL_MODULE_HOST_OS := linux
439 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
440 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
441 LOCAL_SRC_FILES := $(simpleperf_cpu_hotplug_test_src_files)
442 LOCAL_STATIC_LIBRARIES := libsimpleperf $(simpleperf_static_libraries_host)
443 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
444 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
445 LOCAL_MULTILIB := first
446 include $(LLVM_HOST_BUILD_MK)
447 include $(BUILD_HOST_NATIVE_TEST)
450 # libsimpleperf_cts_test
451 # =========================================================
452 libsimpleperf_cts_test_src_files := \
453 $(libsimpleperf_src_files) \
454 $(libsimpleperf_src_files_linux) \
455 $(simpleperf_unit_test_src_files) \
456 $(simpleperf_unit_test_src_files_linux) \
458 # libsimpleperf_cts_test target
459 include $(CLEAR_VARS)
461 LOCAL_MODULE := libsimpleperf_cts_test
462 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target) -DRUN_IN_APP_CONTEXT
463 LOCAL_SRC_FILES := $(libsimpleperf_cts_test_src_files)
464 LOCAL_STATIC_LIBRARIES := $(simpleperf_static_libraries_target)
465 LOCAL_MULTILIB := both
466 LOCAL_FORCE_STATIC_EXECUTABLE := true
467 include $(LLVM_DEVICE_BUILD_MK)
468 include $(BUILD_STATIC_TEST_LIBRARY)
470 # libsimpleperf_cts_test linux host
471 include $(CLEAR_VARS)
473 LOCAL_MODULE := libsimpleperf_cts_test
474 LOCAL_MODULE_HOST_OS := linux
475 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
476 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
477 LOCAL_SRC_FILES := $(libsimpleperf_cts_test_src_files)
478 LOCAL_STATIC_LIBRARIES := $(simpleperf_static_libraries_host)
479 LOCAL_STATIC_LIBRARIES_linux := $(simpleperf_static_libraries_host_linux)
480 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
481 LOCAL_MULTILIB := both
482 include $(LLVM_HOST_BUILD_MK)
483 include $(BUILD_HOST_STATIC_TEST_LIBRARY)
485 # simpleperf_record_test
486 # ============================================================
488 # simpleperf_record_test target
489 include $(CLEAR_VARS)
491 LOCAL_MODULE := simpleperf_record_test
492 LOCAL_CPPFLAGS := $(simpleperf_cppflags_target)
493 LOCAL_SRC_FILES := record_lib_test.cpp
494 LOCAL_SHARED_LIBRARIES := libsimpleperf_record
495 LOCAL_MULTILIB := both
496 include $(BUILD_NATIVE_TEST)
498 # simpleperf_record_test linux host
499 include $(CLEAR_VARS)
501 LOCAL_MODULE := simpleperf_record_test
502 LOCAL_MODULE_HOST_OS := linux
503 LOCAL_CPPFLAGS := $(simpleperf_cppflags_host)
504 LOCAL_CPPFLAGS_linux := $(simpleperf_cppflags_host_linux)
505 LOCAL_SRC_FILES := record_lib_test.cpp
506 LOCAL_SHARED_LIBRARIES := libsimpleperf_record
507 LOCAL_LDLIBS_linux := $(simpleperf_ldlibs_host_linux)
508 LOCAL_MULTILIB := both
509 include $(BUILD_HOST_NATIVE_TEST)
511 include $(call first-makefiles-under,$(LOCAL_PATH))