diff --git a/Changes.md b/Changes.md index 1fadcefdca..be2a271e70 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,9 @@ # Build System Changes for Android.mk Writers +## Deprecation of `BUILD_*` module types + +See [build/make/Deprecation.md](Deprecation.md) for the current status. + ## `PRODUCT_HOST_PACKAGES` split from `PRODUCT_PACKAGES` {#PRODUCT_HOST_PACKAGES} Previously, adding a module to `PRODUCT_PACKAGES` that supported both the host diff --git a/Deprecation.md b/Deprecation.md new file mode 100644 index 0000000000..6468f464f3 --- /dev/null +++ b/Deprecation.md @@ -0,0 +1,56 @@ +# Deprecation of Make + +We've made significant progress converting AOSP from Make to Soong (Android.mk +to Android.bp), and we're ready to start turning off pieces of Make. If you +have any problems converting, please contact us via: + +* The [android-building@googlegroups.com] group. +* Our [public bug tracker](https://issuetracker.google.com/issues/new?component=381517). +* Or privately through your existing contacts at Google. + +## Status + +[build/make/core/deprecation.mk] is the source of truth, but for easy browsing: + +| Module type | State | +| -------------------------- | --------- | +| `BUILD_HOST_TEST_CONFIG` | Warning | +| `BUILD_TARGET_TEST_CONFIG` | Warning | +| `BUILD_*` | Available | + +## Module Type Deprecation Process + +We'll be turning off `BUILD_*` module types as all of the users are removed +from AOSP (and Google's internal trees). The process will go something like +this, using `BUILD_PACKAGE` as an example: + +* Prerequisite: all common users of `BUILD_PACKAGE` have been removed (some + device-specific ones may remain). +* `BUILD_PACKAGE` will be moved from `AVAILABLE_BUILD_MODULE_TYPES` to + `DEFAULT_WARNING_BUILD_MODULE_TYPES` in [build/make/core/deprecation.mk]. This + will make referring to `BUILD_PACKAGE` a warning. +* Any devices that still have warnings will have + `BUILD_BROKEN_USES_BUILD_PACKAGE := true` added to their `BoardConfig.mk`. +* `BUILD_PACKAGE` will be switched from `DEFAULT_WARNING_BUILD_MODULE_TYPES` to + `DEFAULT_ERROR_BUILD_MODULE_TYPES`, which will turn referring to + `BUILD_PACKAGE` into an error unless the device has overridden it. +* At some later point, after all devices in AOSP no longer set + `BUILD_BROKEN_USES_BUILD_PACKAGE`, `BUILD_PACKAGE` will be moved from + `DEFAULT_ERROR_BUILD_MODULE_TYPES` to `OBSOLETE_BUILD_MODULE_TYPES` and the + code will be removed. It will no longer be possible to use `BUILD_PACKAGE`. + +In most cases, we expect module types to stay in the default warning state for +about two weeks before becoming an error by default. Then it will spend some +amount of time in the default error state before moving to obsolete -- we'll +try and keep that around for a while, but other development may cause those to +break, and the fix may to be to obsolete them. There is no expectation that the +`BUILD_BROKEN_USES_BUILD_*` workarounds will work in a future release, it's a +short-term workaround. + +Just to be clear, the above process will happen on the AOSP master branch. So +if you're following Android releases, none of the deprecation steps will be in +Android Q, and the 2020 release will have jumped directly to the end for many +module types. + +[android-building@googlegroups.com]: https://groups.google.com/forum/#!forum/android-building +[build/make/core/deprecation.mk]: /core/deprecation.mk diff --git a/core/board_config.mk b/core/board_config.mk index d32e30134d..e4b88cb601 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -92,6 +92,12 @@ _build_broken_var_list := \ BUILD_BROKEN_ENG_DEBUG_TAGS \ BUILD_BROKEN_USES_NETWORK \ +_build_broken_var_list += \ + $(foreach m,$(AVAILABLE_BUILD_MODULE_TYPES) \ + $(DEFAULT_WARNING_BUILD_MODULE_TYPES) \ + $(DEFAULT_ERROR_BUILD_MODULE_TYPES), \ + BUILD_BROKEN_USES_$(m)) + _board_true_false_vars := $(_build_broken_var_list) _board_strip_readonly_list += $(_build_broken_var_list) @@ -511,3 +517,16 @@ ifneq (,$(_unsupported_systemsdk_versions)) $(error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\ Supported versions are $(PLATFORM_SYSTEMSDK_VERSIONS)) endif + +########################################### +# Handle BUILD_BROKEN_USES_BUILD_* + +$(foreach m,$(DEFAULT_WARNING_BUILD_MODULE_TYPES),\ + $(if $(filter false,$(BUILD_BROKEN_USES_$(m))),\ + $(KATI_obsolete_var $(m),Please convert to Soong),\ + $(KATI_deprecated_var $(m),Please convert to Soong))) + +$(foreach m,$(DEFAULT_ERROR_BUILD_MODULE_TYPES),\ + $(if $(filter true,$(BUILD_BROKEN_USES_$(m))),\ + $(KATI_deprecated_var $(m),Please convert to Soong),\ + $(KATI_obsolete_var $(m),Please convert to Soong))) diff --git a/core/config.mk b/core/config.mk index b5fe8661de..16cd37625f 100644 --- a/core/config.mk +++ b/core/config.mk @@ -135,45 +135,48 @@ include $(BUILD_SYSTEM)/project_definitions.mk # Build system internal files # ############################################################### -BUILD_COMBOS:= $(BUILD_SYSTEM)/combo +BUILD_COMBOS :=$= $(BUILD_SYSTEM)/combo -CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk -BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk -BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk -BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk -BUILD_HEADER_LIBRARY:= $(BUILD_SYSTEM)/header_library.mk -BUILD_AUX_STATIC_LIBRARY:= $(BUILD_SYSTEM)/aux_static_library.mk -BUILD_AUX_EXECUTABLE:= $(BUILD_SYSTEM)/aux_executable.mk -BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk -BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk -BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk -BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk -BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk -BUILD_RRO_PACKAGE:= $(BUILD_SYSTEM)/build_rro_package.mk -BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk -BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk -BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk -BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk -BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk -BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk -BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk -BUILD_NATIVE_TEST := $(BUILD_SYSTEM)/native_test.mk -BUILD_NATIVE_BENCHMARK := $(BUILD_SYSTEM)/native_benchmark.mk -BUILD_HOST_NATIVE_TEST := $(BUILD_SYSTEM)/host_native_test.mk -BUILD_FUZZ_TEST := $(BUILD_SYSTEM)/fuzz_test.mk -BUILD_HOST_FUZZ_TEST := $(BUILD_SYSTEM)/host_fuzz_test.mk +CLEAR_VARS :=$= $(BUILD_SYSTEM)/clear_vars.mk -BUILD_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/shared_test_lib.mk -BUILD_HOST_SHARED_TEST_LIBRARY := $(BUILD_SYSTEM)/host_shared_test_lib.mk -BUILD_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/static_test_lib.mk -BUILD_HOST_STATIC_TEST_LIBRARY := $(BUILD_SYSTEM)/host_static_test_lib.mk +BUILD_HOST_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/host_static_library.mk +BUILD_HOST_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/host_shared_library.mk +BUILD_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/static_library.mk +BUILD_HEADER_LIBRARY :=$= $(BUILD_SYSTEM)/header_library.mk +BUILD_AUX_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/aux_static_library.mk +BUILD_AUX_EXECUTABLE :=$= $(BUILD_SYSTEM)/aux_executable.mk +BUILD_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/shared_library.mk +BUILD_EXECUTABLE :=$= $(BUILD_SYSTEM)/executable.mk +BUILD_HOST_EXECUTABLE :=$= $(BUILD_SYSTEM)/host_executable.mk +BUILD_PACKAGE :=$= $(BUILD_SYSTEM)/package.mk +BUILD_PHONY_PACKAGE :=$= $(BUILD_SYSTEM)/phony_package.mk +BUILD_RRO_PACKAGE :=$= $(BUILD_SYSTEM)/build_rro_package.mk +BUILD_HOST_PREBUILT :=$= $(BUILD_SYSTEM)/host_prebuilt.mk +BUILD_PREBUILT :=$= $(BUILD_SYSTEM)/prebuilt.mk +BUILD_MULTI_PREBUILT :=$= $(BUILD_SYSTEM)/multi_prebuilt.mk +BUILD_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/java_library.mk +BUILD_STATIC_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/static_java_library.mk +BUILD_HOST_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/host_java_library.mk +BUILD_COPY_HEADERS :=$= $(BUILD_SYSTEM)/copy_headers.mk +BUILD_NATIVE_TEST :=$= $(BUILD_SYSTEM)/native_test.mk +BUILD_NATIVE_BENCHMARK :=$= $(BUILD_SYSTEM)/native_benchmark.mk +BUILD_HOST_NATIVE_TEST :=$= $(BUILD_SYSTEM)/host_native_test.mk +BUILD_FUZZ_TEST :=$= $(BUILD_SYSTEM)/fuzz_test.mk +BUILD_HOST_FUZZ_TEST :=$= $(BUILD_SYSTEM)/host_fuzz_test.mk -BUILD_NOTICE_FILE := $(BUILD_SYSTEM)/notice_files.mk -BUILD_HOST_DALVIK_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_java_library.mk -BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY := $(BUILD_SYSTEM)/host_dalvik_static_java_library.mk +BUILD_SHARED_TEST_LIBRARY :=$= $(BUILD_SYSTEM)/shared_test_lib.mk +BUILD_HOST_SHARED_TEST_LIBRARY :=$= $(BUILD_SYSTEM)/host_shared_test_lib.mk +BUILD_STATIC_TEST_LIBRARY :=$= $(BUILD_SYSTEM)/static_test_lib.mk +BUILD_HOST_STATIC_TEST_LIBRARY :=$= $(BUILD_SYSTEM)/host_static_test_lib.mk -BUILD_HOST_TEST_CONFIG := $(BUILD_SYSTEM)/host_test_config.mk -BUILD_TARGET_TEST_CONFIG := $(BUILD_SYSTEM)/target_test_config.mk +BUILD_NOTICE_FILE :=$= $(BUILD_SYSTEM)/notice_files.mk +BUILD_HOST_DALVIK_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/host_dalvik_java_library.mk +BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/host_dalvik_static_java_library.mk + +BUILD_HOST_TEST_CONFIG :=$= $(BUILD_SYSTEM)/host_test_config.mk +BUILD_TARGET_TEST_CONFIG :=$= $(BUILD_SYSTEM)/target_test_config.mk + +include $(BUILD_SYSTEM)/deprecation.mk # ############################################################### # Parse out any modifier targets. diff --git a/core/deprecation.mk b/core/deprecation.mk new file mode 100644 index 0000000000..cbc938ac34 --- /dev/null +++ b/core/deprecation.mk @@ -0,0 +1,55 @@ +# These module types can still be used without warnings or errors. +AVAILABLE_BUILD_MODULE_TYPES :=$= \ + BUILD_AUX_EXECUTABLE \ + BUILD_AUX_STATIC_LIBRARY \ + BUILD_COPY_HEADERS \ + BUILD_EXECUTABLE \ + BUILD_FUZZ_TEST \ + BUILD_HEADER_LIBRARY \ + BUILD_HOST_DALVIK_JAVA_LIBRARY \ + BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY \ + BUILD_HOST_EXECUTABLE \ + BUILD_HOST_FUZZ_TEST \ + BUILD_HOST_JAVA_LIBRARY \ + BUILD_HOST_NATIVE_TEST \ + BUILD_HOST_PREBUILT \ + BUILD_HOST_SHARED_LIBRARY \ + BUILD_HOST_SHARED_TEST_LIBRARY \ + BUILD_HOST_STATIC_LIBRARY \ + BUILD_HOST_STATIC_TEST_LIBRARY \ + BUILD_JAVA_LIBRARY \ + BUILD_MULTI_PREBUILT \ + BUILD_NATIVE_BENCHMARK \ + BUILD_NATIVE_TEST \ + BUILD_NOTICE_FILE \ + BUILD_PACKAGE \ + BUILD_PHONY_PACKAGE \ + BUILD_PREBUILT \ + BUILD_RRO_PACKAGE \ + BUILD_SHARED_LIBRARY \ + BUILD_SHARED_TEST_LIBRARY \ + BUILD_STATIC_JAVA_LIBRARY \ + BUILD_STATIC_LIBRARY \ + BUILD_STATIC_TEST_LIBRARY \ + +# These are BUILD_* variables that will throw a warning when used. This is +# generally a temporary state until all the devices are marked with the +# relevant BUILD_BROKEN_USES_BUILD_* variables, then these would move to +# DEFAULT_ERROR_BUILD_MODULE_TYPES. +DEFAULT_WARNING_BUILD_MODULE_TYPES :=$= \ + BUILD_HOST_TEST_CONFIG \ + BUILD_TARGET_TEST_CONFIG \ + +# These are BUILD_* variables that are errors to reference, but you can set +# BUILD_BROKEN_USES_BUILD_* in your BoardConfig.mk in order to turn them back +# to warnings. +DEFAULT_ERROR_BUILD_MODULE_TYPES :=$= \ + +# These are BUILD_* variables that are always errors to reference. +# Setting the BUILD_BROKEN_USES_BUILD_* variables is also an error. +OBSOLETE_BUILD_MODULE_TYPES :=$= \ + +$(foreach m,$(OBSOLETE_BUILD_MODULE_TYPES),\ + $(KATI_obsolete_var $(m),Please convert to Soong) \ + $(KATI_obsolete_var BUILD_BROKEN_USES_$(m),Please convert to Soong)) +