blob: af2ede0914047a2fcac761a1e23072aadde721b9 [file] [log] [blame]
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08001include $(BUILD_SYSTEM)/soong.mk
Colin Cross3b324cb2015-07-16 17:27:52 -07002
Ying Wang4a4a0bc2015-10-28 12:34:03 -07003# Modifier goals we don't need to pass to Ninja.
Ying Wang4a4a0bc2015-10-28 12:34:03 -07004.PHONY : $(NINJA_EXCLUDE_GOALS)
5
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +09006define replace_space_and_slash
7$(subst /,_,$(subst $(space),_,$(sort $1)))
8endef
9
Colin Crossebf32c22015-09-29 21:37:40 -070010KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070011ifneq ($(KATI_GOALS),)
12KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090013endif
14ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090015KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
16endif
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090017
Ying Wang127da9e2015-09-22 14:37:53 -070018my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070019my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
20ifneq ($(my_ninja_suffix_too_long),)
21# Replace the suffix with a checksum if it gets too long.
22my_checksum_suffix := $(KATI_NINJA_SUFFIX)
23KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
24endif
Ying Wang127da9e2015-09-22 14:37:53 -070025
Colin Crossebf32c22015-09-29 21:37:40 -070026KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
Colin Crossea209152015-11-09 14:21:12 -080027KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070028
29# Write out a file mapping checksum to the real suffix.
30ifneq ($(my_checksum_suffix),)
31my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
32$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
33 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
34endif
35
Colin Cross3b324cb2015-07-16 17:27:52 -070036ifeq (,$(NINJA_STATUS))
Colin Crossb9dd2432016-05-31 12:38:04 -070037NINJA_STATUS := [%p %f/%t]$(space)
Colin Cross3b324cb2015-07-16 17:27:52 -070038endif
39
Dan Willemsen9a97ba72016-05-05 16:52:37 -070040NINJA_EXTRA_ARGS :=
41
Ying Wangbb1da5e2015-07-28 17:57:45 -070042ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Dan Willemsen9a97ba72016-05-05 16:52:37 -070043NINJA_EXTRA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -070044endif
45
Colin Crossa65f1ae2015-09-23 13:52:22 -070046# Make multiple rules to generate the same target an error instead of
47# proceeding with undefined behavior.
Dan Willemsen9a97ba72016-05-05 16:52:37 -070048NINJA_EXTRA_ARGS += -w dupbuild=err
Colin Crossa65f1ae2015-09-23 13:52:22 -070049
Dan Willemsen937cef42016-08-27 18:29:08 -070050ifneq ($(filter-out false,$(USE_GOMA)),)
Colin Crossf7ca64f2015-09-06 00:35:21 -070051KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +090052# Ninja runs remote jobs (i.e., commands which contain gomacc) with
53# this parallelism. Note the parallelism of all other jobs is still
54# limited by the -j flag passed to GNU make.
55NINJA_REMOTE_NUM_JOBS ?= 500
Dan Willemsen9a97ba72016-05-05 16:52:37 -070056NINJA_EXTRA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -070057else
Colin Crossaf6c0712015-09-18 14:54:40 -070058NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Dan Willemsen5ad9cca2016-09-08 17:08:31 -070059
60# We never want Kati to see MAKEFLAGS, as forcefully overriding variables is
61# terrible. The variables in MAKEFLAGS are still available in the environment,
62# so if part of the build wants input from the user, it should be explicitly
63# checking for an environment variable or using ?=
64#
65# makeparallel already clears MAKEFLAGS, so it's not necessary in the GOMA case
66KATI_MAKEPARALLEL := MAKEFLAGS=
Colin Crossf7ca64f2015-09-06 00:35:21 -070067endif
68
Dan Willemsen9a97ba72016-05-05 16:52:37 -070069NINJA_ARGS += $(NINJA_EXTRA_ARGS)
70
Colin Cross3ebb2f72015-11-09 14:53:36 -080071COMBINED_BUILD_NINJA := $(OUT_DIR)/combined$(KATI_NINJA_SUFFIX).ninja
72
Dan Willemsend4b05042016-11-02 16:24:52 -070073$(COMBINED_BUILD_NINJA): $(KATI_BUILD_NINJA) FORCE
Colin Cross3ebb2f72015-11-09 14:53:36 -080074 $(hide) echo "builddir = $(OUT_DIR)" > $(COMBINED_BUILD_NINJA)
Colin Cross5a5befb2016-08-31 09:35:32 -070075 $(hide) echo "include $(KATI_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
76 $(hide) echo "include $(SOONG_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
Dan Willemsend4b05042016-11-02 16:24:52 -070077 $(hide) echo "build $(COMBINED_BUILD_NINJA): phony $(SOONG_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
Colin Cross3ebb2f72015-11-09 14:53:36 -080078
Ying Wang4a4a0bc2015-10-28 12:34:03 -070079$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -070080 @#empty
81
Colin Cross42470e92015-10-28 13:28:11 -070082.PHONY: ninja_wrapper
Colin Cross3ebb2f72015-11-09 14:53:36 -080083ninja_wrapper: $(COMBINED_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -070084 @echo Starting build with ninja
Colin Crossa5471a62016-10-03 13:38:27 -070085 +$(hide) export NINJA_STATUS="$(NINJA_STATUS)" && source $(KATI_ENV_SH) && exec $(NINJA_MAKEPARALLEL) $(NINJA) -d keepdepfile $(NINJA_GOALS) -C $(TOP) -f $(COMBINED_BUILD_NINJA) $(NINJA_ARGS)
Colin Cross3b324cb2015-07-16 17:27:52 -070086
Dan Willemsencc60f012016-03-22 14:44:17 -070087# Dummy Android.mk and CleanSpec.mk files so that kati won't recurse into the
88# out directory
89DUMMY_OUT_MKS := $(OUT_DIR)/Android.mk $(OUT_DIR)/CleanSpec.mk
90$(DUMMY_OUT_MKS):
91 @mkdir -p $(dir $@)
92 $(hide) echo '# This file prevents findleaves.py from traversing this directory further' >$@
93
Will Drewryc13f9c92015-10-06 19:40:11 -070094KATI_FIND_EMULATOR := --use_find_emulator
95ifeq ($(KATI_EMULATE_FIND),false)
96 KATI_FIND_EMULATOR :=
97endif
Dan Willemsencc60f012016-03-22 14:44:17 -070098$(KATI_BUILD_NINJA): $(CKATI) $(MAKEPARALLEL) $(DUMMY_OUT_MKS) run_soong FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090099 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Dan Willemsen584e4722016-09-09 23:18:22 -0700100 +$(hide) $(KATI_MAKEPARALLEL) $(CKATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --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 SOONG_ANDROID_MK=$(SOONG_ANDROID_MK) SOONG_MAKEVARS_MK=$(SOONG_MAKEVARS_MK)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700101
Colin Cross3b324cb2015-07-16 17:27:52 -0700102.PHONY: FORCE
103FORCE: