Loading Changes.md +31 −0 Original line number Diff line number Diff line # 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. Loading core/binary.mk +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading core/board_config.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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) \ Loading Loading
Changes.md +31 −0 Original line number Diff line number Diff line # 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. Loading
core/binary.mk +6 −2 Original line number Diff line number Diff line Loading @@ -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; Loading
core/board_config.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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) \ Loading