| # vars for use by utils | |
| __empty := | |
| __space := $(__empty) $(__empty) | |
| __colon := $(__empty):$(__empty) | |
| __underscore := $(__empty)_$(__empty) | |
| # $(call match-word,w1,w2) | |
| # checks if w1 == w2 | |
| # How it works | |
| # if (w1-w2 not __empty or w2-w1 not __empty) then not_match else match | |
| # | |
| # returns true or __empty | |
| #$(warning :$(1): :$(2): :$(subst $(1),,$(2)):) \ | |
| #$(warning :$(2): :$(1): :$(subst $(2),,$(1)):) \ | |
| # | |
| define match-word | |
| $(strip \ | |
| $(if $(or $(subst $(1),$(__empty),$(2)),$(subst $(2),$(__empty),$(1))),,true) \ | |
| ) | |
| endef | |
| # $(call find-word-in-list,w,wlist) | |
| # finds an exact match of word w in word list wlist | |
| # | |
| # How it works | |
| # fill wlist spaces with __colon | |
| # wrap w with __colon | |
| # search word w in list wl, if found match m, return stripped word w | |
| # | |
| # returns stripped word or __empty | |
| define find-word-in-list | |
| $(strip \ | |
| $(eval wl:= $(__colon)$(subst $(__space),$(__colon),$(strip $(2)))$(__colon)) \ | |
| $(eval w:= $(__colon)$(strip $(1))$(__colon)) \ | |
| $(eval m:= $(findstring $(w),$(wl))) \ | |
| $(if $(m),$(1),) \ | |
| ) | |
| endef | |
| # $(call match-word-in-list,w,wlist) | |
| # does an exact match of word w in word list wlist | |
| # How it works | |
| # if the input word is not __empty | |
| # return output of an exact match of word w in wordlist wlist | |
| # else | |
| # return __empty | |
| # returns true or __empty | |
| define match-word-in-list | |
| $(strip \ | |
| $(if $(strip $(1)), \ | |
| $(call match-word,$(call find-word-in-list,$(1),$(2)),$(strip $(1))), \ | |
| ) \ | |
| ) | |
| endef | |
| # $(call match-prefix,p,delim,w/wlist) | |
| # matches prefix p in wlist using delimiter delim | |
| # | |
| # How it works | |
| # trim the words in wlist w | |
| # if find-word-in-list returns not __empty | |
| # return true | |
| # else | |
| # return __empty | |
| # | |
| define match-prefix | |
| $(strip \ | |
| $(eval w := $(strip $(1)$(strip $(2)))) \ | |
| $(eval text := $(patsubst $(w)%,$(1),$(3))) \ | |
| $(if $(call match-word-in-list,$(1),$(text)),true,) \ | |
| ) | |
| endef | |
| # ---- | |
| # The following utilities are meant for board platform specific | |
| # featurisation | |
| # $(call get-vendor-board-platforms,v) | |
| # returns list of board platforms for vendor v | |
| define get-vendor-board-platforms | |
| $($(1)_BOARD_PLATFORMS) | |
| endef | |
| # $(call is-board-platform,bp) | |
| # returns true or __empty | |
| define is-board-platform | |
| $(call match-word,$(1),$(TARGET_BOARD_PLATFORM)) | |
| endef | |
| # $(call is-not-board-platform,bp) | |
| # returns true or __empty | |
| define is-not-board-platform | |
| $(if $(call match-word,$(1),$(TARGET_BOARD_PLATFORM)),,true) | |
| endef | |
| # $(call is-board-platform-in-list,bpl) | |
| # returns true or __empty | |
| define is-board-platform-in-list | |
| $(call match-word-in-list,$(TARGET_BOARD_PLATFORM),$(1)) | |
| endef | |
| # $(call is-vendor-board-platform,vendor) | |
| # returns true or __empty | |
| define is-vendor-board-platform | |
| $(strip \ | |
| $(call match-word-in-list,$(TARGET_BOARD_PLATFORM),\ | |
| $(call get-vendor-board-platforms,$(1)) \ | |
| ) \ | |
| ) | |
| endef | |
| # $(call is-chipset-in-board-platform,chipset) | |
| # does a prefix match of chipset in TARGET_BOARD_PLATFORM | |
| # uses underscore as a delimiter | |
| # | |
| # returns true or __empty | |
| define is-chipset-in-board-platform | |
| $(call match-prefix,$(1),$(__underscore),$(TARGET_BOARD_PLATFORM)) | |
| endef | |
| # $(call is-chipset-prefix-in-board-platform,prefix) | |
| # does a chipset prefix match in TARGET_BOARD_PLATFORM | |
| # assumes '_' and 'a' as the delimiter to the chipset prefix | |
| # | |
| # How it works | |
| # if ($(prefix)_ or $(prefix)a match in board platform) | |
| # return true | |
| # else | |
| # return __empty | |
| # | |
| define is-chipset-prefix-in-board-platform | |
| $(strip \ | |
| $(eval delim_a := $(__empty)a$(__empty)) \ | |
| $(if \ | |
| $(or \ | |
| $(call match-prefix,$(1),$(delim_a),$(TARGET_BOARD_PLATFORM)), \ | |
| $(call match-prefix,$(1),$(__underscore),$(TARGET_BOARD_PLATFORM)), \ | |
| ), \ | |
| true, \ | |
| ) \ | |
| ) | |
| endef | |
| #---- | |
| # The following utilities are meant for Android Code Name | |
| # specific featurisation | |
| # | |
| # refer http://source.android.com/source/build-numbers.html | |
| # for code names and associated sdk versions | |
| CUPCAKE_SDK_VERSIONS := 3 | |
| DONUT_SDK_VERSIONS := 4 | |
| ECLAIR_SDK_VERSIONS := 5 6 7 | |
| FROYO_SDK_VERSIONS := 8 | |
| GINGERBREAD_SDK_VERSIONS := 9 10 | |
| HONEYCOMB_SDK_VERSIONS := 11 12 13 | |
| ICECREAM_SANDWICH_SDK_VERSIONS := 14 15 | |
| JELLY_BEAN_SDK_VERSIONS := 16 17 18 | |
| # $(call is-platform-sdk-version-at-least,version) | |
| # version is a numeric SDK_VERSION defined above | |
| define is-platform-sdk-version-at-least | |
| $(strip \ | |
| $(if $(filter 1,$(shell echo "$$(( $(PLATFORM_SDK_VERSION) >= $(1) ))" )), \ | |
| true, \ | |
| ) \ | |
| ) | |
| endef | |
| # $(call is-android-codename,codename) | |
| # codename is one of cupcake,donut,eclair,froyo,gingerbread,icecream | |
| # please refer the $(codename)_SDK_VERSIONS declared above | |
| define is-android-codename | |
| $(strip \ | |
| $(if \ | |
| $(call match-word-in-list,$(PLATFORM_SDK_VERSION),$($(1)_SDK_VERSIONS)), \ | |
| true, \ | |
| ) \ | |
| ) | |
| endef | |
| # $(call is-android-codename-in-list,cnlist) | |
| # cnlist is combination/list of android codenames | |
| define is-android-codename-in-list | |
| $(strip \ | |
| $(eval acn := $(__empty)) \ | |
| $(foreach \ | |
| i,$(1),\ | |
| $(eval acn += \ | |
| $(if \ | |
| $(call \ | |
| match-word-in-list,\ | |
| $(PLATFORM_SDK_VERSION),\ | |
| $($(i)_SDK_VERSIONS)\ | |
| ),\ | |
| true,\ | |
| )\ | |
| )\ | |
| ) \ | |
| $(if $(strip $(acn)),true,) \ | |
| ) | |
| endef |