# 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)

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

ifdef cur_platform

#
# host libdw
#

include $(CLEAR_VARS)

LIBDW_SRC_FILES := \
        dwarf_abbrevhaschildren.c \
        dwarf_abbrev_hash.c \
        dwarf_addrdie.c \
        dwarf_arrayorder.c \
        dwarf_attr.c \
        dwarf_attr_integrate.c \
        dwarf_begin.c \
        dwarf_begin_elf.c \
        dwarf_bitoffset.c \
        dwarf_bitsize.c \
        dwarf_bytesize.c \
        dwarf_child.c \
        dwarf_cuoffset.c \
        dwarf_decl_column.c \
        dwarf_decl_file.c \
        dwarf_decl_line.c \
        dwarf_diecu.c \
        dwarf_diename.c \
        dwarf_dieoffset.c \
        dwarf_end.c \
        dwarf_entry_breakpoints.c \
        dwarf_entrypc.c \
        dwarf_error.c \
        dwarf_filesrc.c \
        dwarf_formaddr.c \
        dwarf_formblock.c \
        dwarf_formflag.c \
        dwarf_formref.c \
        dwarf_formref_die.c \
        dwarf_formsdata.c \
        dwarf_formstring.c \
        dwarf_formudata.c \
        dwarf_func_inline.c \
        dwarf_getabbrevattr.c \
        dwarf_getabbrev.c \
        dwarf_getabbrevcode.c \
        dwarf_getabbrevtag.c \
        dwarf_getarange_addr.c \
        dwarf_getarangeinfo.c \
        dwarf_getaranges.c \
        dwarf_getattrcnt.c \
        dwarf_getattrs.c \
        dwarf_getelf.c \
        dwarf_getfuncs.c \
        dwarf_getlocation.c \
        dwarf_getmacros.c \
        dwarf_getpubnames.c \
        dwarf_getscopes.c \
        dwarf_getscopes_die.c \
        dwarf_getscopevar.c \
        dwarf_getsrc_die.c \
        dwarf_getsrcdirs.c \
        dwarf_getsrc_file.c \
        dwarf_getsrcfiles.c \
        dwarf_getsrclines.c \
        dwarf_getstring.c \
        dwarf_hasattr.c \
        dwarf_hasattr_integrate.c \
        dwarf_haschildren.c \
        dwarf_hasform.c \
        dwarf_haspc.c \
        dwarf_highpc.c \
        dwarf_lineaddr.c \
        dwarf_linebeginstatement.c \
        dwarf_lineblock.c \
        dwarf_linecol.c \
        dwarf_lineendsequence.c \
        dwarf_lineepiloguebegin.c \
        dwarf_lineno.c \
        dwarf_lineprologueend.c \
        dwarf_linesrc.c \
        dwarf_lowpc.c \
        dwarf_macro_opcode.c \
        dwarf_macro_param1.c \
        dwarf_macro_param2.c \
        dwarf_nextcu.c \
        dwarf_offabbrev.c \
        dwarf_offdie.c \
        dwarf_onearange.c \
        dwarf_onesrcline.c \
        dwarf_ranges.c \
        dwarf_siblingof.c \
        dwarf_srclang.c \
        dwarf_tag.c \
        dwarf_whatattr.c \
        dwarf_whatform.c \
        libdw_alloc.c \
        libdw_findcu.c \
        libdw_form.c \
        libdw_visit_scopes.c \
        memory-access.c

LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)

LOCAL_C_INCLUDES := \
	$(LOCAL_PATH)/.. \
	$(LOCAL_PATH)/../lib \
	$(LOCAL_PATH)/../libdw \
	$(LOCAL_PATH)/../libelf

ifeq ($(HOST_OS),darwin)
	LOCAL_CFLAGS += -fnested-functions
	LOCAL_SRC_FILES += \
		../host-darwin-fixup/getline.c
endif

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

LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -D_GNU_SOURCE -DIS_LIBDW

# to fix machine-dependent issues
LOCAL_CFLAGS += -include $(LOCAL_PATH)/../host-$(HOST_OS)-fixup/AndroidFixup.h

LOCAL_MODULE:= libdw

include $(BUILD_HOST_STATIC_LIBRARY)

#
# target libdw
#

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(LIBDW_SRC_FILES)

# missing utility functions in bionic
LOCAL_SRC_FILES += \
	../bionic-fixup/getline.c \

LOCAL_C_INCLUDES := \
	$(LOCAL_PATH)/.. \
	$(LOCAL_PATH)/../lib \
	$(LOCAL_PATH)/../libdw \
	$(LOCAL_PATH)/../libelf

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../bionic-fixup

LOCAL_CFLAGS += -include $(LOCAL_PATH)/../bionic-fixup/AndroidFixup.h

LOCAL_CFLAGS += -DHAVE_CONFIG_H -std=gnu99 -DIS_LIBDW -Werror

# to suppress the "pointer of type ‘void *’ used in arithmetic" warning
LOCAL_CFLAGS += -Wno-pointer-arith

LOCAL_MODULE_TAGS := eng

LOCAL_MODULE:= libdw

include $(BUILD_STATIC_LIBRARY)

endif #cur_platform
