From 641b6cc6b01d0bf43cf7ec8d7088e42d84f12f40 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Mon, 15 Jan 2018 14:48:40 +0900 Subject: [PATCH] Add PLATFORM_SYSTEMSDK_VERSIONS and BOARD_SYSTEMSDK_VERSIONS PLATFORM_SYSTEMSDK_VERSIONS is the list of System SDK versions that the platform is supporting. Contrary to the public SDK where platform essentially supports all previous SDK versions, platform support only a few recent System SDK versions, since some of old System APIs are gradually deprecated, removed from the following SDKs and then finally deleted from the platform. This will be part of the framework manifest. The list can be specified by setting PLATFORM_SYSTEMSDK_MIN_VERSION. If it is set to an old version number, then System SDKs from the version to the current version (PLATFORM_SDK_VERSION) are considered to be supported by the platform. If PLATFORM_SYSTEMSDK_MIN_VERSION is not set, only the latest System SDK version is supported. Next, BOARD_SYSTEMSDK_VERSIONS is the list of System SDK versions that the device is using. This is put to the device compatibility matrix device is using. The device and the platform is considered as compatible only BOARD_SYSTEMSDK_VERSIONS in the device compatibility matrix are in the PLATFORM_SYSTEMSDK_VERSIONS in the framework manifest. When BOARD_SYSTEMSDK_VERSIONS is set, a Java app or library in vendor or odm partitions which didn't specify LOCAL_SDK_VERSION is forced to use System SDK. Also, the build system does the additional integrity check to ensure that LOCAL_SDK_VERSION is within BOARD_SYSTEMSDK_VERSIONS or PLATFORM_SYSTEMSDK_VERSIONS (if BOARD_SYSTEMSDK_VERSIONS isn't set). Bug: 69088799 Test: m -j Test: BOARD_SYSTEMSDK_VERSIONS=P m -j Change-Id: If4d59f6030e4cc402e015701d0caf94aeec37263 --- core/base_rules.mk | 2 +- core/envsetup.mk | 7 +++++ core/local_systemsdk.mk | 56 ++++++++++++++++++++++++++++++++++++++++ core/local_vsdk.mk | 19 -------------- core/soong_config.mk | 2 ++ core/version_defaults.mk | 27 +++++++++++++++++++ 6 files changed, 93 insertions(+), 20 deletions(-) create mode 100644 core/local_systemsdk.mk delete mode 100644 core/local_vsdk.mk diff --git a/core/base_rules.mk b/core/base_rules.mk index 313c302803..971c1ac8f2 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 05add605dc..f339b2f072 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 0000000000..6dab346545 --- /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 f798d47361..0000000000 --- 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 c7eefc987e..2fa7ad417c 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 f6bc76b1c8..d70dfb4b21 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.