ninja.mk revision d762bcae259ca9e53f3ca4e784b2dab78c2f6c35
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati
2
3KATI_OUTPUT_PATTERNS := $(PRODUCT_OUT)/build%.ninja $(PRODUCT_OUT)/ninja%.sh
4NINJA_GOALS := fastincremental generateonly droid showcommands
5# A list of goals which affect parsing of make.
6PARSE_TIME_MAKE_GOALS := \
7	$(PARSE_TIME_MAKE_GOALS) \
8	$(dont_bother_goals) \
9	%tests \
10	APP-% \
11	DUMP_% \
12	ECLIPSE-% \
13	PRODUCT-% \
14	boottarball-nodeps \
15	btnod \
16	build-art% \
17	build_kernel-nodeps \
18	checkbuild \
19	clean-oat% \
20	continuous_instrumentation_tests \
21	continuous_native_tests \
22	cts \
23	custom_images \
24	deps-license \
25	dicttool_aosp \
26	dist \
27	dump-products \
28	dumpvar-% \
29	eng \
30	fusion \
31	oem_image \
32	online-system-api-sdk-docs \
33	pdk \
34	platform \
35	platform-java \
36	product-graph \
37	samplecode \
38	sdk \
39	sdk_addon \
40	sdk_repo \
41	snod \
42	stnod \
43	systemimage-nodeps \
44	systemtarball-nodeps \
45	target-files-package \
46	test-art% \
47	user \
48	userdataimage \
49	userdebug \
50	valgrind-test-art% \
51	win_sdk \
52	winsdk-tools
53
54-include vendor/google/build/ninja_config.mk
55
56ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS))
57KATI_TARGETS := $(if $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)),$(ANDROID_TARGETS),)
58
59define replace_space_and_slash
60$(subst /,_,$(subst $(space),_,$(sort $1)))
61endef
62
63KATI_NINJA_SUFFIX :=
64ifneq ($(KATI_TARGETS),)
65KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS))
66endif
67ifneq ($(ONE_SHOT_MAKEFILE),)
68KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
69endif
70ifneq ($(BUILD_MODULES_IN_PATHS),)
71KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
72endif
73
74KATI_BUILD_NINJA := $(PRODUCT_OUT)/build$(KATI_NINJA_SUFFIX).ninja
75KATI_NINJA_SH := $(PRODUCT_OUT)/ninja$(KATI_NINJA_SUFFIX).sh
76KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH)
77
78ifeq (,$(NINJA_STATUS))
79NINJA_STATUS := [%p %s/%t]$(space)
80endif
81
82ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
83NINJA_ARGS += "-v"
84PHONY: showcommands
85showcommands: droid
86endif
87
88ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS)))
89fastincremental droid $(ANDROID_TARGETS): ninja.intermediate
90	@#empty
91
92.INTERMEDIATE: ninja.intermediate
93ninja.intermediate: $(KATI_OUTPUTS)
94	@echo Starting build with ninja
95	$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(KATI_NINJA_SH) -C $(TOP) $(NINJA_ARGS) $(ANDROID_TARGETS)
96else
97generateonly droid $(ANDROID_TARGETS): $(KATI_OUTPUTS)
98	@#empty
99endif
100
101ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS)))
102KATI_FORCE := FORCE
103endif
104
105$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE)
106
107.INTERMEDIATE: kati.intermediate
108kati.intermediate: $(KATI)
109	@echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
110	@#TODO: use separate ninja file for mm or single target build
111	$(hide) $(KATI) --ninja --ninja_dir=$(PRODUCT_OUT) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --ignore_optional_include=$(OUT_DIR)/%.P --detect_android_echo --use_find_emulator $(KATI_REMOTE_NUM_JOBS_FLAG) -f build/core/main.mk $(or $(KATI_TARGETS),--gen_all_phony_targets) USE_NINJA=false
112
113KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CPPFLAGS)
114KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
115# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
116ifeq ($(BUILD_OS),linux)
117KATI_LD += -static
118endif
119
120KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
121KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
122include build/kati/Makefile.ckati
123
124.PHONY: FORCE
125FORCE:
126