blob: 2e8f3c8ec63fb6ecb9ced653db42957de6be6b59 [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
Ying Wang4a4a0bc2015-10-28 12:34:03 -07005
6# Modifier goals we don't need to pass to Ninja.
7NINJA_EXCLUDE_GOALS := showcommands all dist
8.PHONY : $(NINJA_EXCLUDE_GOALS)
9
10# A list of goals which affect parsing of makefiles and we need to pass to Kati.
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090011PARSE_TIME_MAKE_GOALS := \
12 $(PARSE_TIME_MAKE_GOALS) \
13 $(dont_bother_goals) \
Ying Wang4a4a0bc2015-10-28 12:34:03 -070014 all \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090015 APP-% \
16 DUMP_% \
17 ECLIPSE-% \
18 PRODUCT-% \
19 boottarball-nodeps \
20 btnod \
21 build-art% \
22 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090023 clean-oat% \
24 continuous_instrumentation_tests \
25 continuous_native_tests \
26 cts \
27 custom_images \
28 deps-license \
29 dicttool_aosp \
30 dist \
31 dump-products \
32 dumpvar-% \
33 eng \
34 fusion \
35 oem_image \
36 online-system-api-sdk-docs \
37 pdk \
38 platform \
39 platform-java \
40 product-graph \
41 samplecode \
42 sdk \
43 sdk_addon \
44 sdk_repo \
45 snod \
46 stnod \
47 systemimage-nodeps \
48 systemtarball-nodeps \
49 target-files-package \
50 test-art% \
51 user \
52 userdataimage \
53 userdebug \
54 valgrind-test-art% \
55 win_sdk \
56 winsdk-tools
57
58-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070059
Ying Wang4a4a0bc2015-10-28 12:34:03 -070060# Any Android goals that need to be built.
61ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(MAKEPARALLEL),\
62 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS)))
63# Goals we need to pass to Ninja.
64NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS))
65# Goals we need to pass to Kati.
66KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090067
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090068define replace_space_and_slash
69$(subst /,_,$(subst $(space),_,$(sort $1)))
70endef
71
Colin Crossebf32c22015-09-29 21:37:40 -070072KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070073ifneq ($(KATI_GOALS),)
74KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090075endif
76ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090077KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
78endif
79ifneq ($(BUILD_MODULES_IN_PATHS),)
80KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090081endif
82
Ying Wang127da9e2015-09-22 14:37:53 -070083my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070084my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
85ifneq ($(my_ninja_suffix_too_long),)
86# Replace the suffix with a checksum if it gets too long.
87my_checksum_suffix := $(KATI_NINJA_SUFFIX)
88KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
89endif
Ying Wang127da9e2015-09-22 14:37:53 -070090
Colin Crossebf32c22015-09-29 21:37:40 -070091KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
92KATI_NINJA_SH := $(OUT_DIR)/ninja$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070093
94# Write out a file mapping checksum to the real suffix.
95ifneq ($(my_checksum_suffix),)
96my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
97$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
98 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
99endif
100
Colin Cross3b324cb2015-07-16 17:27:52 -0700101ifeq (,$(NINJA_STATUS))
102NINJA_STATUS := [%p %s/%t]$(space)
103endif
104
Ying Wangbb1da5e2015-07-28 17:57:45 -0700105ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700106NINJA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -0700107endif
108
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900109ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700110KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900111# Ninja runs remote jobs (i.e., commands which contain gomacc) with
112# this parallelism. Note the parallelism of all other jobs is still
113# limited by the -j flag passed to GNU make.
114NINJA_REMOTE_NUM_JOBS ?= 500
115NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700116else
Colin Crossaf6c0712015-09-18 14:54:40 -0700117NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700118endif
119
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700120$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -0700121 @#empty
122
Colin Cross42470e92015-10-28 13:28:11 -0700123.PHONY: ninja_wrapper
124ninja_wrapper: $(KATI_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700125 @echo Starting build with ninja
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700126 +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) $(NINJA_GOALS) -C $(TOP) $(NINJA_ARGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700127
Will Drewryc13f9c92015-10-06 19:40:11 -0700128KATI_FIND_EMULATOR := --use_find_emulator
129ifeq ($(KATI_EMULATE_FIND),false)
130 KATI_FIND_EMULATOR :=
131endif
Colin Cross42470e92015-10-28 13:28:11 -0700132$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900133 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700134 +$(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 $(KATI_FIND_EMULATOR) -f build/core/main.mk $(KATI_GOALS) --gen_all_targets BUILDING_WITH_NINJA=true
Colin Cross3b324cb2015-07-16 17:27:52 -0700135
Dan Willemsen3ad35492015-09-22 16:52:58 -0700136KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700137KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700138# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
139ifeq ($(BUILD_OS),linux)
140KATI_LD += -static
141endif
142
Colin Cross3b324cb2015-07-16 17:27:52 -0700143KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
144KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
145include build/kati/Makefile.ckati
146
Colin Cross8f26a452015-09-29 21:54:33 -0700147MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700148MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
149# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables.
150ifeq ($(BUILD_OS),linux)
151MAKEPARALLEL_LD += -static
152endif
153
154MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates
155MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES)
156include build/tools/makeparallel/Makefile
157
Colin Cross3b324cb2015-07-16 17:27:52 -0700158.PHONY: FORCE
159FORCE: