diff options
| -rw-r--r-- | core/config.mk | 53 | ||||
| -rw-r--r-- | core/main.mk | 68 | ||||
| -rw-r--r-- | core/ninja.mk | 70 | ||||
| -rw-r--r-- | core/ninja_config.mk | 69 | ||||
| -rw-r--r-- | core/soong.mk | 69 | ||||
| -rw-r--r-- | core/soong_config.mk | 68 |
6 files changed, 194 insertions, 203 deletions
diff --git a/core/config.mk b/core/config.mk index 93a2d34b7d..8d5d31a7f0 100644 --- a/core/config.mk +++ b/core/config.mk @@ -31,6 +31,37 @@ endef backslash := \a backslash := $(patsubst %a,%,$(backslash)) +# this turns off the suffix rules built into make +.SUFFIXES: + +# this turns off the RCS / SCCS implicit rules of GNU Make +% : RCS/%,v +% : RCS/% +% : %,v +% : s.% +% : SCCS/s.% + +# If a rule fails, delete $@. +.DELETE_ON_ERROR: + +# Check for broken versions of make. +ifndef KATI +ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81))) +$(warning ********************************************************************************) +$(warning * You are using version $(MAKE_VERSION) of make.) +$(warning * Android can only be built by versions 3.81 and higher.) +$(warning * see https://source.android.com/source/download.html) +$(warning ********************************************************************************) +$(error stopping) +endif +endif + +# Used to force goals to build. Only use for conditionally defined goals. +.PHONY: FORCE +FORCE: + +ORIGINAL_MAKECMDGOALS := $(MAKECMDGOALS) + # Tell python not to spam the source tree with .pyc files. This # only has an effect on python 2.6 and above. export PYTHONDONTWRITEBYTECODE := 1 @@ -810,4 +841,26 @@ define find_warning_allowed_projects $(filter $(ANDROID_WARNING_ALLOWED_PROJECTS),$(1)/) endef +# These goals don't need to collect and include Android.mks/CleanSpec.mks +# in the source tree. +dont_bother_goals := clean clobber dataclean installclean \ + help out \ + snod systemimage-nodeps \ + stnod systemtarball-nodeps \ + userdataimage-nodeps userdatatarball-nodeps \ + cacheimage-nodeps \ + bptimage-nodeps \ + vendorimage-nodeps \ + ramdisk-nodeps \ + bootimage-nodeps \ + recoveryimage-nodeps \ + vbmetaimage-nodeps \ + product-graph dump-products + +ifndef KATI +include $(BUILD_SYSTEM)/ninja_config.mk +-include vendor/google/build/ninja_config.mk +include $(BUILD_SYSTEM)/soong_config.mk +endif + include $(BUILD_SYSTEM)/dumpvar.mk diff --git a/core/main.mk b/core/main.mk index 48a39d02d7..6f198d5232 100644 --- a/core/main.mk +++ b/core/main.mk @@ -9,44 +9,6 @@ else SHELL := /bin/bash endif -# this turns off the suffix rules built into make -.SUFFIXES: - -# this turns off the RCS / SCCS implicit rules of GNU Make -% : RCS/%,v -% : RCS/% -% : %,v -% : s.% -% : SCCS/s.% - -# If a rule fails, delete $@. -.DELETE_ON_ERROR: - -# Figure out where we are. -#TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) -#TOP := $(patsubst %/,%,$(TOP)) - -# TOPDIR is the normal variable you should use, because -# if we are executing relative to the current directory -# it can be "", whereas TOP must be "." which causes -# pattern matching problems when make strips off the -# trailing "./" from paths in various places. -#ifeq ($(TOP),.) -#TOPDIR := -#else -#TOPDIR := $(TOP)/ -#endif - -# Check for broken versions of make. -ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81))) -$(warning ********************************************************************************) -$(warning * You are using version $(MAKE_VERSION) of make.) -$(warning * Android can only be built by versions 3.81 and higher.) -$(warning * see https://source.android.com/source/download.html) -$(warning ********************************************************************************) -$(error stopping) -endif - # Absolute path of the present working direcotry. # This overrides the shell variable $PWD, which does not necessarily points to # the top of the source tree, for example when "make -C" is used in m/mm/mmm. @@ -65,32 +27,6 @@ $(DEFAULT_GOAL): droid_targets .PHONY: droid_targets droid_targets: -# Used to force goals to build. Only use for conditionally defined goals. -.PHONY: FORCE -FORCE: - -# These goals don't need to collect and include Android.mks/CleanSpec.mks -# in the source tree. -dont_bother_goals := clean clobber dataclean installclean \ - help out \ - snod systemimage-nodeps \ - stnod systemtarball-nodeps \ - userdataimage-nodeps userdatatarball-nodeps \ - cacheimage-nodeps \ - bptimage-nodeps \ - vendorimage-nodeps \ - ramdisk-nodeps \ - bootimage-nodeps \ - recoveryimage-nodeps \ - vbmetaimage-nodeps \ - product-graph dump-products - -ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),) -dont_bother := true -endif - -ORIGINAL_MAKECMDGOALS := $(MAKECMDGOALS) - # Targets that provide quick help on the build system. include $(BUILD_SYSTEM)/help.mk @@ -108,6 +44,10 @@ $(shell mkdir -p $(OUT_DIR) && touch $(OUT_DIR)/ninja_build) include build/core/ninja.mk else # KATI +ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),) +dont_bother := true +endif + include $(SOONG_MAKEVARS_MK) # Write the build number to a file so it can be read back in diff --git a/core/ninja.mk b/core/ninja.mk index b865a79755..8a5a904c38 100644 --- a/core/ninja.mk +++ b/core/ninja.mk @@ -1,78 +1,8 @@ -ifeq ($(filter address,$(SANITIZE_HOST)),) -NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/bin/ninja -else -NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/asan/bin/ninja -endif - include $(BUILD_SYSTEM)/soong.mk -KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh - # Modifier goals we don't need to pass to Ninja. -NINJA_EXCLUDE_GOALS := showcommands all dist .PHONY : $(NINJA_EXCLUDE_GOALS) -# A list of goals which affect parsing of makefiles and we need to pass to Kati. -PARSE_TIME_MAKE_GOALS := \ - $(PARSE_TIME_MAKE_GOALS) \ - $(dont_bother_goals) \ - all \ - APP-% \ - DUMP_% \ - ECLIPSE-% \ - PRODUCT-% \ - AUX-% \ - boottarball-nodeps \ - brillo_tests \ - btnod \ - build-art% \ - build_kernel-nodeps \ - clean-oat% \ - continuous_instrumentation_tests \ - continuous_native_tests \ - cts \ - custom_images \ - deps-license \ - dicttool_aosp \ - dist \ - dump-products \ - dumpvar-% \ - eng \ - fusion \ - oem_image \ - online-system-api-sdk-docs \ - pdk \ - platform \ - platform-java \ - product-graph \ - samplecode \ - sdk \ - sdk_addon \ - sdk_repo \ - snod \ - stnod \ - systemimage-nodeps \ - systemtarball-nodeps \ - target-files-package \ - test-art% \ - user \ - userdataimage \ - userdebug \ - valgrind-test-art% \ - vts \ - win_sdk \ - winsdk-tools - --include vendor/google/build/ninja_config.mk - -# Any Android goals that need to be built. -ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(CKATI) $(MAKEPARALLEL),\ - $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS))) -# Goals we need to pass to Ninja. -NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS)) -# Goals we need to pass to Kati. -KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS)) - define replace_space_and_slash $(subst /,_,$(subst $(space),_,$(sort $1))) endef diff --git a/core/ninja_config.mk b/core/ninja_config.mk new file mode 100644 index 0000000000..ab885151dc --- /dev/null +++ b/core/ninja_config.mk @@ -0,0 +1,69 @@ +ifeq ($(filter address,$(SANITIZE_HOST)),) +NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/bin/ninja +else +NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/asan/bin/ninja +endif + +KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh + +# Modifier goals we don't need to pass to Ninja. +NINJA_EXCLUDE_GOALS := showcommands all dist +.PHONY : $(NINJA_EXCLUDE_GOALS) + +# A list of goals which affect parsing of makefiles and we need to pass to Kati. +PARSE_TIME_MAKE_GOALS := \ + $(PARSE_TIME_MAKE_GOALS) \ + $(dont_bother_goals) \ + all \ + APP-% \ + DUMP_% \ + ECLIPSE-% \ + PRODUCT-% \ + AUX-% \ + boottarball-nodeps \ + brillo_tests \ + btnod \ + build-art% \ + build_kernel-nodeps \ + clean-oat% \ + continuous_instrumentation_tests \ + continuous_native_tests \ + cts \ + custom_images \ + deps-license \ + dicttool_aosp \ + dist \ + dump-products \ + eng \ + fusion \ + oem_image \ + online-system-api-sdk-docs \ + pdk \ + platform \ + platform-java \ + product-graph \ + samplecode \ + sdk \ + sdk_addon \ + sdk_repo \ + snod \ + stnod \ + systemimage-nodeps \ + systemtarball-nodeps \ + target-files-package \ + test-art% \ + user \ + userdataimage \ + userdebug \ + valgrind-test-art% \ + vts \ + win_sdk \ + winsdk-tools + +# Any Android goals that need to be built. +ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(CKATI) $(MAKEPARALLEL),\ + $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS))) +# Goals we need to pass to Ninja. +NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS)) +# Goals we need to pass to Kati. +KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS)) diff --git a/core/soong.mk b/core/soong.mk index 73622a2628..4a74f2ee35 100644 --- a/core/soong.mk +++ b/core/soong.mk @@ -1,11 +1,3 @@ -SOONG := $(SOONG_OUT_DIR)/soong -SOONG_BOOTSTRAP := $(SOONG_OUT_DIR)/.soong.bootstrap -SOONG_BUILD_NINJA := $(SOONG_OUT_DIR)/build.ninja -SOONG_IN_MAKE := $(SOONG_OUT_DIR)/.soong.in_make -SOONG_MAKEVARS_MK := $(SOONG_OUT_DIR)/make_vars-$(TARGET_PRODUCT).mk -SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.variables -SOONG_ANDROID_MK := $(SOONG_OUT_DIR)/Android-$(TARGET_PRODUCT).mk - # We need to rebootstrap soong if SOONG_OUT_DIR or the reverse path from # SOONG_OUT_DIR to TOP changes SOONG_NEEDS_REBOOTSTRAP := @@ -25,67 +17,6 @@ $(SOONG_BOOTSTRAP): bootstrap.bash $(SOONG_NEEDS_REBOOTSTRAP) $(hide) mkdir -p $(dir $@) $(hide) BUILDDIR=$(SOONG_OUT_DIR) ./bootstrap.bash -BINDER32BIT := -ifneq ($(TARGET_USES_64_BIT_BINDER),true) -ifneq ($(TARGET_IS_64_BIT),true) -BINDER32BIT := true -endif -endif - -# Create soong.variables with copies of makefile settings. Runs every build, -# but only updates soong.variables if it changes -SOONG_VARIABLES_TMP := $(SOONG_VARIABLES).$$$$ -$(SOONG_VARIABLES): FORCE - $(hide) mkdir -p $(dir $@) - $(hide) (\ - echo '{'; \ - echo ' "Make_suffix": "-$(TARGET_PRODUCT)",'; \ - echo ''; \ - echo ' "Platform_sdk_version": $(PLATFORM_SDK_VERSION),'; \ - echo ' "Unbundled_build": $(if $(TARGET_BUILD_APPS),true,false),'; \ - echo ' "Brillo": $(if $(BRILLO),true,false),'; \ - echo ' "Malloc_not_svelte": $(if $(filter true,$(MALLOC_SVELTE)),false,true),'; \ - echo ' "Allow_missing_dependencies": $(if $(TARGET_BUILD_APPS)$(filter true,$(SOONG_ALLOW_MISSING_DEPENDENCIES)),true,false),'; \ - echo ' "SanitizeHost": [$(if $(SANITIZE_HOST),"$(subst $(space),"$(comma)",$(SANITIZE_HOST))")],'; \ - echo ' "SanitizeDevice": [$(if $(SANITIZE_TARGET),"$(subst $(space),"$(comma)",$(SANITIZE_TARGET))")],'; \ - echo ' "SanitizeDeviceArch": [$(if $(SANITIZE_TARGET_ARCH),"$(subst $(space),"$(comma)",$(SANITIZE_TARGET_ARCH))")],'; \ - echo ' "HostStaticBinaries": $(if $(strip $(BUILD_HOST_static)),true,false),'; \ - echo ' "Cpusets": $(if $(strip $(ENABLE_CPUSETS)),true,false),'; \ - echo ' "Schedboost": $(if $(strip $(ENABLE_SCHEDBOOST)),true,false),'; \ - echo ' "Binder32bit": $(if $(BINDER32BIT),true,false),'; \ - echo ' "DevicePrefer32BitExecutables": $(if $(filter true,$(TARGET_PREFER_32_BIT_EXECUTABLES)),true,false),'; \ - echo ' "UseGoma": $(if $(filter-out false,$(USE_GOMA)),true,false),'; \ - echo ' "Debuggable": $(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),true,false),'; \ - echo ''; \ - echo ' "ClangTidy": $(if $(filter 1 true,$(WITH_TIDY)),true,false),'; \ - echo ' "TidyChecks": "$(WITH_TIDY_CHECKS)",'; \ - echo ''; \ - echo ' "DeviceName": "$(TARGET_DEVICE)",'; \ - echo ' "DeviceArch": "$(TARGET_ARCH)",'; \ - echo ' "DeviceArchVariant": "$(TARGET_ARCH_VARIANT)",'; \ - echo ' "DeviceCpuVariant": "$(TARGET_CPU_VARIANT)",'; \ - echo ' "DeviceAbi": ["$(TARGET_CPU_ABI)", "$(TARGET_CPU_ABI2)"],'; \ - echo ' "DeviceUsesClang": $(if $(USE_CLANG_PLATFORM_BUILD),$(USE_CLANG_PLATFORM_BUILD),false),'; \ - echo ''; \ - echo ' "DeviceSecondaryArch": "$(TARGET_2ND_ARCH)",'; \ - echo ' "DeviceSecondaryArchVariant": "$(TARGET_2ND_ARCH_VARIANT)",'; \ - echo ' "DeviceSecondaryCpuVariant": "$(TARGET_2ND_CPU_VARIANT)",'; \ - echo ' "DeviceSecondaryAbi": ["$(TARGET_2ND_CPU_ABI)", "$(TARGET_2ND_CPU_ABI2)"],'; \ - echo ''; \ - echo ' "HostArch": "$(HOST_ARCH)",'; \ - echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ - echo ''; \ - echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ - echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ - echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ - echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false)'; \ - echo '}') > $(SOONG_VARIABLES_TMP); \ - if ! cmp -s $(SOONG_VARIABLES_TMP) $(SOONG_VARIABLES); then \ - mv $(SOONG_VARIABLES_TMP) $(SOONG_VARIABLES); \ - else \ - rm $(SOONG_VARIABLES_TMP); \ - fi - # Tell soong that it is embedded in make $(SOONG_IN_MAKE): $(hide) mkdir -p $(dir $@) diff --git a/core/soong_config.mk b/core/soong_config.mk new file mode 100644 index 0000000000..995d9ed384 --- /dev/null +++ b/core/soong_config.mk @@ -0,0 +1,68 @@ +SOONG := $(SOONG_OUT_DIR)/soong +SOONG_BOOTSTRAP := $(SOONG_OUT_DIR)/.soong.bootstrap +SOONG_BUILD_NINJA := $(SOONG_OUT_DIR)/build.ninja +SOONG_IN_MAKE := $(SOONG_OUT_DIR)/.soong.in_make +SOONG_MAKEVARS_MK := $(SOONG_OUT_DIR)/make_vars-$(TARGET_PRODUCT).mk +SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.variables +SOONG_ANDROID_MK := $(SOONG_OUT_DIR)/Android-$(TARGET_PRODUCT).mk + +BINDER32BIT := +ifneq ($(TARGET_USES_64_BIT_BINDER),true) +ifneq ($(TARGET_IS_64_BIT),true) +BINDER32BIT := true +endif +endif + +# Create soong.variables with copies of makefile settings. Runs every build, +# but only updates soong.variables if it changes +SOONG_VARIABLES_TMP := $(SOONG_VARIABLES).$$$$ +$(SOONG_VARIABLES): FORCE + $(hide) mkdir -p $(dir $@) + $(hide) (\ + echo '{'; \ + echo ' "Make_suffix": "-$(TARGET_PRODUCT)",'; \ + echo ''; \ + echo ' "Platform_sdk_version": $(PLATFORM_SDK_VERSION),'; \ + echo ' "Unbundled_build": $(if $(TARGET_BUILD_APPS),true,false),'; \ + echo ' "Brillo": $(if $(BRILLO),true,false),'; \ + echo ' "Malloc_not_svelte": $(if $(filter true,$(MALLOC_SVELTE)),false,true),'; \ + echo ' "Allow_missing_dependencies": $(if $(TARGET_BUILD_APPS)$(filter true,$(SOONG_ALLOW_MISSING_DEPENDENCIES)),true,false),'; \ + echo ' "SanitizeHost": [$(if $(SANITIZE_HOST),"$(subst $(space),"$(comma)",$(SANITIZE_HOST))")],'; \ + echo ' "SanitizeDevice": [$(if $(SANITIZE_TARGET),"$(subst $(space),"$(comma)",$(SANITIZE_TARGET))")],'; \ + echo ' "SanitizeDeviceArch": [$(if $(SANITIZE_TARGET_ARCH),"$(subst $(space),"$(comma)",$(SANITIZE_TARGET_ARCH))")],'; \ + echo ' "HostStaticBinaries": $(if $(strip $(BUILD_HOST_static)),true,false),'; \ + echo ' "Cpusets": $(if $(strip $(ENABLE_CPUSETS)),true,false),'; \ + echo ' "Schedboost": $(if $(strip $(ENABLE_SCHEDBOOST)),true,false),'; \ + echo ' "Binder32bit": $(if $(BINDER32BIT),true,false),'; \ + echo ' "DevicePrefer32BitExecutables": $(if $(filter true,$(TARGET_PREFER_32_BIT_EXECUTABLES)),true,false),'; \ + echo ' "UseGoma": $(if $(filter-out false,$(USE_GOMA)),true,false),'; \ + echo ' "Debuggable": $(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),true,false),'; \ + echo ''; \ + echo ' "ClangTidy": $(if $(filter 1 true,$(WITH_TIDY)),true,false),'; \ + echo ' "TidyChecks": "$(WITH_TIDY_CHECKS)",'; \ + echo ''; \ + echo ' "DeviceName": "$(TARGET_DEVICE)",'; \ + echo ' "DeviceArch": "$(TARGET_ARCH)",'; \ + echo ' "DeviceArchVariant": "$(TARGET_ARCH_VARIANT)",'; \ + echo ' "DeviceCpuVariant": "$(TARGET_CPU_VARIANT)",'; \ + echo ' "DeviceAbi": ["$(TARGET_CPU_ABI)", "$(TARGET_CPU_ABI2)"],'; \ + echo ' "DeviceUsesClang": $(if $(USE_CLANG_PLATFORM_BUILD),$(USE_CLANG_PLATFORM_BUILD),false),'; \ + echo ''; \ + echo ' "DeviceSecondaryArch": "$(TARGET_2ND_ARCH)",'; \ + echo ' "DeviceSecondaryArchVariant": "$(TARGET_2ND_ARCH_VARIANT)",'; \ + echo ' "DeviceSecondaryCpuVariant": "$(TARGET_2ND_CPU_VARIANT)",'; \ + echo ' "DeviceSecondaryAbi": ["$(TARGET_2ND_CPU_ABI)", "$(TARGET_2ND_CPU_ABI2)"],'; \ + echo ''; \ + echo ' "HostArch": "$(HOST_ARCH)",'; \ + echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ + echo ''; \ + echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ + echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ + echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ + echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false)'; \ + echo '}') > $(SOONG_VARIABLES_TMP); \ + if ! cmp -s $(SOONG_VARIABLES_TMP) $(SOONG_VARIABLES); then \ + mv $(SOONG_VARIABLES_TMP) $(SOONG_VARIABLES); \ + else \ + rm $(SOONG_VARIABLES_TMP); \ + fi |