forked from openkylin/platform_build
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:
parent
94bff7ae22
commit
8b9c3cc54b
50
Changes.md
50
Changes.md
|
@ -1,5 +1,55 @@
|
|||
# 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 rules look something like the following:
|
||||
|
|
|
@ -32,24 +32,24 @@ ifneq ($(CCACHE_EXEC),)
|
|||
ifneq ($(filter-out false,$(USE_CCACHE)),)
|
||||
# The default check uses size and modification time, causing false misses
|
||||
# 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
|
||||
# implies that __DATE__ and __TIME__ are not critical for functionality.
|
||||
# Ignore include file modification time since it will depend on when
|
||||
# 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.
|
||||
# Fixes absolute paths in preprocessed source due to use of -g.
|
||||
# We don't really use system headers much so the rootdir is
|
||||
# fine; ensures these paths are relative for all Android trees
|
||||
# on a workstation.
|
||||
export CCACHE_BASEDIR := /
|
||||
CCACHE_BASEDIR := /
|
||||
|
||||
# Workaround for ccache with clang.
|
||||
# See http://petereisentraut.blogspot.com/2011/09/ccache-and-clang-part-2.html
|
||||
export CCACHE_CPP2 := true
|
||||
CCACHE_CPP2 := true
|
||||
|
||||
ifndef CC_WRAPPER
|
||||
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 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 :=
|
||||
|
||||
# Used to force goals to build. Only use for conditionally defined goals.
|
||||
|
@ -358,10 +361,6 @@ endif
|
|||
ifeq ($(CALLED_FROM_SETUP),true)
|
||||
include $(BUILD_SYSTEM)/ccache.mk
|
||||
include $(BUILD_SYSTEM)/goma.mk
|
||||
|
||||
export CC_WRAPPER
|
||||
export CXX_WRAPPER
|
||||
export JAVAC_WRAPPER
|
||||
endif
|
||||
|
||||
ifdef TARGET_PREFER_32_BIT
|
||||
|
|
|
@ -288,6 +288,14 @@ $(foreach var,$(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
|
||||
|
|
|
@ -14,9 +14,6 @@
|
|||
# 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.
|
||||
ifneq ($(filter-out false,$(USE_GOMA)),)
|
||||
# Goma requires a lot of processes and file descriptors.
|
||||
|
|
Loading…
Reference in New Issue