131 lines
5.1 KiB
Makefile
131 lines
5.1 KiB
Makefile
#
|
|
# Copyright (C) 2017 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.
|
|
#
|
|
|
|
# Included from add-application.mk to configure the APP_PLATFORM setting.
|
|
|
|
ifeq (null,$(APP_PROJECT_PATH))
|
|
|
|
ifndef APP_PLATFORM
|
|
$(call __ndk_info,APP_PLATFORM not set. Defaulting to minimum supported \
|
|
version $(NDK_MIN_PLATFORM).)
|
|
APP_PLATFORM := $(NDK_MIN_PLATFORM)
|
|
endif
|
|
|
|
else
|
|
|
|
# Set APP_PLATFORM with the following precedence:
|
|
#
|
|
# 1. APP_PLATFORM setting from the user.
|
|
# 2. Value in project.properties.
|
|
# 3. Minimum supported platform level.
|
|
APP_PLATFORM := $(strip $(APP_PLATFORM))
|
|
ifndef APP_PLATFORM
|
|
_local_props := $(strip $(wildcard $(APP_PROJECT_PATH)/project.properties))
|
|
ifndef _local_props
|
|
# NOTE: project.properties was called default.properties before
|
|
_local_props := $(strip \
|
|
$(wildcard $(APP_PROJECT_PATH)/default.properties))
|
|
endif
|
|
|
|
ifdef _local_props
|
|
APP_PLATFORM := $(strip \
|
|
$(shell $(HOST_PYTHON) $(BUILD_PY)/extract_platform.py \
|
|
$(call host-path,$(_local_props))))
|
|
$(call __ndk_info,Found platform level in $(_local_props). Setting \
|
|
APP_PLATFORM to $(APP_PLATFORM).)
|
|
else
|
|
$(call __ndk_info,APP_PLATFORM not set. Defaulting to minimum \
|
|
supported version $(NDK_MIN_PLATFORM).)
|
|
APP_PLATFORM := $(NDK_MIN_PLATFORM)
|
|
endif
|
|
endif
|
|
|
|
endif # APP_PROJECT_PATH == null
|
|
|
|
ifeq ($(APP_PLATFORM),latest)
|
|
$(call __ndk_info,Using latest available APP_PLATFORM: $(NDK_MAX_PLATFORM).)
|
|
override APP_PLATFORM := $(NDK_MAX_PLATFORM)
|
|
endif
|
|
|
|
# Aliases defined by meta/platforms.json include codename aliases for platform
|
|
# API levels as well as cover any gaps in platforms that may not have had NDK
|
|
# APIs.
|
|
APP_PLATFORM_LEVEL := $(strip $(subst android-,,$(APP_PLATFORM)))
|
|
ifdef NDK_PLATFORM_ALIAS_$(APP_PLATFORM_LEVEL)
|
|
_alias_target := $(NDK_PLATFORM_ALIAS_$(APP_PLATFORM_LEVEL))
|
|
$(call __ndk_info,$(APP_PLATFORM) is an alias for $(_alias_target). \
|
|
Adjusting APP_PLATFORM to match.)
|
|
override APP_PLATFORM := $(_alias_target)
|
|
endif
|
|
|
|
# For APP_PLATFORM values set below the minimum supported version, we could
|
|
# either pull up or error out. Since it's very unlikely that someone actually
|
|
# *needs* a lower platform level to build their app, we'll emit a warning and
|
|
# pull up.
|
|
APP_PLATFORM_LEVEL := $(strip $(subst android-,,$(APP_PLATFORM)))
|
|
ifneq ($(call lt,$(APP_PLATFORM_LEVEL),$(NDK_MIN_PLATFORM_LEVEL)),)
|
|
$(call __ndk_info,$(APP_PLATFORM) is unsupported. Using minimum supported \
|
|
version $(NDK_MIN_PLATFORM).)
|
|
override APP_PLATFORM := $(NDK_MIN_PLATFORM)
|
|
endif
|
|
|
|
# There are two reasons (aside from user error) a user might have picked an API
|
|
# level that is higher than what we support:
|
|
#
|
|
# 1. To get a pseudo "latest" version that will raise with each new version.
|
|
# 2. Their using an old NDK that doesn't support the required API level.
|
|
#
|
|
# For 1, we now support `APP_PLATFORM := latest`, and users should just switch
|
|
# to that.
|
|
#
|
|
# For 2, clamping to the maximum API level for the older NDK when a newer API
|
|
# level is in fact needed to compile the project will just present the user with
|
|
# a lot of unclear errors. We'll save them time by failing early.
|
|
ifneq ($(call gt,$(APP_PLATFORM_LEVEL),$(NDK_MAX_PLATFORM_LEVEL)),)
|
|
$(call __ndk_info,$(APP_PLATFORM) is above the maximum supported version \
|
|
$(NDK_MAX_PLATFORM). Choose a supported API level or set APP_PLATFORM \
|
|
to "latest".)
|
|
$(call __ndk_error,Aborting.)
|
|
endif
|
|
|
|
ifneq (null,$(APP_PROJECT_PATH))
|
|
|
|
# Check platform level (after adjustment) against android:minSdkVersion in AndroidManifest.xml
|
|
#
|
|
APP_MANIFEST := $(strip $(wildcard $(APP_PROJECT_PATH)/AndroidManifest.xml))
|
|
APP_PLATFORM_LEVEL := $(strip $(subst android-,,$(APP_PLATFORM)))
|
|
ifdef APP_MANIFEST
|
|
_minsdkversion := $(strip \
|
|
$(shell $(HOST_PYTHON) $(BUILD_PY)/extract_manifest.py \
|
|
minSdkVersion $(call host-path,$(APP_MANIFEST))))
|
|
ifndef _minsdkversion
|
|
# minSdkVersion defaults to 1.
|
|
# https://developer.android.com/guide/topics/manifest/uses-sdk-element.html
|
|
_minsdkversion := 1
|
|
endif
|
|
|
|
ifneq (,$(call gt,$(APP_PLATFORM_LEVEL),$(_minsdkversion)))
|
|
$(call __ndk_info,WARNING: APP_PLATFORM $(APP_PLATFORM) is higher than \
|
|
android:minSdkVersion $(_minsdkversion) in $(APP_MANIFEST). NDK \
|
|
binaries will *not* be compatible with devices older than \
|
|
$(APP_PLATFORM). See \
|
|
https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md \
|
|
for more information.)
|
|
endif
|
|
endif
|
|
|
|
endif # APP_PROJECT_PATH == null
|