platform_build/target/product/vndk/Android.mk
Jiyong Park 3b6c916194 Freeze VNDK lib list on release platforms
The list of VNDK libraries that exist in the source tree is compared
against the latest known list. If they are different, build breaks.

The latest list can be updated by running update-vndk-list.sh but it
is allowed only for development branches (i.e. PLATFORM_VERSION_CODENAME
!= REL).

Bug: 67002788
Test: build 2017 pixel devices
Test: m check-vndk-list
Test: update-vndk-list.sh
Change-Id: I4bae2b647c045b11ac7d587fab48067bf53a7cf4
2017-10-22 18:05:44 +09:00

106 lines
3.8 KiB
Makefile

ifneq ($(BOARD_VNDK_VERSION),)
LOCAL_PATH:= $(call my-dir)
#####################################################################
# Setting the VNDK version. Version is 10000.0 for not-yet-published
# platform and xx.y for released platform.
vndk_major_ver := 10000
vndk_minor_ver := 0
#TODO(b/68027291): Revive this check when we have stable VNDK in P or later.
#ifneq ($(vndk_major_ver), $(PLATFORM_SDK_VERSION))
#$(error vndk_major_version does not match PLATFORM_SDK_VERSION, please update.)
#endif
ifneq (REL,$(PLATFORM_VERSION_CODENAME))
vndk_major_ver := 10000
vndk_minor_ver := 0
endif
PLATFORM_VNDK_VERSION := $(vndk_major_ver).$(vndk_minor_ver)
vndk_major_ver :=
vndk_minor_ver :=
#####################################################################
# Create the list of vndk libraries from the source code.
INTERNAL_VNDK_LIB_LIST := $(call intermediates-dir-for,PACKAGING,vndk)/libs.txt
$(INTERNAL_VNDK_LIB_LIST):
@echo "Generate: $@"
@mkdir -p $(dir $@)
$(hide) echo -n > $@
$(hide) $(foreach lib, $(LLNDK_LIBRARIES), \
echo LLNDK: $(lib).so >> $@;)
$(hide) $(foreach lib, $(VNDK_SAMEPROCESS_LIBRARIES), \
echo VNDK-SP: $(lib).so >> $@;)
$(hide) $(foreach lib, $(VNDK_CORE_LIBRARIES), \
echo VNDK-core: $(lib).so >> $@;)
$(hide) $(foreach lib, $(VNDK_PRIVATE_LIBRARIES), \
echo VNDK-private: $(lib).so >> $@;)
#####################################################################
# This is the up-to-date list of vndk libs.
# TODO(b/62012285): the lib list should be stored somewhere under
# /prebuilts/vndk
LATEST_VNDK_LIB_LIST := $(LOCAL_PATH)/$(PLATFORM_VNDK_VERSION).txt
#####################################################################
# Check the generate list against the latest list stored in the
# source tree
.PHONY: check-vndk-list
ifeq (REL,$(PLATFORM_VERSION_CODENAME))
# The check is enforced in release branches
droidcore: check-vndk-list
endif
check-vndk-list-timestamp := $(call intermediates-dir-for,PACKAGING,vndk)/check-list-timestamp
check-vndk-list: $(check-vndk-list-timestamp)
_vndk_check_failure_message := "VNDK library list has changed."
ifeq (REL,$(PLATFORM_VERSION_CODENAME)
_vndk_check_failure_message += "This isn't allowed in API locked branches."
else
_vndk_check_failure_message += "Run update-vndk-list.sh to update the list."
endif
$(check-vndk-list-timestamp): $(INTERNAL_VNDK_LIB_LIST) $(LATEST_VNDK_LIB_LIST) $(HOST_OUT_EXECUTABLES)/update-vndk-list.sh
$(hide) ( diff --old-line-format="Removed %L" \
--new-line-format="Added %L" \
--unchanged-line-format="" \
$(LATEST_VNDK_LIB_LIST) $(INTERNAL_VNDK_LIB_LIST) \
|| ( echo $(_vndk_check_failure_message); exit 1 ))
$(hide) mkdir -p $(dir $@)
$(hide) touch $@
#####################################################################
# Script to update the latest VNDK lib list
include $(CLEAR_VARS)
LOCAL_MODULE := update-vndk-list.sh
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_STEM := $(LOCAL_MODULE)
LOCAL_IS_HOST_MODULE := true
include $(BUILD_SYSTEM)/base_rules.mk
$(LOCAL_BUILT_MODULE): PRIVATE_INTERNAL_VNDK_LIB_LIST := $(INTERNAL_VNDK_LIB_LIST)
$(LOCAL_BUILT_MODULE): PRIVATE_LATEST_VNDK_LIB_LIST := $(LATEST_VNDK_LIB_LIST)
$(LOCAL_BUILT_MODULE):
@echo "Generate: $@"
@mkdir -p $(dir $@)
@rm -f $@
$(hide) echo "#!/bin/bash" > $@
ifeq (REL,$(PLATFORM_VERSION_CODENAME))
$(hide) echo "echo Updating VNDK library list is NOT allowed in API locked branches." >> $@; \
echo "exit 1" >> $@
else
$(hide) echo "cp $(PRIVATE_INTERNAL_VNDK_LIB_LIST) $(PRIVATE_LATEST_VNDK_LIB_LIST)" >> $@; \
echo "echo $(PRIVATE_LATEST_VNDK_LIB_LIST) updated." >> $@
endif
@chmod a+x $@
include $(CLEAR_VARS)
LOCAL_MODULE := vndk_package
LOCAL_REQUIRED_MODULES := \
$(addsuffix .vendor,$(VNDK_CORE_LIBRARIES)) \
$(addsuffix .vendor,$(VNDK_SAMEPROCESS_LIBRARIES)) \
$(LLNDK_LIBRARIES)
include $(BUILD_PHONY_PACKAGE)
endif # BOARD_VNDK_VERSION is set