android编译分析之8—envsetup.mk

来源:互联网 发布:java分销微商城源码 编辑:程序博客网 时间:2024/06/18 08:37

envsetup.mk主要是对编译环境的设置,其实就是设置一些全局的变量(以lunch aosp_arm-eng,编译器ubuntu 64bit为例)。


首先包含了版本相关的makefile,

# Set up version information.include $(BUILD_SYSTEM)/version_defaults.mk

下面这个变量还没研究具体用法,

# ---------------------------------------------------------------# If you update the build system such that the environment setup# or buildspec.mk need to be updated, increment this number, and# people who haven't re-run those will have to do so before they# can build.  Make sure to also update the corresponding value in# buildspec.mk.default and envsetup.sh.CORRECT_BUILD_ENV_SEQUENCE_NUMBER := 10

TARGET_PRODUCT如果没定义,默认为full,而TARGET_BUILD_VARIANT默认为eng,

# ---------------------------------------------------------------# The product defaults to generic on hardware# NOTE: This will be overridden in product_config.mk if make# was invoked with a PRODUCT-xxx-yyy goal.ifeq ($(TARGET_PRODUCT),)TARGET_PRODUCT := fullendif# the variant -- the set of files that are included for a buildifeq ($(strip $(TARGET_BUILD_VARIANT)),)TARGET_BUILD_VARIANT := engendif

编译AOSP肯定是交叉编译,下面是关于编译机的一些参数配置,

# ---------------------------------------------------------------# Set up configuration for host machine.  We don't do cross-# compiles except for arm/mips, so the HOST is whatever we are# running onUNAME := $(shell uname -sm)# HOST_OSifneq (,$(findstring Linux,$(UNAME)))  HOST_OS := linuxendififneq (,$(findstring Darwin,$(UNAME)))  HOST_OS := darwinendififneq (,$(findstring Macintosh,$(UNAME)))  HOST_OS := darwinendififneq (,$(findstring CYGWIN,$(UNAME)))  HOST_OS := windowsendif# BUILD_OS is the real host doing the build.BUILD_OS := $(HOST_OS)# Under Linux, if USE_MINGW is set, we change HOST_OS to Windows to build the# Windows SDK. Only a subset of tools and SDK will manage to build properly.ifeq ($(HOST_OS),linux)ifdef USE_MINGW  HOST_OS := windowsendifendififeq ($(HOST_OS),)$(error Unable to determine HOST_OS from uname -sm: $(UNAME)!)endif# HOST_ARCHifneq (,$(findstring x86_64,$(UNAME)))  HOST_ARCH := x86_64  HOST_2ND_ARCH := x86  HOST_IS_64_BIT := trueelseifneq (,$(findstring x86,$(UNAME)))$(error Building on a 32-bit x86 host is not supported: $(UNAME)!)endifendifBUILD_ARCH := $(HOST_ARCH)BUILD_2ND_ARCH := $(HOST_2ND_ARCH)ifeq ($(HOST_ARCH),)$(error Unable to determine HOST_ARCH from uname -sm: $(UNAME)!)endif# the host build defaults to release, and it must be release or debugifeq ($(HOST_BUILD_TYPE),)HOST_BUILD_TYPE := releaseendififneq ($(HOST_BUILD_TYPE),release)ifneq ($(HOST_BUILD_TYPE),debug)$(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE)')endifendif# We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir.HOST_PREBUILT_ARCH := x86# This is the standard way to name a directory containing prebuilt host# objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/ccifeq ($(HOST_OS),windows)  HOST_PREBUILT_TAG := windowselse  HOST_PREBUILT_TAG := $(HOST_OS)-$(HOST_PREBUILT_ARCH)endif
# TARGET_COPY_OUT_* are all relative to the staging directory, ie PRODUCT_OUT.# Define them here so they can be used in product config files.TARGET_COPY_OUT_SYSTEM := systemTARGET_COPY_OUT_DATA := dataTARGET_COPY_OUT_OEM := oemTARGET_COPY_OUT_ODM := odmTARGET_COPY_OUT_ROOT := rootTARGET_COPY_OUT_RECOVERY := recovery############################################ Define TARGET_COPY_OUT_VENDOR to a placeholder, for at this point# we don't know if the device wants to build a separate vendor.img# or just build vendor stuff into system.img.# A device can set up TARGET_COPY_OUT_VENDOR to "vendor" in its# BoardConfig.mk.# We'll substitute with the real value after loading BoardConfig.mk._vendor_path_placeholder := ||VENDOR-PATH-PH||TARGET_COPY_OUT_VENDOR := $(_vendor_path_placeholder)###########################################

product_config.mk前面已经分析,通过包含这个makefile,就能获取到TARGET_DEVICE 等变量的值。

# Read the product specs so we can get TARGET_DEVICE and other# variables that we need in order to locate the output files.include $(BUILD_SYSTEM)/product_config.mk

TARGET_BUILD_VARIANT必须是eng user userdebug其中的一个,

build_variant := $(filter-out eng user userdebug,$(TARGET_BUILD_VARIANT))ifneq ($(build_variant)-$(words $(TARGET_BUILD_VARIANT)),-1)$(warning bad TARGET_BUILD_VARIANT: $(TARGET_BUILD_VARIANT))$(error must be empty or one of: eng user userdebug)endif

如果make的目标为win_sdk或者sdk,即编译sdk,

# Build host as 32-bit for SDK build.ifneq ($(filter $(MAKECMDGOALS),win_sdk sdk),)HOST_PREFER_32_BIT := trueendififdef USE_MINGW# We only build sdk host tools in the MinGW windows build.# Build it as 32-bit as well.HOST_PREFER_32_BIT := trueendifSDK_HOST_ARCH := x86

下面牵扯出一个概念Boards ,下面的代码就是找到相关产品TARGET_DEVICE的BoardConfig.mk,然后再include进来,BoardConfig.mk中都是设备硬件相关的一些变量

# Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)# or under vendor/*/$(TARGET_DEVICE).  Search in both places, but# make sure only one exists.# Real boards should always be associated with an OEM vendor.board_config_mk := \    $(strip $(wildcard \        $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \        $(shell test -d device && find device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \        $(shell test -d vendor && find vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \    ))ifeq ($(board_config_mk),)  $(error No config file found for TARGET_DEVICE $(TARGET_DEVICE))endififneq ($(words $(board_config_mk)),1)  $(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk))endifinclude $(board_config_mk)

TARGET_ARCH必须定义,TARGET_DEVICE_DIR为BoardConfig.mk所在的目录,

ifeq ($(TARGET_ARCH),)  $(error TARGET_ARCH not defined by board config: $(board_config_mk))endifTARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))board_config_mk :=

TARGET_COPY_OUT_VENDOR默认设置为/system/vendor,貌似是将vendor相关的东东放在/system/vendor下,同时将PRODUCT_COPY_FILES中的||VENDOR-PATH-PH||替换为system/vendor,

############################################ Now we can substitute with the real value of TARGET_COPY_OUT_VENDORifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder))TARGET_COPY_OUT_VENDOR := system/vendorelse ifeq ($(filter vendor system/vendor,$(TARGET_COPY_OUT_VENDOR)),)$(error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor', seeing '$(TARGET_COPY_OUT_VENDOR)'.)endifPRODUCT_COPY_FILES := $(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),$(PRODUCT_COPY_FILES))###########################################

交叉编译目标机的变量,就是跑android的机器,TARGET_BUILD_TYPE 默认为release,一般也不修改,

# ---------------------------------------------------------------# Set up configuration for target machine.# The following must be set:#       TARGET_OS = { linux }#       TARGET_ARCH = { arm | x86 | mips }TARGET_OS := linux# TARGET_ARCH should be set by BoardConfig.mk and will be checked laterifneq ($(filter %64,$(TARGET_ARCH)),)TARGET_IS_64_BIT := trueendif# the target build type defaults to releaseifneq ($(TARGET_BUILD_TYPE),debug)TARGET_BUILD_TYPE := releaseendif

android将编译的所有结果都放在out目录下,这里是关于OUT_DIR的设置,

# ---------------------------------------------------------------# figure out the output directoriesifeq (,$(strip $(OUT_DIR)))ifeq (,$(strip $(OUT_DIR_COMMON_BASE)))OUT_DIR := $(TOPDIR)outelseOUT_DIR := $(OUT_DIR_COMMON_BASE)/$(notdir $(PWD))endifendifDEBUG_OUT_DIR := $(OUT_DIR)/debug

下面设置了一些编译目录Out下的子目录,需要时可以查看,

# Move the host or target under the debug/ directory# if necessary.# out/targetTARGET_OUT_ROOT_release := $(OUT_DIR)/target# out/debug/targetTARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target# out/targetTARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))# out/hostHOST_OUT_ROOT_release := $(OUT_DIR)/host# out/debug/hostHOST_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/host# HOST_BUILD_TYPE默认为release,out/hostHOST_OUT_ROOT := $(HOST_OUT_ROOT_$(HOST_BUILD_TYPE))# We want to avoid two host bin directories in multilib build.# out/host/linux-x86,其中HOST_OS为linux,而HOST_PREBUILT_ARCH为x86HOST_OUT_release := $(HOST_OUT_ROOT_release)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)# out/debug/host/linux-x86HOST_OUT_debug := $(HOST_OUT_ROOT_debug)/$(HOST_OS)-$(HOST_PREBUILT_ARCH)# out/host/linux-x86HOST_OUT := $(HOST_OUT_$(HOST_BUILD_TYPE))# BUILD_OS也为linux,out/host/linux-x86BUILD_OUT := $(OUT_DIR)/host/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)# out/target/productTARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product# out/target/commonTARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common# out/host/commonHOST_COMMON_OUT_ROOT := $(HOST_OUT_ROOT)/common# out/target/product/generic,这时TARGET_DEVICE为genericPRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)# out/target/common/docsOUT_DOCS := $(TARGET_COMMON_OUT_ROOT)/docs# out/host/linux-x86/binBUILD_OUT_EXECUTABLES := $(BUILD_OUT)/bin# out/host/linux-x86/bin lib64 framework sdk_addon objHOST_OUT_EXECUTABLES := $(HOST_OUT)/binHOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib64HOST_OUT_JAVA_LIBRARIES := $(HOST_OUT)/frameworkHOST_OUT_SDK_ADDON := $(HOST_OUT)/sdk_addonHOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj# out/host/linux-x86/obj/include lib NOTICE_FILESHOST_OUT_HEADERS := $(HOST_OUT_INTERMEDIATES)/includeHOST_OUT_INTERMEDIATE_LIBRARIES := $(HOST_OUT_INTERMEDIATES)/libHOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES# out/host/common/objHOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj# out/host/linux-x86/fake_packagesHOST_OUT_FAKE := $(HOST_OUT)/fake_packages# out/host/linux-x86/genHOST_OUT_GEN := $(HOST_OUT)/gen# out/host/common/genHOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen# Out for HOST_2ND_ARCHHOST_2ND_ARCH_VAR_PREFIX := 2ND_HOST_2ND_ARCH_MODULE_SUFFIX := _32#2ND_HOST_OUT_INTERMEDIATES := out/host/linux-x86/obj32$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES := $(HOST_OUT)/obj32#2ND_HOST_OUT_INTERMEDIATE_LIBRARIES := out/host/linux-x86/obj32/lib$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES := $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_INTERMEDIATES)/lib#2ND_HOST_OUT_SHARED_LIBRARIES := out/host/linux-x86/lib$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES := $(HOST_OUT)/lib# 2ND_HOST_OUT_EXECUTABLES := out/host/linux-x86/bin$(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_EXECUTABLES := $(HOST_OUT_EXECUTABLES)# The default host library path.# It always points to the path where we build libraries in the default bitness.# 这里HOST_PREFER_32_BIT为空,ifeq ($(HOST_PREFER_32_BIT),true)HOST_LIBRARY_PATH := $($(HOST_2ND_ARCH_VAR_PREFIX)HOST_OUT_SHARED_LIBRARIES)else# out/host/linux-x86/lib64HOST_LIBRARY_PATH := $(HOST_OUT_SHARED_LIBRARIES)endif# out/target/product/generic/objTARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj# out/target/product/generic/obj/includeTARGET_OUT_HEADERS := $(TARGET_OUT_INTERMEDIATES)/include# out/target/product/generic/obj/libTARGET_OUT_INTERMEDIATE_LIBRARIES := $(TARGET_OUT_INTERMEDIATES)/lib# out/target/common/objTARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj# out/target/product/generic/genTARGET_OUT_GEN := $(PRODUCT_OUT)/gen# out/target/common/genTARGET_OUT_COMMON_GEN := $(TARGET_COMMON_OUT_ROOT)/gen# out/target/product/generic/systemTARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM)# # out/target/product/generic/system/binTARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin# out/target/product/generic/system/xbinTARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin#/system/lib64放64位的lib,而/system/lib放32位的lib,这里编译的是32位ifeq ($(TARGET_IS_64_BIT),true)# /system/lib always contains 32-bit libraries,# and /system/lib64 (if present) always contains 64-bit libraries.TARGET_OUT_SHARED_LIBRARIES := $(TARGET_OUT)/lib64else# # out/target/product/generic/system/libTARGET_OUT_SHARED_LIBRARIES := $(TARGET_OUT)/libendif# out/target/product/generic/system/frameworkTARGET_OUT_JAVA_LIBRARIES := $(TARGET_OUT)/framework# out/target/product/generic/system/appTARGET_OUT_APPS := $(TARGET_OUT)/app# out/target/product/generic/system/priv-appTARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT)/priv-app# out/target/product/generic/system/usr/keylayoutTARGET_OUT_KEYLAYOUT := $(TARGET_OUT)/usr/keylayout# out/target/product/generic/system/usr/keycharsTARGET_OUT_KEYCHARS := $(TARGET_OUT)/usr/keychars# out/target/product/generic/system/etcTARGET_OUT_ETC := $(TARGET_OUT)/etc# out/target/product/generic/obj/NOTICE_FILESTARGET_OUT_NOTICE_FILES := $(TARGET_OUT_INTERMEDIATES)/NOTICE_FILES# out/target/product/generic/fake_packagesTARGET_OUT_FAKE := $(PRODUCT_OUT)/fake_packages# Out for TARGET_2ND_ARCH# 2ND_ TARGET_2ND_ARCH_VAR_PREFIX := $(HOST_2ND_ARCH_VAR_PREFIX)# _32TARGET_2ND_ARCH_MODULE_SUFFIX := $(HOST_2ND_ARCH_MODULE_SUFFIX)# 2ND_ TARGET_OUT_INTERMEDIATES =out/target/product/generic/obj_$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES)/lib$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(TARGET_OUT)/lib$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS := $(TARGET_OUT_APPS)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_APPS_PRIVILEGED := $(TARGET_OUT_APPS_PRIVILEGED)#out/target/product/generic/dataTARGET_OUT_DATA := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_DATA)TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_EXECUTABLES)TARGET_OUT_DATA_SHARED_LIBRARIES := $(TARGET_OUT_SHARED_LIBRARIES)TARGET_OUT_DATA_JAVA_LIBRARIES := $(TARGET_OUT_DATA)/frameworkTARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA)/appTARGET_OUT_DATA_KEYLAYOUT := $(TARGET_OUT_KEYLAYOUT)TARGET_OUT_DATA_KEYCHARS := $(TARGET_OUT_KEYCHARS)TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)ifeq ($(TARGET_IS_64_BIT),true)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest64elseTARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetestendifTARGET_OUT_DATA_FAKE := $(TARGET_OUT_DATA)/fake_packages$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_EXECUTABLES := $(TARGET_OUT_DATA_EXECUTABLES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_SHARED_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_APPS := $(TARGET_OUT_DATA_APPS)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetestTARGET_OUT_CACHE := $(PRODUCT_OUT)/cacheTARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR)/binTARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES := $(TARGET_OUT_VENDOR)/xbinifeq ($(TARGET_IS_64_BIT),true)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(TARGET_OUT_VENDOR)/lib64elseTARGET_OUT_VENDOR_SHARED_LIBRARIES := $(TARGET_OUT_VENDOR)/libendifTARGET_OUT_VENDOR_JAVA_LIBRARIES := $(TARGET_OUT_VENDOR)/frameworkTARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR)/appTARGET_OUT_VENDOR_ETC := $(TARGET_OUT_VENDOR)/etc$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_EXECUTABLES := $(TARGET_OUT_VENDOR_EXECUTABLES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(TARGET_OUT_VENDOR)/lib$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_APPS := $(TARGET_OUT_VENDOR_APPS)TARGET_OUT_OEM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_OEM)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM)/binifeq ($(TARGET_IS_64_BIT),true)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib64elseTARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/libendif# We don't expect Java libraries in the oem.img.# TARGET_OUT_OEM_JAVA_LIBRARIES:= $(TARGET_OUT_OEM)/frameworkTARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM)/appTARGET_OUT_OEM_ETC := $(TARGET_OUT_OEM)/etc$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_EXECUTABLES := $(TARGET_OUT_OEM_EXECUTABLES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_SHARED_LIBRARIES := $(TARGET_OUT_OEM)/lib$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS)TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/binifeq ($(TARGET_IS_64_BIT),true)TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib64elseTARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/libendifTARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM)/appTARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES)$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS)TARGET_OUT_UNSTRIPPED := $(PRODUCT_OUT)/symbolsTARGET_OUT_EXECUTABLES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/binTARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/system/libTARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/$(TARGET_COPY_OUT_VENDOR)/libTARGET_ROOT_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)TARGET_ROOT_OUT_SBIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/sbinTARGET_ROOT_OUT_BIN_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)/binTARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/binTARGET_ROOT_OUT_SBIN := $(TARGET_ROOT_OUT)/sbinTARGET_ROOT_OUT_ETC := $(TARGET_ROOT_OUT)/etcTARGET_ROOT_OUT_USR := $(TARGET_ROOT_OUT)/usrTARGET_RECOVERY_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RECOVERY)TARGET_RECOVERY_ROOT_OUT := $(TARGET_RECOVERY_OUT)/rootTARGET_SYSLOADER_OUT := $(PRODUCT_OUT)/sysloaderTARGET_SYSLOADER_ROOT_OUT := $(TARGET_SYSLOADER_OUT)/rootTARGET_SYSLOADER_SYSTEM_OUT := $(TARGET_SYSLOADER_OUT)/root/systemTARGET_INSTALLER_OUT := $(PRODUCT_OUT)/installerTARGET_INSTALLER_DATA_OUT := $(TARGET_INSTALLER_OUT)/dataTARGET_INSTALLER_ROOT_OUT := $(TARGET_INSTALLER_OUT)/rootTARGET_INSTALLER_SYSTEM_OUT := $(TARGET_INSTALLER_OUT)/root/system

定义了COMMON_MODULE_CLASSES,如果PRINT_BUILD_CONFIG为空,则定义为true,就是将打印编译配置设置为true。

COMMON_MODULE_CLASSES := TARGET-NOTICE_FILES HOST-NOTICE_FILES HOST-JAVA_LIBRARIES# 如果DIST_DIR为空,则定义为out/distifeq (,$(strip $(DIST_DIR)))  DIST_DIR := $(OUT_DIR)/distendififeq ($(PRINT_BUILD_CONFIG),)PRINT_BUILD_CONFIG := trueendif
0 0