blob: 50bb56d4abe25dd3ef2651366e52788e4b9203b0 [file] [log] [blame]
Dan Willemsen3b4d17f2016-10-05 23:26:24 -07001ifeq ($(filter address,$(SANITIZE_HOST)),)
Colin Crossfacdca12016-04-19 15:32:22 -07002NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/bin/ninja
Dan Willemsen3b4d17f2016-10-05 23:26:24 -07003else
4NINJA ?= prebuilts/build-tools/$(HOST_PREBUILT_TAG)/asan/bin/ninja
5endif
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08006
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08007include $(BUILD_SYSTEM)/soong.mk
Colin Cross3b324cb2015-07-16 17:27:52 -07008
Colin Crossebf32c22015-09-29 21:37:40 -07009KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh
Ying Wang4a4a0bc2015-10-28 12:34:03 -070010
11# Modifier goals we don't need to pass to Ninja.
12NINJA_EXCLUDE_GOALS := showcommands all dist
13.PHONY : $(NINJA_EXCLUDE_GOALS)
14
15# A list of goals which affect parsing of makefiles and we need to pass to Kati.
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090016PARSE_TIME_MAKE_GOALS := \
17 $(PARSE_TIME_MAKE_GOALS) \
18 $(dont_bother_goals) \
Ying Wang4a4a0bc2015-10-28 12:34:03 -070019 all \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090020 APP-% \
21 DUMP_% \
22 ECLIPSE-% \
23 PRODUCT-% \
Alexey Polyudovccdc3112016-08-01 17:41:49 -070024 AUX-% \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090025 boottarball-nodeps \
Ari Hausman-Cohen746f4022016-02-29 13:08:49 -080026 brillo_tests \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090027 btnod \
28 build-art% \
29 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090030 clean-oat% \
31 continuous_instrumentation_tests \
32 continuous_native_tests \
33 cts \
34 custom_images \
35 deps-license \
36 dicttool_aosp \
37 dist \
38 dump-products \
39 dumpvar-% \
40 eng \
41 fusion \
42 oem_image \
Julien Desprezffc9c522016-03-05 12:05:49 +000043 old-cts \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090044 online-system-api-sdk-docs \
45 pdk \
46 platform \
47 platform-java \
48 product-graph \
49 samplecode \
50 sdk \
51 sdk_addon \
52 sdk_repo \
53 snod \
54 stnod \
55 systemimage-nodeps \
56 systemtarball-nodeps \
57 target-files-package \
58 test-art% \
59 user \
60 userdataimage \
61 userdebug \
62 valgrind-test-art% \
Julien Desprez12878432016-04-01 15:39:48 +010063 vts \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090064 win_sdk \
65 winsdk-tools
66
67-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070068
Ying Wang4a4a0bc2015-10-28 12:34:03 -070069# Any Android goals that need to be built.
Dan Willemsen1487f312016-03-08 11:12:40 -080070ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(CKATI) $(MAKEPARALLEL),\
Ying Wang4a4a0bc2015-10-28 12:34:03 -070071 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS)))
72# Goals we need to pass to Ninja.
73NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS))
74# Goals we need to pass to Kati.
75KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090076
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090077define replace_space_and_slash
78$(subst /,_,$(subst $(space),_,$(sort $1)))
79endef
80
Colin Crossebf32c22015-09-29 21:37:40 -070081KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070082ifneq ($(KATI_GOALS),)
83KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090084endif
85ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090086KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
87endif
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090088
Ying Wang127da9e2015-09-22 14:37:53 -070089my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070090my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
91ifneq ($(my_ninja_suffix_too_long),)
92# Replace the suffix with a checksum if it gets too long.
93my_checksum_suffix := $(KATI_NINJA_SUFFIX)
94KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
95endif
Ying Wang127da9e2015-09-22 14:37:53 -070096
Colin Crossebf32c22015-09-29 21:37:40 -070097KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
Colin Crossea209152015-11-09 14:21:12 -080098KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070099
100# Write out a file mapping checksum to the real suffix.
101ifneq ($(my_checksum_suffix),)
102my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
103$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
104 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
105endif
106
Colin Cross3b324cb2015-07-16 17:27:52 -0700107ifeq (,$(NINJA_STATUS))
Colin Crossb9dd2432016-05-31 12:38:04 -0700108NINJA_STATUS := [%p %f/%t]$(space)
Colin Cross3b324cb2015-07-16 17:27:52 -0700109endif
110
Dan Willemsen9a97ba72016-05-05 16:52:37 -0700111NINJA_EXTRA_ARGS :=
112
Ying Wangbb1da5e2015-07-28 17:57:45 -0700113ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Dan Willemsen9a97ba72016-05-05 16:52:37 -0700114NINJA_EXTRA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -0700115endif
116
Colin Crossa65f1ae2015-09-23 13:52:22 -0700117# Make multiple rules to generate the same target an error instead of
118# proceeding with undefined behavior.
Dan Willemsen9a97ba72016-05-05 16:52:37 -0700119NINJA_EXTRA_ARGS += -w dupbuild=err
Colin Crossa65f1ae2015-09-23 13:52:22 -0700120
Dan Willemsen937cef42016-08-27 18:29:08 -0700121ifneq ($(filter-out false,$(USE_GOMA)),)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700122KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900123# Ninja runs remote jobs (i.e., commands which contain gomacc) with
124# this parallelism. Note the parallelism of all other jobs is still
125# limited by the -j flag passed to GNU make.
126NINJA_REMOTE_NUM_JOBS ?= 500
Dan Willemsen9a97ba72016-05-05 16:52:37 -0700127NINJA_EXTRA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700128else
Colin Crossaf6c0712015-09-18 14:54:40 -0700129NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Dan Willemsen5ad9cca2016-09-08 17:08:31 -0700130
131# We never want Kati to see MAKEFLAGS, as forcefully overriding variables is
132# terrible. The variables in MAKEFLAGS are still available in the environment,
133# so if part of the build wants input from the user, it should be explicitly
134# checking for an environment variable or using ?=
135#
136# makeparallel already clears MAKEFLAGS, so it's not necessary in the GOMA case
137KATI_MAKEPARALLEL := MAKEFLAGS=
Colin Crossf7ca64f2015-09-06 00:35:21 -0700138endif
139
Dan Willemsen9a97ba72016-05-05 16:52:37 -0700140NINJA_ARGS += $(NINJA_EXTRA_ARGS)
141
Colin Cross3ebb2f72015-11-09 14:53:36 -0800142COMBINED_BUILD_NINJA := $(OUT_DIR)/combined$(KATI_NINJA_SUFFIX).ninja
143
Dan Willemsen2d12ce12016-03-10 15:03:41 -0800144$(COMBINED_BUILD_NINJA): $(KATI_BUILD_NINJA)
Colin Cross3ebb2f72015-11-09 14:53:36 -0800145 $(hide) echo "builddir = $(OUT_DIR)" > $(COMBINED_BUILD_NINJA)
Colin Cross5a5befb2016-08-31 09:35:32 -0700146 $(hide) echo "include $(KATI_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
147 $(hide) echo "include $(SOONG_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
Colin Cross3ebb2f72015-11-09 14:53:36 -0800148
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700149$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -0700150 @#empty
151
Colin Cross42470e92015-10-28 13:28:11 -0700152.PHONY: ninja_wrapper
Colin Cross3ebb2f72015-11-09 14:53:36 -0800153ninja_wrapper: $(COMBINED_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700154 @echo Starting build with ninja
Colin Crossa5471a62016-10-03 13:38:27 -0700155 +$(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 -0700156
Dan Willemsencc60f012016-03-22 14:44:17 -0700157# Dummy Android.mk and CleanSpec.mk files so that kati won't recurse into the
158# out directory
159DUMMY_OUT_MKS := $(OUT_DIR)/Android.mk $(OUT_DIR)/CleanSpec.mk
160$(DUMMY_OUT_MKS):
161 @mkdir -p $(dir $@)
162 $(hide) echo '# This file prevents findleaves.py from traversing this directory further' >$@
163
Will Drewryc13f9c92015-10-06 19:40:11 -0700164KATI_FIND_EMULATOR := --use_find_emulator
165ifeq ($(KATI_EMULATE_FIND),false)
166 KATI_FIND_EMULATOR :=
167endif
Dan Willemsencc60f012016-03-22 14:44:17 -0700168$(KATI_BUILD_NINJA): $(CKATI) $(MAKEPARALLEL) $(DUMMY_OUT_MKS) run_soong FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900169 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Dan Willemsen3773b452016-06-15 14:55:58 -0700170 +$(hide) $(KATI_MAKEPARALLEL) $(CKATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --no_ignore_dirty=$(SOONG_OUT_DIR)/%.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) SOONG_MAKEVARS_MK=$(SOONG_MAKEVARS_MK)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700171
Colin Cross3b324cb2015-07-16 17:27:52 -0700172.PHONY: FORCE
173FORCE: