blob: fd425e6fb3df716bad312eafe6700821ee647a07 [file] [log] [blame]
# $(info within android.mk)
############################################################################
#
# General rules to make and clean
#
############################################################################
############################################################################
# macro to define printf. This macro needs to be able to handle
# backslash-escaped characters such as \t(tab), \n(newline),etc.
# "echo -e" handles this but certain shells such as dash (on ubuntu)
# don't handle the -e option in their builtin echo implementation.
# However, the printf builtin of these sh shells should work.
PRINTF:=printf
############################################################################
esc_dollar := \$$
############################################################################
# Original method using multiple echo statements separated by ';', but this
# seemed much less efficient then putting it into one statement.
# See second version below.
#define output_list
#$(foreach elem,$(call truncate,$1),$(PRINTF) "\t$(elem) \\" >> $2;) $(PRINTF) "\t$(lastword $1)\\n" >> $2
#endef
define output_list
$(PRINTF) "$(foreach elem,$(call truncate,$1),\\t$(elem) \\\\\n) \\t$(lastword $1)\\n" >> $2
endef
define output_lib_list
$(PRINTF) "$(foreach elem,$(call truncate,$1),\\tlib$(elem) \\\\\n) \\tlib$(lastword $1)\\n" >> $2
endef
define format_shared_lib_names
$(subst -l,lib,$1)
endef
define convert_component_lib_makefile_name
$(patsubst %,%/Android.mk,$(patsubst $(SRC_ROOT)/%,\$$(PV_TOP)/%,$1))
endef
define output_include_list
$(PRINTF) "$(subst $(SPACE)include,include,$(foreach elem,$(call truncate,$(strip $1)),include $(call convert_component_lib_makefile_name,$(elem))\\n))include $(call convert_component_lib_makefile_name,$(lastword $(strip $1)))\\n" >> $2
endef
define include_staticlibs_list
$(if $(strip $(call remove_quotes,$1)),$(PRINTF) "$(foreach elem,$(strip $(call remove_quotes,$1)),include $(patsubst %,%/Android.mk,$(patsubst %,\$$(PV_TOP)%,$(call strip_two_levels_up,$(elem)/local.mk)))\n)" >> $2,)
endef
define output_assembly_srcs
$(if $(strip $1),$(PRINTF) "ifeq (\$$(TARGET_ARCH),arm)\\nLOCAL_SRC_FILES += \\\\\n$(foreach elem,$(call truncate,$1),\\t$(elem) \\\\\n)\\t$(lastword $1)\\nendif\\n\\n" >> $2,)
endef
define extra_lib_list
$(if $(strip $1),$(PRINTF) "\nLOCAL_WHOLE_STATIC_LIBRARIES += $1\n" >> $2,)
endef
define extra_include_list
$(if $(strip $1),$(PRINTF) "$(foreach elem, $1,include $(patsubst %,%/Android.mk,$(patsubst %,\$$(PV_TOP)%,$(strip $(elem))))\n)" >> $2,)
endef
define is_prelinking_allowed
$(if $(strip $1),,$(PRINTF) "\nLOCAL_PRELINK_MODULE := false\n" >> $2)
endef
############################################################################
include $(MK)/android_segments.mk
#############################################
# Rules for aggregate makefiles
#
ifneq ($(AGGREGATE_LIBS_MAKEFILE),)
#### Start generation of aggregate makefiles #######
define create_aggregate_lib_android_mk
Android_$1.mk: FORCE
$$(quiet) echo "LOCAL_PATH := $$(esc_dollar)(call my-dir)" > $$@
$$(quiet) echo "include $$(esc_dollar)(CLEAR_VARS)" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "LOCAL_WHOLE_STATIC_LIBRARIES := \\" >> $$@
$$(quiet) $$(call output_lib_list,$$($1_CUMULATIVE_TARGET_LIST),$$@)
$$(quiet) $$(call extra_lib_list, $$(EXTRA_LIBS_$1),$$@)
$$(quiet) echo "" >> $$@
$$(quiet) echo "LOCAL_MODULE := lib$1" >> $$@
$$(quiet) $$(call is_prelinking_allowed,$$($1_PRELINK),$$@)
$$(quiet) echo "" >> $$@
$$(quiet) echo "-include $$(esc_dollar)(PV_TOP)/Android_platform_extras.mk" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "-include $$(esc_dollar)(PV_TOP)/Android_system_extras.mk" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "LOCAL_SHARED_LIBRARIES += $$(call format_shared_lib_names,$$(MODS_$1))" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "include $$(esc_dollar)(BUILD_SHARED_LIBRARY)" >> $$@
$$(quiet) $$(call output_include_list,$$($1_CUMULATIVE_MAKEFILES),$$@)
$$(quiet) $$(call extra_include_list, $$(EXTRA_MAKEFILES_PATHS_$1),$$@)
$$(quiet) echo "" >> $$@
endef
#### End generation of aggregate makefiles #######
#### Start generation of top level makefile #######
define include_module_mk_list
$(PRINTF) "$(subst $(SPACE)include,include,$(foreach elem,$1,include \$$(PV_TOP)/build_config/opencore_dynamic/Android_$(elem).mk\n))" >> $2
endef
define include_test_mk_list
$(PRINTF) "$(subst $(SPACE)include,include,$(foreach app,$(strip $(call remove_quotes,$(TESTAPPS))),include \$$(PV_TOP)$(strip $(call strip_two_levels_up,$(call remove_quotes,$(TESTAPP_DIR_$(app))/local.mk)))/Android.mk\n))" >> $1
endef
define create_toplevel_android_mk
$1: FORCE
$$(quiet) echo "ifneq ($$(esc_dollar)(BUILD_WITHOUT_PV),true)" > $$@
$$(quiet) echo "LOCAL_PATH := $$(esc_dollar)(call my-dir)" >> $$@
$$(quiet) echo "PV_TOP := $$(esc_dollar)(LOCAL_PATH)" >> $$@
$$(quiet) echo "include $$(esc_dollar)(CLEAR_VARS)" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "PV_CFLAGS := -fvisibility=hidden -Wno-non-virtual-dtor -DENABLE_SHAREDFD_PLAYBACK -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_CML2_CONFIG" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "ifeq ($$(esc_dollar)(ENABLE_PV_LOGGING),1)" >> $$@
$$(quiet) echo " PV_CFLAGS += -DPVLOGGER_INST_LEVEL=5" >> $$@
$$(quiet) echo "endif" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "ifeq ($$(esc_dollar)(TARGET_ARCH),arm)" >> $$@
$$(quiet) echo " PV_CFLAGS += -DPV_ARM_GCC_V5" >> $$@
$$(quiet) echo "endif" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "include $$(esc_dollar)(CLEAR_VARS)" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "FORMAT := android" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "PV_COPY_HEADERS_TO := libpv" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "PV_INCLUDES := \\" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/android \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/extern_libs_v2/khronos/openmax/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/common/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/player/config/android \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/player/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/nodes/pvmediaoutputnode/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/nodes/pvdownloadmanagernode/config/opencore \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/pvmi/pvmf/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/fileformats/mp4/parser/config/opencore \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/oscl/oscl/config/android \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/oscl/oscl/config/shared \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/author/include \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/android/drm/oma1/src \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/build_config/opencore_dynamic \\\\\n" >> $$@
$$(quiet) $(PRINTF) "\t$$(esc_dollar)(TARGET_OUT_HEADERS)/$$(esc_dollar)(PV_COPY_HEADERS_TO)" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) echo "$$(esc_dollar)(call add-prebuilt-files, ETC, pvplayer.cfg)" >> $$@
$$(quiet) echo "" >> $$@
$$(quiet) $$(call include_module_mk_list,$2,$$@)
$$(quiet) $$(call include_staticlibs_list,$$(LIBDIR_static),$$@)
$$(quiet) $$(call include_test_mk_list,$$@)
$$(quiet) echo "endif" >> $$@
endef
#### End generation of top level makefile #######
# loop over all the names in SHARED_LIB_TARGET_LIST and
# create the Android makefile name list.
# Append top-level Android.mk
ANDROID_TOPLEVEL_MAKE_NAME := Android.mk
ANDROID_MAKE_NAMES := $(patsubst %,Android_%.mk,$(SHARED_LIB_TARGET_LIST)) $(ANDROID_TOPLEVEL_MAKE_NAME)
$(strip $(foreach lib,$(SHARED_LIB_TARGET_LIST),$(eval $(call create_aggregate_lib_android_mk,$(lib)))))
$(eval $(call create_toplevel_android_mk,$(ANDROID_TOPLEVEL_MAKE_NAME),$(SHARED_LIB_TARGET_LIST)))
android_clean: modulelevel_android_mk_clean toplevel_android_mk_clean
modulelevel_android_mk_clean: ANDROID_MAKE_FILES_TO_CLEAN := $(ANDROID_MAKE_NAMES)
toplevel_android_mk_clean: ANDROID_MAKE_FILES_TO_CLEAN += $(ANDROID_TOPLEVEL_MAKE_NAME)
modulelevel_android_mk_clean: FORCE
$(quiet) $(RM) $(ANDROID_MAKE_FILES_TO_CLEAN)
toplevel_android_mk_clean: FORCE
$(quiet) $(RM) $(ANDROID_TOPLEVEL_MAKE_NAME)
#############################################
# Rules for a single library makefile
#
else
ifeq ($(LOCAL_ANDROID_MK_PATH),)
LOCAL_ANDROID_MK_PATH := $(patsubst /%,%,$(call strip_two_levels_up,$(subst $(SRC_ROOT),$$(SRC_ROOT),$(strip $(LOCAL_PATH)))/local.mk))
endif
CUMULATIVE_ANDROID_MK_PATH := $(CUMULATIVE_ANDROID_MK_PATH) $(LOCAL_ANDROID_MK_PATH)
define include_system_extras
$(if $(strip $(filter $1,BUILD_EXECUTABLE)),$(PRINTF) "\n-include \$$(PV_TOP)/Android_system_extras.mk\n" >> $2,)
endef
#$(eval ANDROID_MAKE_NAMES := $(LOCAL_ANDROID_MK_PATH)/Android.mk)
ANDROID_MAKE_NAMES := $(LOCAL_PATH)/../../Android.mk
ANDROID_TMP_LOCAL_INC := $(subst $(SRC_ROOT),\$$(PV_TOP),$(LOCAL_TOTAL_INCDIRS)) \$$(PV_INCLUDES)
ANDROID_PATH_COMPONENTS := $(subst /, ,$(LOCAL_PATH))
AND_LOCAL_ARM_MODE := $(if $(strip $(filter codecs_v2,$(ANDROID_PATH_COMPONENTS))),LOCAL_ARM_MODE := arm,)
$(ANDROID_MAKE_NAMES): ANDROID_CPP_SRCS := $(if $(strip $(SRCS)),$(patsubst %,$(call go_up_two_levels,$(SRCDIR))/%,$(filter %.cpp,$(SRCS))),)
$(ANDROID_MAKE_NAMES): ANDROID_ASM_SRCS := $(if $(strip $(SRCS)),$(patsubst %,$(call go_up_two_levels,$(SRCDIR))/%,$(filter-out %.cpp,$(SRCS))),)
$(ANDROID_MAKE_NAMES): ANDROID_TARGET := $(if $(strip $(filter prog,$(TARGET_TYPE))),"LOCAL_MODULE :=" $(TARGET),$(if $(strip $(TARGET)),"LOCAL_MODULE :=" lib$(TARGET),))
$(ANDROID_MAKE_NAMES): ANDROID_HDRS := $(patsubst %,$(call go_up_two_levels,$(INCSRCDIR))/%,$(HDRS))
$(ANDROID_MAKE_NAMES): ANDROID_C_FLAGS := $(filter-out %PV_ARM_GCC_V5,$(XCPPFLAGS))
$(ANDROID_MAKE_NAMES): ANDROID_C_INC := $(ANDROID_TMP_LOCAL_INC)
$(ANDROID_MAKE_NAMES): ANDROID_ARM_MODE := $(AND_LOCAL_ARM_MODE)
$(ANDROID_MAKE_NAMES): ANDROID_MAKE_TYPE := $(if $(strip $(filter prog,$(TARGET_TYPE))),BUILD_EXECUTABLE,$(if $(strip $(SRCS)),BUILD_STATIC_LIBRARY,BUILD_COPY_HEADERS))
$(ANDROID_MAKE_NAMES): ANDROID_STATIC_LIBS := $(foreach library,$(LIBS),$(if $(findstring $(strip $(BUILD_ROOT)/installed_lib/$(BUILD_ARCH)/lib$(library)$(TARGET_NAME_SUFFIX).a), $(ALL_LIBS)),lib$(library),))
$(ANDROID_MAKE_NAMES): ANDROID_SHARED_LIBS := $(foreach library,$(LIBS),$(if $(findstring $(strip $(BUILD_ROOT)/installed_lib/$(BUILD_ARCH)/lib$(library)$(TARGET_NAME_SUFFIX).so), $(SHARED_LIB_FULLNAMES)),lib$(library),))
$(ANDROID_MAKE_NAMES): FORCE
$(quiet) echo "LOCAL_PATH := \$$(call my-dir)" > $@
$(quiet) echo "include \$$(CLEAR_VARS)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_SRC_FILES := \\" >> $@
$(quiet) $(call output_list,$(ANDROID_CPP_SRCS),$@)
$(quiet) echo "" >> $@
$(quiet) $(call output_assembly_srcs,$(ANDROID_ASM_SRCS),$@)
$(quiet) echo "" >> $@
$(quiet) echo "$(ANDROID_TARGET)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_CFLAGS := $(ANDROID_C_FLAGS) \$$(PV_CFLAGS)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "$(ANDROID_ARM_MODE)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_STATIC_LIBRARIES := $(ANDROID_STATIC_LIBS)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_SHARED_LIBRARIES := $(ANDROID_SHARED_LIBS)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_C_INCLUDES := \\" >> $@
$(quiet) $(call output_list,$(ANDROID_C_INC),$@)
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_COPY_HEADERS_TO := \$$(PV_COPY_HEADERS_TO)" >> $@
$(quiet) echo "" >> $@
$(quiet) echo "LOCAL_COPY_HEADERS := \\" >> $@
$(quiet) $(call output_list,$(ANDROID_HDRS),$@)
$(quiet) $(call include_system_extras,$(ANDROID_MAKE_TYPE),$@)
$(quiet) echo "" >> $@
$(quiet) echo "include \$$($(ANDROID_MAKE_TYPE))" >> $@
android_clean: $(LOCAL_PATH)_android_mk_clean
$(LOCAL_PATH)_android_mk_clean: ANDROID_MAKE_FILES_TO_CLEAN := $(ANDROID_MAKE_NAMES)
$(LOCAL_PATH)_android_mk_clean: FORCE
$(quiet) $(RM) $(ANDROID_MAKE_FILES_TO_CLEAN)
endif
android_make: $(ANDROID_MAKE_NAMES)
CMD_COMPLETION_TARGETS += android_make android_clean