Mark export/unexport as deprecated
Make it so that `export`/`unexport` are deprecated during product configuration, but obsolete during Android.mk parsing (and later in the build, since we can't un-obsolete it). Remove some ccache / goma exports, those don't need to be exports, since soong_ui asks about them explicitly. They also only run doing the initial project configuration, so we don't run anything with that environment. Bug: 73959648 Test: m nothing Test: build_test on all downstream branches Change-Id: I55a749f46775660439ae57e881a02c914e83de16
This commit is contained in:
50
Changes.md
50
Changes.md
@@ -1,5 +1,55 @@
|
|||||||
# Build System Changes for Android.mk Writers
|
# Build System Changes for Android.mk Writers
|
||||||
|
|
||||||
|
### `export` and `unexport` deprecation {#export_keyword}
|
||||||
|
|
||||||
|
The `export` and `unexport` keywords have been deprecated, and will throw
|
||||||
|
warnings or errors depending on where they are used.
|
||||||
|
|
||||||
|
Early in the make system, during product configuration and BoardConfig.mk
|
||||||
|
reading: these will throw a warnings, and will be an error in the future.
|
||||||
|
Device specific configuration should not be able to affect common core build
|
||||||
|
steps -- we're looking at triggering build steps to be invalidated if the set
|
||||||
|
of environment variables they can access changes. If device specific
|
||||||
|
configuration is allowed to change those, switching devices with the same
|
||||||
|
output directory could become significantly more expensive than it already can
|
||||||
|
be.
|
||||||
|
|
||||||
|
Later, during Android.mk files, and later tasks: these will throw errors, since
|
||||||
|
it is increasingly likely that they are being used incorrectly, attempting to
|
||||||
|
change the environment for a single build step, and instead setting it for
|
||||||
|
hundreds of thousands.
|
||||||
|
|
||||||
|
It is not recommended to just move the environment variable setting outside of
|
||||||
|
the build (in vendorsetup.sh, or some other configuration script or wrapper).
|
||||||
|
We expect to limit the environment variables that the build respects in the
|
||||||
|
future, others will be cleared. (There will be methods to get custom variables
|
||||||
|
into the build, just not to every build step)
|
||||||
|
|
||||||
|
Instead, write the export commands into the rule command lines themselves:
|
||||||
|
|
||||||
|
``` make
|
||||||
|
$(intermediates)/generated_output.img:
|
||||||
|
rm -rf $@
|
||||||
|
export MY_ENV_A="$(MY_A)"; make ...
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to set many environment variables, and/or use them many times,
|
||||||
|
write them out to a script and source the script:
|
||||||
|
|
||||||
|
``` make
|
||||||
|
envsh := $(intermediates)/env.sh
|
||||||
|
$(envsh):
|
||||||
|
rm -rf $@
|
||||||
|
echo 'export MY_ENV_A="$(MY_A)"' >$@
|
||||||
|
echo 'export MY_ENV_B="$(MY_B)"' >>$@
|
||||||
|
|
||||||
|
$(intermediates)/generated_output.img: PRIVATE_ENV := $(envsh)
|
||||||
|
$(intermediates)/generated_output.img: $(envsh) a/b/c/package.sh
|
||||||
|
rm -rf $@
|
||||||
|
source $(PRIVATE_ENV); make ...
|
||||||
|
source $(PRIVATE_ENV); a/b/c/package.sh ...
|
||||||
|
```
|
||||||
|
|
||||||
## Implicit make rules are deprecated {#implicit_rules}
|
## Implicit make rules are deprecated {#implicit_rules}
|
||||||
|
|
||||||
Implicit rules look something like the following:
|
Implicit rules look something like the following:
|
||||||
|
@@ -32,24 +32,24 @@ ifneq ($(CCACHE_EXEC),)
|
|||||||
ifneq ($(filter-out false,$(USE_CCACHE)),)
|
ifneq ($(filter-out false,$(USE_CCACHE)),)
|
||||||
# The default check uses size and modification time, causing false misses
|
# The default check uses size and modification time, causing false misses
|
||||||
# since the mtime depends when the repo was checked out
|
# since the mtime depends when the repo was checked out
|
||||||
export CCACHE_COMPILERCHECK ?= content
|
CCACHE_COMPILERCHECK ?= content
|
||||||
|
|
||||||
# See man page, optimizations to get more cache hits
|
# See man page, optimizations to get more cache hits
|
||||||
# implies that __DATE__ and __TIME__ are not critical for functionality.
|
# implies that __DATE__ and __TIME__ are not critical for functionality.
|
||||||
# Ignore include file modification time since it will depend on when
|
# Ignore include file modification time since it will depend on when
|
||||||
# the repo was checked out
|
# the repo was checked out
|
||||||
export CCACHE_SLOPPINESS := time_macros,include_file_mtime,file_macro
|
CCACHE_SLOPPINESS := time_macros,include_file_mtime,file_macro
|
||||||
|
|
||||||
# Turn all preprocessor absolute paths into relative paths.
|
# Turn all preprocessor absolute paths into relative paths.
|
||||||
# Fixes absolute paths in preprocessed source due to use of -g.
|
# Fixes absolute paths in preprocessed source due to use of -g.
|
||||||
# We don't really use system headers much so the rootdir is
|
# We don't really use system headers much so the rootdir is
|
||||||
# fine; ensures these paths are relative for all Android trees
|
# fine; ensures these paths are relative for all Android trees
|
||||||
# on a workstation.
|
# on a workstation.
|
||||||
export CCACHE_BASEDIR := /
|
CCACHE_BASEDIR := /
|
||||||
|
|
||||||
# Workaround for ccache with clang.
|
# Workaround for ccache with clang.
|
||||||
# See http://petereisentraut.blogspot.com/2011/09/ccache-and-clang-part-2.html
|
# See http://petereisentraut.blogspot.com/2011/09/ccache-and-clang-part-2.html
|
||||||
export CCACHE_CPP2 := true
|
CCACHE_CPP2 := true
|
||||||
|
|
||||||
ifndef CC_WRAPPER
|
ifndef CC_WRAPPER
|
||||||
CC_WRAPPER := $(CCACHE_EXEC)
|
CC_WRAPPER := $(CCACHE_EXEC)
|
||||||
|
@@ -85,6 +85,9 @@ $(KATI_obsolete_var \
|
|||||||
$(KATI_obsolete_var PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE,Set FCM Version in device manifest instead. See $(CHANGES_URL)#PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE)
|
$(KATI_obsolete_var PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE,Set FCM Version in device manifest instead. See $(CHANGES_URL)#PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE)
|
||||||
$(KATI_obsolete_var USE_CLANG_PLATFORM_BUILD,Clang is the only supported Android compiler. See $(CHANGES_URL)#USE_CLANG_PLATFORM_BUILD)
|
$(KATI_obsolete_var USE_CLANG_PLATFORM_BUILD,Clang is the only supported Android compiler. See $(CHANGES_URL)#USE_CLANG_PLATFORM_BUILD)
|
||||||
|
|
||||||
|
# This is marked as obsolete in envsetup.mk after reading the BoardConfig.mk
|
||||||
|
$(KATI_deprecate_export It is a global setting. See $(CHANGES_URL)#export_keyword)
|
||||||
|
|
||||||
CHANGES_URL :=
|
CHANGES_URL :=
|
||||||
|
|
||||||
# Used to force goals to build. Only use for conditionally defined goals.
|
# Used to force goals to build. Only use for conditionally defined goals.
|
||||||
@@ -358,10 +361,6 @@ endif
|
|||||||
ifeq ($(CALLED_FROM_SETUP),true)
|
ifeq ($(CALLED_FROM_SETUP),true)
|
||||||
include $(BUILD_SYSTEM)/ccache.mk
|
include $(BUILD_SYSTEM)/ccache.mk
|
||||||
include $(BUILD_SYSTEM)/goma.mk
|
include $(BUILD_SYSTEM)/goma.mk
|
||||||
|
|
||||||
export CC_WRAPPER
|
|
||||||
export CXX_WRAPPER
|
|
||||||
export JAVAC_WRAPPER
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef TARGET_PREFER_32_BIT
|
ifdef TARGET_PREFER_32_BIT
|
||||||
|
@@ -288,6 +288,14 @@ $(foreach var,$(vars), \
|
|||||||
|
|
||||||
.KATI_READONLY := $(vars)
|
.KATI_READONLY := $(vars)
|
||||||
|
|
||||||
|
CHANGES_URL := https://android.googlesource.com/platform/build/+/master/Changes.md
|
||||||
|
|
||||||
|
# "" is equivalent to true currently.
|
||||||
|
ifeq ($(BUILD_BROKEN_ANDROIDMK_EXPORTS),false)
|
||||||
|
$(KATI_obsolete_export It is a global setting. See $(CHANGES_URL)#export_keyword)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CHANGES_URL :=
|
||||||
|
|
||||||
###########################################
|
###########################################
|
||||||
# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR
|
# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR
|
||||||
|
@@ -14,9 +14,6 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Used by the compiler wrapper, but should only be set by gomacc
|
|
||||||
unexport GOMACC_PATH
|
|
||||||
|
|
||||||
# Notice: this works only with Google's Goma build infrastructure.
|
# Notice: this works only with Google's Goma build infrastructure.
|
||||||
ifneq ($(filter-out false,$(USE_GOMA)),)
|
ifneq ($(filter-out false,$(USE_GOMA)),)
|
||||||
# Goma requires a lot of processes and file descriptors.
|
# Goma requires a lot of processes and file descriptors.
|
||||||
|
Reference in New Issue
Block a user