diff --git a/core/distdir.mk b/core/distdir.mk index 24beddc53..51ec46efe 100644 --- a/core/distdir.mk +++ b/core/distdir.mk @@ -22,6 +22,11 @@ dist: ; dist_goal := $(strip $(filter dist,$(MAKECMDGOALS))) MAKECMDGOALS := $(strip $(filter-out dist,$(MAKECMDGOALS))) +ifeq (,$(strip $(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS)))) +# The commandline was something like "make dist" or "make dist showcommands". +# Add a dependency on a real target. +dist: $(DEFAULT_GOAL) +endif ifdef dist_goal diff --git a/core/main.mk b/core/main.mk index 7901bd82f..7896d381e 100644 --- a/core/main.mk +++ b/core/main.mk @@ -426,7 +426,7 @@ ifdef is_sdk_build sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS))) MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS))) -ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emulator_tests target-files-package,$(MAKECMDGOALS))),1) +ifneq ($(words $(sort $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emulator_tests target-files-package,$(MAKECMDGOALS)))),1) $(error The 'sdk' target may not be specified with any other targets) endif diff --git a/core/ninja.mk b/core/ninja.mk index 7a3166a3d..2e8f3c8ec 100644 --- a/core/ninja.mk +++ b/core/ninja.mk @@ -2,11 +2,16 @@ KATI ?= $(HOST_OUT_EXECUTABLES)/ckati MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh -NINJA_GOALS := droid showcommands -# A list of goals which affect parsing of make. + +# 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-% \ @@ -52,17 +57,21 @@ PARSE_TIME_MAKE_GOALS := \ -include vendor/google/build/ninja_config.mk -ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS)) -EXTRA_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(filter-out $(ORIGINAL_MAKECMDGOALS),$(MAKECMDGOALS))) -KATI_TARGETS := $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)) +# Any Android goals that need to be built. +ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(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 KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT) -ifneq ($(KATI_TARGETS),) -KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS)) +ifneq ($(KATI_GOALS),) +KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS)) endif ifneq ($(ONE_SHOT_MAKEFILE),) KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE)) @@ -72,14 +81,12 @@ KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$( endif my_checksum_suffix := -ifneq ($(KATI_NINJA_SUFFIX),) my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64)))) ifneq ($(my_ninja_suffix_too_long),) # Replace the suffix with a checksum if it gets too long. my_checksum_suffix := $(KATI_NINJA_SUFFIX) KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM))) endif -endif KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja KATI_NINJA_SH := $(OUT_DIR)/ninja$(KATI_NINJA_SUFFIX).sh @@ -97,8 +104,6 @@ endif ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) NINJA_ARGS += "-v" -PHONY: showcommands -showcommands: droid endif ifdef USE_GOMA @@ -112,13 +117,13 @@ else NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja endif -droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja_wrapper +$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper @#empty .PHONY: ninja_wrapper ninja_wrapper: $(KATI_BUILD_NINJA) $(MAKEPARALLEL) @echo Starting build with ninja - +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) $(filter-out dist,$(ANDROID_TARGETS)) -C $(TOP) $(NINJA_ARGS) + +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) $(NINJA_GOALS) -C $(TOP) $(NINJA_ARGS) KATI_FIND_EMULATOR := --use_find_emulator ifeq ($(KATI_EMULATE_FIND),false) @@ -126,7 +131,7 @@ ifeq ($(KATI_EMULATE_FIND),false) endif $(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) FORCE @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... - +$(hide) $(KATI_MAKEPARALLEL) $(KATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --ignore_optional_include=$(OUT_DIR)/%.P --detect_android_echo $(KATI_FIND_EMULATOR) -f build/core/main.mk $(KATI_TARGETS) --gen_all_targets BUILDING_WITH_NINJA=true + +$(hide) $(KATI_MAKEPARALLEL) $(KATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --ignore_optional_include=$(OUT_DIR)/%.P --detect_android_echo $(KATI_FIND_EMULATOR) -f build/core/main.mk $(KATI_GOALS) --gen_all_targets BUILDING_WITH_NINJA=true KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)