diff --git a/core/envsetup.mk b/core/envsetup.mk index 456b0db454..dcffab0999 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -11,9 +11,65 @@ # This can be useful if you set OUT_DIR to be a different directory # than other outputs of your build system. +# Returns all words in $1 up to and including $2 +define find_and_earlier + $(strip $(if $(1), + $(firstword $(1)) + $(if $(filter $(firstword $(1)),$(2)),, + $(call find_and_earlier,$(wordlist 2,$(words $(1)),$(1)),$(2))))) +endef + +#$(warning $(call find_and_earlier,A B C,A)) +#$(warning $(call find_and_earlier,A B C,B)) +#$(warning $(call find_and_earlier,A B C,C)) +#$(warning $(call find_and_earlier,A B C,D)) + +define version-list +$(1)PR1 $(1)PD1 $(1)PD2 $(1)PM1 $(1)PM2 +endef + +ALL_VERSIONS := O P Q R S T U V W X Y Z +ALL_VERSIONS := $(foreach v,$(ALL_VERSIONS),$(call version-list,$(v))) + +# Filters ALL_VERSIONS down to the range [$1, $2], and errors if $1 > $2 or $3 is +# not in [$1, $2] +# $(1): min platform version +# $(2): max platform version +# $(3): default platform version +define allowed-platform-versions +$(strip \ + $(if $(filter $(ALL_VERSIONS),$(1)),, + $(error Invalid MIN_PLATFORM_VERSION '$(1)')) + $(if $(filter $(ALL_VERSIONS),$(2)),, + $(error Invalid MAX_PLATFORM_VERSION '$(2)')) + $(if $(filter $(ALL_VERSIONS),$(3)),, + $(error Invalid DEFAULT_PLATFORM_VERSION '$(3)')) + + $(eval allowed_versions_ := $(call find_and_earlier,$(ALL_VERSIONS),$(2))) + + $(if $(filter $(allowed_versions_),$(1)),, + $(error MIN_PLATFORM_VERSION '$(1)' must be before MAX_PLATFORM_VERSION '$(2)')) + + $(eval allowed_versions_ := $(1) \ + $(filter-out $(call find_and_earlier,$(allowed_versions_),$(1)),$(allowed_versions_))) + + $(if $(filter $(allowed_versions_),$(3)),, + $(error DEFAULT_PLATFORM_VERSION '$(3)' must be between MIN_PLATFORM_VERSION '$(1)' and MAX_PLATFORM_VERSION '$(2)')) + + $(allowed_versions_)) +endef + +#$(warning $(call allowed-platform-versions,OPR1,PPR1,OPR1)) +#$(warning $(call allowed-platform-versions,OPM1,PPR1,OPR1)) + # Set up version information. include $(BUILD_SYSTEM)/version_defaults.mk +ENABLED_VERSIONS := $(call find_and_earlier,$(ALL_VERSIONS),$(TARGET_PLATFORM_VERSION)) + +$(foreach v,$(ENABLED_VERSIONS), \ + $(eval IS_AT_LEAST_$(v) := true)) + # --------------------------------------------------------------- # If you update the build system such that the environment setup # or buildspec.mk need to be updated, increment this number, and diff --git a/core/version_defaults.mk b/core/version_defaults.mk index 563f86a67d..b7c93f0224 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -38,52 +38,27 @@ ifdef INTERNAL_BUILD_ID_MAKEFILE include $(INTERNAL_BUILD_ID_MAKEFILE) endif -# Returns all words in $1 up to and including $2 -define find_and_earlier - $(strip $(if $(1), - $(firstword $(1)) - $(if $(filter $(firstword $(1)),$(2)),, - $(call find_and_earlier,$(wordlist 2,$(words $(1)),$(1)),$(2))))) -endef - -#$(warning $(call find_and_earlier,A B C,A)) -#$(warning $(call find_and_earlier,A B C,B)) -#$(warning $(call find_and_earlier,A B C,C)) -#$(warning $(call find_and_earlier,A B C,D)) - -define version-list -$(1)PR1 $(1)PD1 $(1)PD2 $(1)PM1 $(1)PM2 -endef - -ALL_VERSIONS := O P -ALL_VERSIONS := $(foreach v,$(ALL_VERSIONS),$(call version-list,$(v))) - DEFAULT_PLATFORM_VERSION := OPR1 +MIN_PLATFORM_VERSION := OPR1 +MAX_PLATFORM_VERSION := PPR1 -# HACK: forward P to PPR1 until the build server config is updated -ifeq (P,$(TARGET_PLATFORM_VERSION)) - TARGET_PLATFORM_VERSION := PPR1 -endif +ALLOWED_VERSIONS := $(call allowed-platform-versions,\ + $(MIN_PLATFORM_VERSION),\ + $(MAX_PLATFORM_VERSION),\ + $(DEFAULT_PLATFORM_VERSION)) -ifeq (,$(TARGET_PLATFORM_VERSION)) - # Default targeted platform version - # TODO: PLATFORM_VERSION, PLATFORM_SDK_VERSION, etc. should be conditional - # on this +ifndef TARGET_PLATFORM_VERSION TARGET_PLATFORM_VERSION := $(DEFAULT_PLATFORM_VERSION) endif -ifeq (,$(filter $(ALL_VERSIONS), $(TARGET_PLATFORM_VERSION))) -$(warning Invalid TARGET_PLATFORM_VERSION '$(TARGET_PLATFORM_VERSION)', must be one of) -$(warning $(ALL_VERSIONS)) -$(error Stopping...) +ifeq (,$(filter $(ALLOWED_VERSIONS), $(TARGET_PLATFORM_VERSION))) + $(warning Invalid TARGET_PLATFORM_VERSION '$(TARGET_PLATFORM_VERSION)', must be one of) + $(error $(ALLOWED_VERSIONS)) endif -ENABLED_VERSIONS := $(call find_and_earlier,$(ALL_VERSIONS),$(TARGET_PLATFORM_VERSION)) - -$(foreach v,$(ENABLED_VERSIONS), \ - $(eval IS_AT_LEAST_$(v) := true)) - # Default versions for each TARGET_PLATFORM_VERSION +# TODO: PLATFORM_VERSION, PLATFORM_SDK_VERSION, etc. should be conditional +# on this # This is the canonical definition of the platform version, # which is the version that we reveal to the end user.