blob: afdef7e69162a4b86215261a256c9029d62fa034 [file] [log] [blame]
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08001NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja
2
3ifeq ($(USE_SOONG),true)
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08004include $(BUILD_SYSTEM)/soong.mk
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08005endif
Colin Cross3b324cb2015-07-16 17:27:52 -07006
Colin Crossebf32c22015-09-29 21:37:40 -07007KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh
Ying Wang4a4a0bc2015-10-28 12:34:03 -07008
9# Modifier goals we don't need to pass to Ninja.
10NINJA_EXCLUDE_GOALS := showcommands all dist
11.PHONY : $(NINJA_EXCLUDE_GOALS)
12
13# A list of goals which affect parsing of makefiles and we need to pass to Kati.
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090014PARSE_TIME_MAKE_GOALS := \
15 $(PARSE_TIME_MAKE_GOALS) \
16 $(dont_bother_goals) \
Ying Wang4a4a0bc2015-10-28 12:34:03 -070017 all \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090018 APP-% \
19 DUMP_% \
20 ECLIPSE-% \
21 PRODUCT-% \
22 boottarball-nodeps \
Ari Hausman-Cohen746f4022016-02-29 13:08:49 -080023 brillo_tests \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090024 btnod \
25 build-art% \
26 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090027 clean-oat% \
28 continuous_instrumentation_tests \
29 continuous_native_tests \
30 cts \
31 custom_images \
32 deps-license \
33 dicttool_aosp \
34 dist \
35 dump-products \
36 dumpvar-% \
37 eng \
38 fusion \
39 oem_image \
40 online-system-api-sdk-docs \
41 pdk \
42 platform \
43 platform-java \
44 product-graph \
45 samplecode \
46 sdk \
47 sdk_addon \
48 sdk_repo \
49 snod \
50 stnod \
51 systemimage-nodeps \
52 systemtarball-nodeps \
53 target-files-package \
54 test-art% \
55 user \
56 userdataimage \
57 userdebug \
58 valgrind-test-art% \
59 win_sdk \
60 winsdk-tools
61
62-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070063
Ying Wang4a4a0bc2015-10-28 12:34:03 -070064# Any Android goals that need to be built.
Dan Willemsen1487f312016-03-08 11:12:40 -080065ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(CKATI) $(MAKEPARALLEL),\
Ying Wang4a4a0bc2015-10-28 12:34:03 -070066 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS)))
67# Goals we need to pass to Ninja.
68NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS))
69# Goals we need to pass to Kati.
70KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090071
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090072define replace_space_and_slash
73$(subst /,_,$(subst $(space),_,$(sort $1)))
74endef
75
Colin Crossebf32c22015-09-29 21:37:40 -070076KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070077ifneq ($(KATI_GOALS),)
78KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090079endif
80ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090081KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
82endif
83ifneq ($(BUILD_MODULES_IN_PATHS),)
84KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090085endif
86
Ying Wang127da9e2015-09-22 14:37:53 -070087my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070088my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
89ifneq ($(my_ninja_suffix_too_long),)
90# Replace the suffix with a checksum if it gets too long.
91my_checksum_suffix := $(KATI_NINJA_SUFFIX)
92KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
93endif
Ying Wang127da9e2015-09-22 14:37:53 -070094
Colin Crossebf32c22015-09-29 21:37:40 -070095KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
Colin Crossea209152015-11-09 14:21:12 -080096KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070097
98# Write out a file mapping checksum to the real suffix.
99ifneq ($(my_checksum_suffix),)
100my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
101$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
102 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
103endif
104
Colin Cross3b324cb2015-07-16 17:27:52 -0700105ifeq (,$(NINJA_STATUS))
106NINJA_STATUS := [%p %s/%t]$(space)
107endif
108
Ying Wangbb1da5e2015-07-28 17:57:45 -0700109ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700110NINJA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -0700111endif
112
Colin Crossa65f1ae2015-09-23 13:52:22 -0700113# Make multiple rules to generate the same target an error instead of
114# proceeding with undefined behavior.
115NINJA_ARGS += -w dupbuild=err
116
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900117ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700118KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900119# Ninja runs remote jobs (i.e., commands which contain gomacc) with
120# this parallelism. Note the parallelism of all other jobs is still
121# limited by the -j flag passed to GNU make.
122NINJA_REMOTE_NUM_JOBS ?= 500
123NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700124else
Colin Crossaf6c0712015-09-18 14:54:40 -0700125NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700126endif
127
Colin Cross3ebb2f72015-11-09 14:53:36 -0800128ifeq ($(USE_SOONG),true)
Colin Cross3ebb2f72015-11-09 14:53:36 -0800129COMBINED_BUILD_NINJA := $(OUT_DIR)/combined$(KATI_NINJA_SUFFIX).ninja
130
131$(COMBINED_BUILD_NINJA): $(KATI_BUILD_NINJA) $(SOONG_ANDROID_MK)
132 $(hide) echo "builddir = $(OUT_DIR)" > $(COMBINED_BUILD_NINJA)
133 $(hide) echo "subninja $(SOONG_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
134 $(hide) echo "subninja $(KATI_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
135else
136COMBINED_BUILD_NINJA := $(KATI_BUILD_NINJA)
137endif
138
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700139$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -0700140 @#empty
141
Colin Cross42470e92015-10-28 13:28:11 -0700142.PHONY: ninja_wrapper
Colin Cross3ebb2f72015-11-09 14:53:36 -0800143ninja_wrapper: $(COMBINED_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700144 @echo Starting build with ninja
Colin Cross3ebb2f72015-11-09 14:53:36 -0800145 +$(hide) export NINJA_STATUS="$(NINJA_STATUS)" && source $(KATI_ENV_SH) && $(NINJA_MAKEPARALLEL) $(NINJA) $(NINJA_GOALS) -C $(TOP) -f $(COMBINED_BUILD_NINJA) $(NINJA_ARGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700146
Will Drewryc13f9c92015-10-06 19:40:11 -0700147KATI_FIND_EMULATOR := --use_find_emulator
148ifeq ($(KATI_EMULATE_FIND),false)
149 KATI_FIND_EMULATOR :=
150endif
Dan Willemsen1487f312016-03-08 11:12:40 -0800151$(KATI_BUILD_NINJA): $(CKATI) $(MAKEPARALLEL) $(SOONG_ANDROID_MK) FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900152 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Dan Willemsen1487f312016-03-08 11:12:40 -0800153 +$(hide) $(KATI_MAKEPARALLEL) $(CKATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --no_ignore_dirty=$(SOONG_ANDROID_MK) --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)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700154
Colin Cross3b324cb2015-07-16 17:27:52 -0700155.PHONY: FORCE
156FORCE: