summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Bestas <mikeioannina@cyanogenmod.org>2016-06-30 00:28:29 +0300
committerMichael Bestas <mikeioannina@cyanogenmod.org>2016-06-30 00:28:29 +0300
commit43d2a9a903ca94b79a1919c6c5491810dca71e07 (patch)
tree1776a3177906752fa38742eb5615d910e3f24955
parent35f6e78b4a7b9058844b5937fd9e23eb7461c9e1 (diff)
downloadandroid_hardware_lineage_lineagehw-43d2a9a903ca94b79a1919c6c5491810dca71e07.tar.gz
android_hardware_lineage_lineagehw-43d2a9a903ca94b79a1919c6c5491810dca71e07.tar.bz2
android_hardware_lineage_lineagehw-43d2a9a903ca94b79a1919c6c5491810dca71e07.zip
cmhw: Allow overrides of device-specific cmhw implementations
* There are some cases where devices want to override common cmhw implementations, for example devices which inherit hardware/cyanogen but have different vibrator hardware * Allow override of classes instead of breaking the build by including duplicate implementations and always pick the last class in BOARD_HARDWARE_CLASS Change-Id: I8587076b87cee0dfc41746b5bc3f974274f71c21
-rw-r--r--Android.mk27
1 files changed, 17 insertions, 10 deletions
diff --git a/Android.mk b/Android.mk
index 061d652..cfb0a55 100644
--- a/Android.mk
+++ b/Android.mk
@@ -17,22 +17,29 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ifneq ($(BOARD_HARDWARE_CLASS),)
- $(foreach bcp,$(BOARD_HARDWARE_CLASS), \
- $(eval LOCAL_SRC_FILES += $(call all-java-files-under, ../../../$(bcp))))
+ $(foreach bcp, $(BOARD_HARDWARE_CLASS), \
+ $(eval BOARD_SRC_FILES += $(call all-java-files-under, ../../../$(bcp))))
endif
BASE_SRC_FILES += $(call all-java-files-under, src/)
-unique_specific_classes :=
- $(foreach cf,$(LOCAL_SRC_FILES), \
- $(eval unique_specific_classes += $(notdir $(cf))))
-
+reverse = $(if $(wordlist 2,2,$(1)),$(call reverse,$(wordlist 2,$(words $(1)),$(1))) $(firstword $(1)),$(1))
+
+overriden_classes :=
+ $(foreach cf, $(call reverse, $(BOARD_SRC_FILES)), \
+ $(eval overriden_classes += $(cf)))
+
+unique_specific_classes :=
+ $(foreach cf, $(overriden_classes), \
+ $(if $(filter $(notdir $(unique_specific_classes)), $(notdir $(cf))),, \
+ $(eval unique_specific_classes += $(cf))))
+
default_classes :=
-$(foreach cf,$(BASE_SRC_FILES), \
- $(if $(filter $(unique_specific_classes),$(notdir $(cf))),,\
- $(eval default_classes += $(cf))))
+ $(foreach cf, $(BASE_SRC_FILES), \
+ $(if $(filter $(notdir $(unique_specific_classes)), $(notdir $(cf))),, \
+ $(eval default_classes += $(cf))))
-LOCAL_SRC_FILES += $(default_classes)
+LOCAL_SRC_FILES += $(default_classes) $(unique_specific_classes)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := org.cyanogenmod.hardware