Merge "Improve checks for include dirs outside the source tree"

This commit is contained in:
Treehugger Robot 2019-12-06 21:49:25 +00:00 committed by Gerrit Code Review
commit 9e0b4ed82a
3 changed files with 38 additions and 2 deletions

View file

@ -1,5 +1,36 @@
# Build System Changes for Android.mk Writers
## 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
directory, generated during the build). This has been checked in some form
since Oreo, but now has better checks.
There's now a `BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS` variable, that when set, will
turn these errors into warnings temporarily. I don't expect this to last more
than a release, since they're fairly easy to clean up.
Neither of these cases are supported by Soong, and will produce errors when
converting your module.
### Absolute paths
This has been checked since Oreo. The common reason to hit this is because a
makefile is calculating a path, and ran abspath/realpath/etc. This is a problem
because it makes your build non-reproducible. It's very unlikely that your
source path is the same on every machine.
### Using `../` to leave the source/output directories
This is the new check that has been added. In every case I've found, this has
been a mistake in the Android.mk -- assuming that `LOCAL_C_INCLUDES` (which is
relative to the top of the source tree) acts like `LOCAL_SRC_FILES` (which is
relative to `LOCAL_PATH`).
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}
Define proper HIDL / Stable AIDL HAL instead.

View file

@ -1295,9 +1295,13 @@ endif
my_c_includes := $(foreach inc,$(my_c_includes),$(call clean-path,$(inc)))
my_outside_includes := $(filter-out $(OUT_DIR)/%,$(filter /%,$(my_c_includes)))
my_outside_includes := $(filter-out $(OUT_DIR)/%,$(filter /%,$(my_c_includes)) $(filter ../%,$(my_c_includes)))
ifneq ($(my_outside_includes),)
$(error $(LOCAL_MODULE_MAKEFILE): $(LOCAL_MODULE): C_INCLUDES must be under the source or output directories: $(my_outside_includes))
ifeq ($(BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS),true)
$(call pretty-warning,C_INCLUDES must be under the source or output directories: $(my_outside_includes))
else
$(call pretty-error,C_INCLUDES must be under the source or output directories: $(my_outside_includes))
endif
endif
# all_objects includes gen_o_objects which were part of LOCAL_GENERATED_SOURCES;

View file

@ -89,6 +89,7 @@ _build_broken_var_list := \
BUILD_BROKEN_PREBUILT_ELF_FILES \
BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW \
BUILD_BROKEN_USES_NETWORK \
BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS \
_build_broken_var_list += \
$(foreach m,$(AVAILABLE_BUILD_MODULE_TYPES) \