blob: ee72087983b338638e241a7e0503177b556c13e6 [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
Shinichiro Hamajibfd01872015-09-01 14:24:18 +09004KATI_OUTPUT_PATTERNS := $(PRODUCT_OUT)/build%.ninja $(PRODUCT_OUT)/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) \
Ying Wangce2843f2015-09-24 11:34:46 -070010 tests \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090011 APP-% \
12 DUMP_% \
13 ECLIPSE-% \
14 PRODUCT-% \
15 boottarball-nodeps \
16 btnod \
17 build-art% \
18 build_kernel-nodeps \
19 checkbuild \
20 clean-oat% \
21 continuous_instrumentation_tests \
22 continuous_native_tests \
23 cts \
24 custom_images \
25 deps-license \
26 dicttool_aosp \
27 dist \
28 dump-products \
29 dumpvar-% \
30 eng \
31 fusion \
32 oem_image \
33 online-system-api-sdk-docs \
34 pdk \
35 platform \
36 platform-java \
37 product-graph \
38 samplecode \
39 sdk \
40 sdk_addon \
41 sdk_repo \
42 snod \
43 stnod \
44 systemimage-nodeps \
45 systemtarball-nodeps \
46 target-files-package \
47 test-art% \
48 user \
49 userdataimage \
50 userdebug \
51 valgrind-test-art% \
52 win_sdk \
53 winsdk-tools
54
55-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070056
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090057ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS))
Dan Willemsencb1bd112015-09-14 16:30:51 -070058EXTRA_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(filter-out $(ORIGINAL_MAKECMDGOALS),$(MAKECMDGOALS)))
Shinichiro Hamaji5ff665d2015-09-25 14:20:42 +090059KATI_TARGETS := $(if $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)),$(ANDROID_TARGETS),)
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090060
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090061define replace_space_and_slash
62$(subst /,_,$(subst $(space),_,$(sort $1)))
63endef
64
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090065KATI_NINJA_SUFFIX :=
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090066ifneq ($(KATI_TARGETS),)
67KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090068endif
69ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090070KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
71endif
72ifneq ($(BUILD_MODULES_IN_PATHS),)
73KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090074endif
75
Ying Wang127da9e2015-09-22 14:37:53 -070076my_checksum_suffix :=
77ifneq ($(KATI_NINJA_SUFFIX),)
78my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
79ifneq ($(my_ninja_suffix_too_long),)
80# Replace the suffix with a checksum if it gets too long.
81my_checksum_suffix := $(KATI_NINJA_SUFFIX)
82KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
83endif
84endif
85
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090086KATI_BUILD_NINJA := $(PRODUCT_OUT)/build$(KATI_NINJA_SUFFIX).ninja
87KATI_NINJA_SH := $(PRODUCT_OUT)/ninja$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070088
89# Write out a file mapping checksum to the real suffix.
90ifneq ($(my_checksum_suffix),)
91my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
92$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
93 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
94endif
95
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090096KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH)
Colin Cross3b324cb2015-07-16 17:27:52 -070097
98ifeq (,$(NINJA_STATUS))
99NINJA_STATUS := [%p %s/%t]$(space)
100endif
101
Ying Wangbb1da5e2015-07-28 17:57:45 -0700102ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700103NINJA_ARGS += "-v"
104PHONY: showcommands
105showcommands: droid
106endif
107
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900108ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700109KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900110# Ninja runs remote jobs (i.e., commands which contain gomacc) with
111# this parallelism. Note the parallelism of all other jobs is still
112# limited by the -j flag passed to GNU make.
113NINJA_REMOTE_NUM_JOBS ?= 500
114NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700115else
Colin Crossaf6c0712015-09-18 14:54:40 -0700116NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700117endif
118
Ying Wangbb1da5e2015-07-28 17:57:45 -0700119ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS)))
Dan Willemsencb1bd112015-09-14 16:30:51 -0700120fastincremental droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja.intermediate
Colin Cross3b324cb2015-07-16 17:27:52 -0700121 @#empty
122
123.INTERMEDIATE: ninja.intermediate
Colin Crossf7ca64f2015-09-06 00:35:21 -0700124ninja.intermediate: $(KATI_OUTPUTS) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700125 @echo Starting build with ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700126 +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) -C $(TOP) $(NINJA_ARGS) $(ANDROID_TARGETS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700127else
Dan Willemsencb1bd112015-09-14 16:30:51 -0700128generateonly droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): $(KATI_OUTPUTS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700129 @#empty
130endif
131
Ying Wangbb1da5e2015-07-28 17:57:45 -0700132ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700133KATI_FORCE := FORCE
134endif
135
136$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE)
137
138.INTERMEDIATE: kati.intermediate
Colin Crossf7ca64f2015-09-06 00:35:21 -0700139kati.intermediate: $(KATI) $(MAKEPARALLEL)
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900140 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Shinichiro Hamaji5ff665d2015-09-25 14:20:42 +0900141 +$(hide) $(KATI_MAKEPARALLEL) $(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 -f build/core/main.mk $(or $(KATI_TARGETS),--gen_all_phony_targets) USE_NINJA=false
Colin Cross3b324cb2015-07-16 17:27:52 -0700142
Dan Willemsen3ad35492015-09-22 16:52:58 -0700143KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700144KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700145# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
146ifeq ($(BUILD_OS),linux)
147KATI_LD += -static
148endif
149
Colin Cross3b324cb2015-07-16 17:27:52 -0700150KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
151KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
152include build/kati/Makefile.ckati
153
Colin Crossf7ca64f2015-09-06 00:35:21 -0700154MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CPPFLAGS)
155MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
156# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables.
157ifeq ($(BUILD_OS),linux)
158MAKEPARALLEL_LD += -static
159endif
160
161MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates
162MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES)
163include build/tools/makeparallel/Makefile
164
Colin Cross3b324cb2015-07-16 17:27:52 -0700165.PHONY: FORCE
166FORCE: