# Copyright (C) 2012 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.

LOCAL_PATH := $(call my-dir)

ifeq ($(TARGET_PRODUCT),sdk)
supported_platforms := none
else
supported_platforms := linux-x86 darwin-x86
endif

cur_platform := $(filter $(HOST_OS)-$(HOST_ARCH),$(supported_platforms))

ifdef cur_platform

#
# host libperf
#

include $(CLEAR_VARS)

libperf_src_files := \
	util/added/rbtree.c \
	util/abspath.c \
	util/alias.c \
	util/annotate.c \
	util/bitmap.c \
	util/build-id.c \
	util/callchain.c \
	util/cgroup.c \
	util/color.c \
	util/config.c \
	util/cpumap.c \
	util/ctype.c \
	util/debug.c \
	util/debugfs.c \
	util/environment.c \
	util/event.c \
	util/evlist.c \
	util/evsel.c \
	util/exec_cmd.c \
	util/header.c \
	util/help.c \
	util/hist.c \
	util/hweight.c \
	util/levenshtein.c \
	util/map.c \
	util/pager.c \
	util/parse-events.c \
	util/parse-options.c \
	util/path.c \
	util/probe-event.c \
	util/probe-finder.c \
	util/pstack.c \
	util/quote.c \
	util/run-command.c \
	util/session.c \
	util/sigchain.c \
	util/sort.c \
	util/strbuf.c \
	util/strfilter.c \
	util/string.c \
	util/strlist.c \
	util/svghelper.c \
	util/symbol.c \
	util/thread.c \
	util/thread_map.c \
	util/top.c \
	util/trace-event-info.c \
	util/trace-event-parse.c \
	util/trace-event-read.c \
	util/trace-event-scripting.c \
	util/usage.c \
	util/util.c \
	util/values.c \
	util/wrapper.c \
	util/xyarray.c

LOCAL_SRC_FILES := $(libperf_src_files)

LOCAL_SRC_FILES += \
	arch/arm/util/dwarf-regs.c

LOCAL_CFLAGS := -DNO_NEWT_SUPPORT -DNO_LIBPERL -DNO_LIBPYTHON -DNO_STRLCPY -std=gnu99

# temporary until bfd.h is added
LOCAL_CFLAGS += -DNO_DEMANGLE
LOCAL_CFLAGS += -DDWARF_SUPPORT

# various macros
LOCAL_CFLAGS += -DETC_PERFCONFIG='"etc/perfconfig"' \
                -DPREFIX='""' \
		-DPERF_EXEC_PATH='"libexec/perf-core"'

# in list.h: entry->next = LIST_POISON1;
LOCAL_CFLAGS += -Wno-pointer-arith

# for __used
LOCAL_CFLAGS += -include $(LOCAL_PATH)/util/include/linux/compiler.h

LOCAL_CFLAGS += \
	-include $(LOCAL_PATH)/host-$(HOST_OS)-fixup/AndroidFixup.h

LOCAL_C_INCLUDES := external/elfutils external/elfutils/libelf external/elfutils/libdw external/elfutils/libdwfl

LOCAL_C_INCLUDES += $(LOCAL_PATH)/host-$(HOST_OS)-fixup

LOCAL_MODULE := libperf

include $(BUILD_HOST_STATIC_LIBRARY)

#
# target libperf
#

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(libperf_src_files)

LOCAL_CFLAGS := -DNO_NEWT_SUPPORT -DNO_LIBPERL -DNO_LIBPYTHON -std=gnu99

# temporary until bfd.h is added
LOCAL_CFLAGS += -DNO_DEMANGLE
LOCAL_CFLAGS += -DDWARF_SUPPORT

# various macros
LOCAL_CFLAGS += -DETC_PERFCONFIG='"etc/perfconfig"' \
                -DPREFIX='""' \
		-DPERF_EXEC_PATH='"libexec/perf-core"'

# in list.h: entry->next = LIST_POISON1;
LOCAL_CFLAGS += -Wno-pointer-arith

# for __used
LOCAL_CFLAGS += -include $(LOCAL_PATH)/util/include/linux/compiler.h

# for various GNU extensions
LOCAL_CFLAGS += -include external/elfutils/bionic-fixup/AndroidFixup.h

LOCAL_CFLAGS += -Wno-attributes -Werror

LOCAL_C_INCLUDES := external/elfutils external/elfutils/libelf external/elfutils/libdw external/elfutils/libdwfl

LOCAL_MODULE := libperf

include $(BUILD_STATIC_LIBRARY)

#
# host perf
#

include $(CLEAR_VARS)

LOCAL_MODULE := perfhost

perf_src_files := \
	builtin-annotate.c \
	builtin-buildid-cache.c \
	builtin-buildid-list.c \
	builtin-diff.c \
	builtin-evlist.c \
	builtin-help.c \
	builtin-inject.c \
	builtin-kmem.c \
	builtin-kvm.c \
	builtin-list.c \
	builtin-lock.c \
	builtin-probe.c \
	builtin-record.c \
	builtin-report.c \
	builtin-sched.c \
	builtin-script.c \
	builtin-stat.c \
	builtin-timechart.c \
	builtin-top.c \
	perf.c

LOCAL_SRC_FILES := $(perf_src_files)

LOCAL_STATIC_LIBRARIES := libperf libdwfl libdw libebl libelf

LOCAL_LDLIBS := -lpthread -ldl

# for clock_gettime
ifeq ($(HOST_OS),linux)
LOCAL_LDLIBS += -lrt
endif

# common
LOCAL_CFLAGS := -DNO_NEWT_SUPPORT -DNO_LIBPERL -DNO_LIBPYTHON -DNO_STRLCPY -std=gnu99

LOCAL_CFLAGS += \
	-include $(LOCAL_PATH)/host-$(HOST_OS)-fixup/AndroidFixup.h

# in list.h: entry->next = LIST_POISON1;
LOCAL_CFLAGS += -Wno-pointer-arith

# for __used
LOCAL_CFLAGS += -include $(LOCAL_PATH)/util/include/linux/compiler.h

# temporary until bfd.h is added
LOCAL_CFLAGS += -DNO_DEMANGLE

# unique
LOCAL_CFLAGS += -DPERF_HTML_PATH='""'
LOCAL_CFLAGS += -DPERF_MAN_PATH='""'
LOCAL_CFLAGS += -DPERF_INFO_PATH='""'
LOCAL_CFLAGS += -DPERF_VERSION='"perf.3.0.8_android"'

LOCAL_C_INCLUDES += $(LOCAL_PATH)/host-$(HOST_OS)-fixup

include $(BUILD_HOST_EXECUTABLE)

#
# target perf
#

include $(CLEAR_VARS)

LOCAL_MODULE := perf
LOCAL_MODULE_TAGS := eng

LOCAL_SRC_FILES := $(perf_src_files)

LOCAL_SRC_FILES += \
	builtin-test.c \
	bench/mem-memcpy.c \
	bench/sched-messaging.c \
	bench/sched-pipe.c \
	arch/arm/util/dwarf-regs.c

LOCAL_STATIC_LIBRARIES := libperf libdwfl libdw libebl libelf

LOCAL_SHARED_LIBRARIES := libdl

# common
LOCAL_CFLAGS := -DNO_NEWT_SUPPORT -DNO_LIBPERL -DNO_LIBPYTHON -std=gnu99

# in list.h: entry->next = LIST_POISON1;
LOCAL_CFLAGS += -Wno-pointer-arith

# for __used
LOCAL_CFLAGS += -include $(LOCAL_PATH)/util/include/linux/compiler.h

# for various GNU extensions
LOCAL_CFLAGS += -include external/elfutils/bionic-fixup/AndroidFixup.h

# temporary until bfd.h is added
LOCAL_CFLAGS += -DNO_DEMANGLE

# unique
LOCAL_CFLAGS += -DPERF_HTML_PATH='""'
LOCAL_CFLAGS += -DPERF_MAN_PATH='""'
LOCAL_CFLAGS += -DPERF_INFO_PATH='""'
LOCAL_CFLAGS += -DPERF_VERSION='"perf.3.0.8_android"'

LOCAL_CFLAGS += -Wno-attributes -Werror

include $(BUILD_EXECUTABLE)

endif #cur_platform
