From 2607625f8b26810a78a3c6ba75edb7d150748f25 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Thu, 2 Jan 2020 20:08:10 -0800 Subject: [PATCH] Add BUILD_BROKEN_NINJA_USES_ENV_VARS See the Changes.md and the paired soong change for more information. Test: Add BUILD_BROKEN_NINJA_USES_ENV_VARS := OLDPWD ALLOW_NINJA_ENV=false m nothing; check out/soong.log Change-Id: I2167eac52166b513318bc48feb71c9d0b80e5fd4 --- Changes.md | 20 +++++++++++++++++++- core/board_config.mk | 4 +++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Changes.md b/Changes.md index 5a0fd2390a..04e0161181 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,23 @@ # Build System Changes for Android.mk Writers +## Rules executed within limited environment + +With `ALLOW_NINJA_ENV=false` (soon to be the default), ninja, and all the +rules/actions executed within it will only have access to a limited number of +environment variables. Ninja does not track when environment variables change +in order to trigger rebuilds, so changing behavior based on arbitrary variables +is not safe with incremental builds. + +Kati and Soong can safely use environment variables, so the expectation is that +you'd embed any environment variables that you need to use within the command +line generated by those tools. See the [export section](#export_keyword) below +for examples. + +For a temporary workaround, you can set `ALLOW_NINJA_ENV=true` in your +environment to restore the previous behavior, or set +`BUILD_BROKEN_NINJA_USES_ENV_VAR := ...` in your `BoardConfig.mk` +to allow specific variables to be passed through until you've fixed the rules. + ## LOCAL_C_INCLUDES outside the source/output trees are an error {#BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS} Include directories are expected to be within the source tree (or in the output @@ -31,7 +49,7 @@ Since this usually isn't a valid path, you can almost always just remove the offending line. -# `BOARD_HAL_STATIC_LIBRARIES` and `LOCAL_HAL_STATIC_LIBRARIES` are obsolete {#BOARD_HAL_STATIC_LIBRARIES} +## `BOARD_HAL_STATIC_LIBRARIES` and `LOCAL_HAL_STATIC_LIBRARIES` are obsolete {#BOARD_HAL_STATIC_LIBRARIES} Define proper HIDL / Stable AIDL HAL instead. diff --git a/core/board_config.mk b/core/board_config.mk index 00ac0bed00..b9b4dc27a9 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -98,7 +98,8 @@ _build_broken_var_list += \ BUILD_BROKEN_USES_$(m)) _board_true_false_vars := $(_build_broken_var_list) -_board_strip_readonly_list += $(_build_broken_var_list) +_board_strip_readonly_list += $(_build_broken_var_list) \ + BUILD_BROKEN_NINJA_USES_ENV_VARS # Conditional to building on linux, as dex2oat currently does not work on darwin. ifeq ($(HOST_OS),linux) @@ -109,6 +110,7 @@ endif # Broken build defaults # ############################################################### $(foreach v,$(_build_broken_var_list),$(eval $(v) :=)) +BUILD_BROKEN_NINJA_USES_ENV_VARS := # Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE) # or under vendor/*/$(TARGET_DEVICE). Search in both places, but