diff --git a/core/base_rules.mk b/core/base_rules.mk index 313c30280..971c1ac8f 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -86,7 +86,7 @@ $(call pretty-error,Only one of LOCAL_PROPRIETARY_MODULE[$(LOCAL_PROPRIETARY_MOD endif include $(BUILD_SYSTEM)/local_vndk.mk -include $(BUILD_SYSTEM)/local_vsdk.mk +include $(BUILD_SYSTEM)/local_systemsdk.mk my_module_tags := $(LOCAL_MODULE_TAGS) ifeq ($(my_host_cross),true) diff --git a/core/envsetup.mk b/core/envsetup.mk index 05add605d..f339b2f07 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -304,6 +304,13 @@ ifdef PRODUCT_EXTRA_VNDK_VERSIONS $(foreach v,$(PRODUCT_EXTRA_VNDK_VERSIONS),$(call check_vndk_version,$(v))) endif +# Ensure that BOARD_SYSTEMSDK_VERSIONS are all within PLATFORM_SYSTEMSDK_VERSIONS +_unsupported_systemsdk_versions := $(filter-out $(PLATFORM_SYSTEMSDK_VERSIONS),$(BOARD_SYSTEMSDK_VERSIONS)) +ifneq (,$(_unsupported_systemsdk_versions)) + $(error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\ + Supported versions are $(PLATFORM_SYSTEMSDK_VERSIONS)) +endif + # --------------------------------------------------------------- # Set up configuration for target machine. # The following must be set: diff --git a/core/local_systemsdk.mk b/core/local_systemsdk.mk new file mode 100644 index 000000000..6dab34654 --- /dev/null +++ b/core/local_systemsdk.mk @@ -0,0 +1,56 @@ +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +ifdef BOARD_SYSTEMSDK_VERSIONS + # Apps and jars in vendor or odm partition are forced to build against System SDK. + _is_vendor_app := + ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) + # Note: no need to check LOCAL_MODULE_PATH* since LOCAL_[VENDOR|ODM|OEM]_MODULE is already + # set correctly before this is included. + _is_vendor_app := true + endif + ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS))) + ifndef LOCAL_SDK_VERSION + ifeq ($(_is_vendor_app),true) + LOCAL_SDK_VERSION := system_current + endif + endif + endif +endif + +# Ensure that the selected System SDK version is one of the supported versions. +# The range of support versions becomes narrower when BOARD_SYSTEMSDK_VERSIONS +# is set, which is a subset of PLATFORM_SYSTEMSDK_VERSIONS. +ifneq (,$(call has-system-sdk-version,$(LOCAL_SDK_VERSION))) + ifneq ($(_is_vendor_app),true) + # apps bundled in system partition can use all system sdk versions provided by the platform + _supported_systemsdk_versions := $(PLATFORM_SYSTEMSDK_VERSIONS) + else ifdef BOARD_SYSTEMSDK_VERSIONS + # When BOARD_SYSTEMSDK_VERSIONS is set, vendors apps are restricted to use those versions + # which is equal to or smaller than PLATFORM_SYSTEMSDK_VERSIONS + _supported_systemsdk_versions := $(BOARD_SYSTEMSDK_VERSIONS) + else + # If not, vendor apks are treated equally to system apps + _supported_systemsdk_versions := $(PLATFORM_SYSTEMSDK_VERSIONS) + endif + _system_sdk_version := $(call get-numeric-sdk-version,$(LOCAL_SDK_VERSION)) + ifneq ($(_system_sdk_version),$(filter $(_system_sdk_version),$(_supported_systemsdk_versions))) + $(call pretty-error,Incompatible LOCAL_SDK_VERSION '$(LOCAL_SDK_VERSION)'. \ + System SDK version '$(_system_sdk_version)' is not supported. Supported versions are: $(_supported_systemsdk_versions)) + endif + _system_sdk_version := + _supported_systemsdk_versions := +endif diff --git a/core/local_vsdk.mk b/core/local_vsdk.mk deleted file mode 100644 index f798d4736..000000000 --- a/core/local_vsdk.mk +++ /dev/null @@ -1,19 +0,0 @@ - -ifdef BOARD_VSDK_VERSION -# Set LOCAL_SDK_VERSION to system_current, If LOCAL_SDK_VERSION is not defined and LOCAL_VENDOR_MODULE is true - _is_vendor_app := - ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_OEM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) - _is_vendor_app := true - else - ifneq (,$(filter $(TARGET_OUT_VENDOR)%,$(LOCAL_MODULE_PATH) $(LOCAL_MODULE_PATH_32) $(LOCAL_MODULE_PATH_64))) - _is_vendor_app := true - endif - endif - ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS))) - ifndef LOCAL_SDK_VERSION - ifeq ($(_is_vendor_app),true) - LOCAL_SDK_VERSION := system_current - endif - endif - endif -endif diff --git a/core/soong_config.mk b/core/soong_config.mk index c7eefc987..2fa7ad417 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -113,6 +113,8 @@ $(call add_json_bool, DevicePrefer32BitExecutables, $(filter true,$(TARGET_ $(call add_json_str, DeviceVndkVersion, $(BOARD_VNDK_VERSION)) $(call add_json_str, Platform_vndk_version, $(PLATFORM_VNDK_VERSION)) $(call add_json_list, ExtraVndkVersions, $(PRODUCT_EXTRA_VNDK_VERSIONS)) +$(call add_json_list, DeviceSystemSdkVersions, $(BOARD_SYSTEMSDK_VERSIONS)) +$(call add_json_list, Platform_systemsdk_versions, $(PLATFORM_SYSTEMSDK_VERSIONS)) $(call add_json_bool, Malloc_not_svelte, $(call invert_bool,$(filter true,$(MALLOC_SVELTE)))) $(call add_json_str, Override_rs_driver, $(OVERRIDE_RS_DRIVER)) diff --git a/core/version_defaults.mk b/core/version_defaults.mk index ffaff079a..fcdcc6b9e 100644 --- a/core/version_defaults.mk +++ b/core/version_defaults.mk @@ -27,6 +27,7 @@ # BUILD_DATETIME # PLATFORM_SECURITY_PATCH # PLATFORM_VNDK_VERSION +# PLATFORM_SYSTEMSDK_VERSIONS # # Look for an optional file containing overrides of the defaults, @@ -202,6 +203,32 @@ ifndef PLATFORM_VNDK_VERSION endif endif +ifndef PLATFORM_SYSTEMSDK_MIN_VERSION + # This is the oldest version of system SDK that the platform supports. Contrary + # to the public SDK where platform essentially supports all previous SDK versions, + # platform supports only a few number of recent system SDK versions as some of + # old system APIs are gradually deprecated, removed and then deleted. + # However, currently in P, we only support the single latest version since there + # is no old system SDK versions. Therefore, this is set to empty for now. This + # should later (in post P) be set to a number, like 28. + PLATFORM_SYSTEMSDK_MIN_VERSION := +endif + +# This is the list of system SDK versions that the current platform supports. +PLATFORM_SYSTEMSDK_VERSIONS := +ifneq (,$(PLATFORM_SYSTEMSDK_MIN_VERSION)) + $(if $(call math_is_number,$(PLATFORM_SYSTEMSDK_MIN_VERSION)),,\ + $(error PLATFORM_SYSTEMSDK_MIN_VERSION must be a number, but was $(PLATFORM_SYSTEMSDK_MIN_VERSION))) + PLATFORM_SYSTEMSDK_VERSIONS := $(call int_range_list,$(PLATFORM_SYSTEMSDK_MIN_VERSION),$(PLATFORM_SDK_VERSION)) +endif +# Platform always supports the current version +ifeq (REL,$(PLATFORM_VERSION_CODENAME)) + PLATFORM_SYSTEMSDK_VERSIONS += $(PLATFORM_SDK_VERSION) +else + PLATFORM_SYSTEMSDK_VERSIONS += $(PLATFORM_VERSION_CODENAME) +endif +PLATFORM_SYSTEMSDK_VERSIONS := $(strip $(sort $(PLATFORM_SYSTEMSDK_VERSIONS))) + ifndef PLATFORM_SECURITY_PATCH # Used to indicate the security patch that has been applied to the device. # It must signify that the build includes all security patches issued up through the designated Android Public Security Bulletin.