Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3068a859 authored by Dan Willemsen's avatar Dan Willemsen Committed by Gerrit Code Review
Browse files

Merge changes Ib6ffcc38,Ia58e6bc1

* changes:
  Check that NDK-built modules only link to NDK-built modules
  Add macros for printing pretty warnings/errors in rules
parents a6f510c7 b097fbed
Loading
Loading
Loading
Loading
+38 −1
Original line number Diff line number Diff line
@@ -1208,6 +1208,43 @@ else
	$(hide) touch $@
endif


####################################################
## Verify that NDK-built libraries only link against
## other NDK-built libraries
####################################################

my_link_type := $(intermediates)/link_type
ifdef LOCAL_SDK_VERSION
$(my_link_type): PRIVATE_LINK_TYPE := ndk
$(my_link_type): PRIVATE_ALLOWED_TYPES := ndk
else
$(my_link_type): PRIVATE_LINK_TYPE := platform
$(my_link_type): PRIVATE_ALLOWED_TYPES := (ndk|platform)
endif
my_link_type_deps := $(strip \
   $(foreach l,$(my_whole_static_libraries) $(my_static_libraries), \
     $(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(LOCAL_IS_HOST_MODULE),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/link_type))
ifneq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES)
my_link_type_deps += $(strip \
   $(foreach l,$(my_shared_libraries), \
     $(call intermediates-dir-for,SHARED_LIBRARIES,$(l),$(LOCAL_IS_HOST_MODULE),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/link_type))
endif
$(my_link_type): PRIVATE_DEPS := $(my_link_type_deps)
$(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE)
$(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE)
$(my_link_type): $(my_link_type_deps)
	@echo Check module type: $@
	$(hide) mkdir -p $(dir $@) && rm -f $@
ifdef my_link_type_deps
	$(hide) for f in $(PRIVATE_DEPS); do \
	  grep -qE '^$(PRIVATE_ALLOWED_TYPES)$$' $$f || \
	    $(call echo-warning,"$(PRIVATE_MAKEFILE): $(PRIVATE_MODULE) ($(PRIVATE_LINK_TYPE)) should not link to $$(basename $${f%_intermediates/link_type}) ($$(cat $$f))"); \
	done
endif
	$(hide) echo $(PRIVATE_LINK_TYPE) >$@


###########################################################
## Common object handling.
###########################################################
@@ -1560,4 +1597,4 @@ endif
.KATI_RESTAT: $(export_includes)

# Make sure export_includes gets generated when you are running mm/mmm
$(LOCAL_BUILT_MODULE) : | $(export_includes)
$(LOCAL_BUILT_MODULE) : | $(export_includes) $(my_link_type)
+14 −0
Original line number Diff line number Diff line
@@ -834,6 +834,20 @@ $(subst //,/,$(1)/$(2))
endef


###########################################################
## Color-coded warnings and errors in build rules
##
## $(1): message to print
###########################################################
define echo-warning
echo -e "\e[1;35mwarning:\e[0m \e[1m" $(1) "\e[0m\n"
endef

define echo-error
echo -e "\e[1;31merror:\e[0m \e[1m" $(1) "\e[0m\n"
endef


###########################################################
## Package filtering
###########################################################
+32 −0
Original line number Diff line number Diff line
@@ -98,3 +98,35 @@ $(LOCAL_INSTALLED_MODULE) : $(addprefix $(my_app_lib_path)/, $(notdir $(my_prebu
endif  # my_embed_jni
endif  # inner my_prebuilt_jni_libs
endif  # outer my_prebuilt_jni_libs

# Verify that all included libraries are built against the NDK
ifneq ($(strip $(LOCAL_JNI_SHARED_LIBRARIES)),)
my_link_type := $(call intermediates-dir-for,APPS,$(LOCAL_MODULE))/$(my_2nd_arch_prefix)jni_link_type
my_link_type_deps := $(strip \
  $(foreach l,$(LOCAL_JNI_SHARED_LIBRARIES),\
    $(call intermediates-dir-for,SHARED_LIBRARIES,$(l),,,$(my_2nd_arch_prefix))/link_type))
ifneq ($(LOCAL_SDK_VERSION),)
$(my_link_type): PRIVATE_LINK_TYPE := sdk
$(my_link_type): PRIVATE_ALLOWED_TYPES := ndk
else
$(my_link_type): PRIVATE_LINK_TYPE := platform
$(my_link_type): PRIVATE_ALLOWED_TYPES := (ndk|platform)
endif
$(my_link_type): PRIVATE_DEPS := $(my_link_type_deps)
$(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE)
$(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE)
$(my_link_type): $(my_link_type_deps)
	@echo Check JNI module types: $@
	$(hide) mkdir -p $(dir $@)
	$(hide) rm -f $@
	$(hide) for f in $(PRIVATE_DEPS); do \
	  grep -qE '^$(PRIVATE_ALLOWED_TYPES)$$' $$f || \
	    $(call echo-warning,"$(PRIVATE_MAKEFILE): $(PRIVATE_MODULE) ($(PRIVATE_LINK_TYPE)) should not link to $$(basename $${f%_intermediates/link_type}) ($$(cat $$f))"); \
	done
	$(hide) touch $@

$(LOCAL_BUILT_MODULE): | $(my_link_type)

my_link_type :=
my_link_type_deps :=
endif
+8 −1
Original line number Diff line number Diff line
@@ -122,7 +122,14 @@ else
	$(hide) touch $@
endif

$(LOCAL_BUILT_MODULE) : | $(intermediates)/export_includes
my_link_type := $(intermediates)/link_type
$(my_link_type): PRIVATE_LINK_TYPE := $(if $(LOCAL_SDK_VERSION),ndk,platform)
$(my_link_type):
	@echo Check module type: $@
	$(hide) mkdir -p $(dir $@) && rm -f $@
	$(hide) echo $(PRIVATE_LINK_TYPE) >$@

$(LOCAL_BUILT_MODULE) : | $(export_includes) $(my_link_type)
endif  # prebuilt_module_is_a_library

# The real dependency will be added after all Android.mks are loaded and the install paths