blob: 81298e52bce24717de3093a9eec5d149c1335130 [file] [log] [blame]
Colin Cross3b324cb2015-07-16 17:27:52 -07001KATI ?= $(HOST_OUT_EXECUTABLES)/ckati
Colin Crossf7ca64f2015-09-06 00:35:21 -07002MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel
Colin Cross3b324cb2015-07-16 17:27:52 -07003
Colin Crossebf32c22015-09-29 21:37:40 -07004KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh
Colin Cross3b324cb2015-07-16 17:27:52 -07005NINJA_GOALS := fastincremental generateonly droid showcommands
Shinichiro Hamajid762bca2015-09-04 14:38:37 +09006# A list of goals which affect parsing of make.
7PARSE_TIME_MAKE_GOALS := \
8 $(PARSE_TIME_MAKE_GOALS) \
9 $(dont_bother_goals) \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090010 APP-% \
11 DUMP_% \
12 ECLIPSE-% \
13 PRODUCT-% \
14 boottarball-nodeps \
15 btnod \
16 build-art% \
17 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090018 clean-oat% \
19 continuous_instrumentation_tests \
20 continuous_native_tests \
21 cts \
22 custom_images \
23 deps-license \
24 dicttool_aosp \
25 dist \
26 dump-products \
27 dumpvar-% \
28 eng \
29 fusion \
30 oem_image \
31 online-system-api-sdk-docs \
32 pdk \
33 platform \
34 platform-java \
35 product-graph \
36 samplecode \
37 sdk \
38 sdk_addon \
39 sdk_repo \
40 snod \
41 stnod \
42 systemimage-nodeps \
43 systemtarball-nodeps \
44 target-files-package \
45 test-art% \
46 user \
47 userdataimage \
48 userdebug \
49 valgrind-test-art% \
50 win_sdk \
51 winsdk-tools
52
53-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070054
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090055ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS))
Dan Willemsencb1bd112015-09-14 16:30:51 -070056EXTRA_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(filter-out $(ORIGINAL_MAKECMDGOALS),$(MAKECMDGOALS)))
Colin Cross52b697a2015-09-29 13:20:47 -070057KATI_TARGETS := $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090058
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090059define replace_space_and_slash
60$(subst /,_,$(subst $(space),_,$(sort $1)))
61endef
62
Colin Crossebf32c22015-09-29 21:37:40 -070063KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090064ifneq ($(KATI_TARGETS),)
65KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090066endif
67ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090068KATI_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))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090072endif
73
Ying Wang127da9e2015-09-22 14:37:53 -070074my_checksum_suffix :=
75ifneq ($(KATI_NINJA_SUFFIX),)
76my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
77ifneq ($(my_ninja_suffix_too_long),)
78# Replace the suffix with a checksum if it gets too long.
79my_checksum_suffix := $(KATI_NINJA_SUFFIX)
80KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
81endif
82endif
83
Colin Crossebf32c22015-09-29 21:37:40 -070084KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
85KATI_NINJA_SH := $(OUT_DIR)/ninja$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070086
87# Write out a file mapping checksum to the real suffix.
88ifneq ($(my_checksum_suffix),)
89my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
90$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
91 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
92endif
93
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090094KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH)
Colin Cross3b324cb2015-07-16 17:27:52 -070095
96ifeq (,$(NINJA_STATUS))
97NINJA_STATUS := [%p %s/%t]$(space)
98endif
99
Ying Wangbb1da5e2015-07-28 17:57:45 -0700100ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700101NINJA_ARGS += "-v"
102PHONY: showcommands
103showcommands: droid
104endif
105
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900106ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700107KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900108# Ninja runs remote jobs (i.e., commands which contain gomacc) with
109# this parallelism. Note the parallelism of all other jobs is still
110# limited by the -j flag passed to GNU make.
111NINJA_REMOTE_NUM_JOBS ?= 500
112NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700113else
Colin Crossaf6c0712015-09-18 14:54:40 -0700114NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700115endif
116
Ying Wangbb1da5e2015-07-28 17:57:45 -0700117ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS)))
Dan Willemsencb1bd112015-09-14 16:30:51 -0700118fastincremental droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja.intermediate
Colin Cross3b324cb2015-07-16 17:27:52 -0700119 @#empty
120
121.INTERMEDIATE: ninja.intermediate
Colin Crossf7ca64f2015-09-06 00:35:21 -0700122ninja.intermediate: $(KATI_OUTPUTS) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700123 @echo Starting build with ninja
Colin Cross88dc18a2015-10-05 15:12:08 -0700124 +$(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)
Colin Cross3b324cb2015-07-16 17:27:52 -0700125else
Dan Willemsencb1bd112015-09-14 16:30:51 -0700126generateonly droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): $(KATI_OUTPUTS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700127 @#empty
128endif
129
Ying Wangbb1da5e2015-07-28 17:57:45 -0700130ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700131KATI_FORCE := FORCE
132endif
133
134$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE)
135
136.INTERMEDIATE: kati.intermediate
Colin Crossf7ca64f2015-09-06 00:35:21 -0700137kati.intermediate: $(KATI) $(MAKEPARALLEL)
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900138 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Shinichiro Hamajiecea6012015-10-08 15:25:16 +0900139 +$(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 --use_find_emulator -f build/core/main.mk $(KATI_TARGETS) --gen_all_targets BUILDING_WITH_NINJA=true
Colin Cross3b324cb2015-07-16 17:27:52 -0700140
Dan Willemsen3ad35492015-09-22 16:52:58 -0700141KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700142KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700143# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
144ifeq ($(BUILD_OS),linux)
145KATI_LD += -static
146endif
147
Colin Cross3b324cb2015-07-16 17:27:52 -0700148KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
149KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
150include build/kati/Makefile.ckati
151
Colin Cross8f26a452015-09-29 21:54:33 -0700152MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700153MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
154# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables.
155ifeq ($(BUILD_OS),linux)
156MAKEPARALLEL_LD += -static
157endif
158
159MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates
160MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES)
161include build/tools/makeparallel/Makefile
162
Colin Cross3b324cb2015-07-16 17:27:52 -0700163.PHONY: FORCE
164FORCE: