blob: 862ed804c8b4283684cd470983fb2765492e4e5f [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 Crossea209152015-11-09 14:21:12 -08003NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja
Colin Cross3b324cb2015-07-16 17:27:52 -07004
Colin Crossebf32c22015-09-29 21:37:40 -07005KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh
Ying Wang4a4a0bc2015-10-28 12:34:03 -07006
7# Modifier goals we don't need to pass to Ninja.
8NINJA_EXCLUDE_GOALS := showcommands all dist
9.PHONY : $(NINJA_EXCLUDE_GOALS)
10
11# A list of goals which affect parsing of makefiles and we need to pass to Kati.
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090012PARSE_TIME_MAKE_GOALS := \
13 $(PARSE_TIME_MAKE_GOALS) \
14 $(dont_bother_goals) \
Ying Wang4a4a0bc2015-10-28 12:34:03 -070015 all \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090016 APP-% \
17 DUMP_% \
18 ECLIPSE-% \
19 PRODUCT-% \
20 boottarball-nodeps \
21 btnod \
22 build-art% \
23 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090024 clean-oat% \
25 continuous_instrumentation_tests \
26 continuous_native_tests \
27 cts \
28 custom_images \
29 deps-license \
30 dicttool_aosp \
31 dist \
32 dump-products \
33 dumpvar-% \
34 eng \
35 fusion \
36 oem_image \
37 online-system-api-sdk-docs \
38 pdk \
39 platform \
40 platform-java \
41 product-graph \
42 samplecode \
43 sdk \
44 sdk_addon \
45 sdk_repo \
46 snod \
47 stnod \
48 systemimage-nodeps \
49 systemtarball-nodeps \
50 target-files-package \
51 test-art% \
52 user \
53 userdataimage \
54 userdebug \
55 valgrind-test-art% \
56 win_sdk \
57 winsdk-tools
58
59-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070060
Ying Wang4a4a0bc2015-10-28 12:34:03 -070061# Any Android goals that need to be built.
62ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(MAKEPARALLEL),\
63 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS)))
64# Goals we need to pass to Ninja.
65NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS))
66# Goals we need to pass to Kati.
67KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090068
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090069define replace_space_and_slash
70$(subst /,_,$(subst $(space),_,$(sort $1)))
71endef
72
Colin Crossebf32c22015-09-29 21:37:40 -070073KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070074ifneq ($(KATI_GOALS),)
75KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090076endif
77ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090078KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
79endif
80ifneq ($(BUILD_MODULES_IN_PATHS),)
81KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090082endif
83
Ying Wang127da9e2015-09-22 14:37:53 -070084my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070085my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
86ifneq ($(my_ninja_suffix_too_long),)
87# Replace the suffix with a checksum if it gets too long.
88my_checksum_suffix := $(KATI_NINJA_SUFFIX)
89KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
90endif
Ying Wang127da9e2015-09-22 14:37:53 -070091
Colin Crossebf32c22015-09-29 21:37:40 -070092KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
Colin Crossea209152015-11-09 14:21:12 -080093KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -070094
95# Write out a file mapping checksum to the real suffix.
96ifneq ($(my_checksum_suffix),)
97my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
98$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
99 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
100endif
101
Colin Cross3b324cb2015-07-16 17:27:52 -0700102ifeq (,$(NINJA_STATUS))
103NINJA_STATUS := [%p %s/%t]$(space)
104endif
105
Ying Wangbb1da5e2015-07-28 17:57:45 -0700106ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700107NINJA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -0700108endif
109
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900110ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700111KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900112# Ninja runs remote jobs (i.e., commands which contain gomacc) with
113# this parallelism. Note the parallelism of all other jobs is still
114# limited by the -j flag passed to GNU make.
115NINJA_REMOTE_NUM_JOBS ?= 500
116NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700117else
Colin Crossaf6c0712015-09-18 14:54:40 -0700118NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700119endif
120
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700121$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -0700122 @#empty
123
Colin Cross42470e92015-10-28 13:28:11 -0700124.PHONY: ninja_wrapper
125ninja_wrapper: $(KATI_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700126 @echo Starting build with ninja
Colin Crossea209152015-11-09 14:21:12 -0800127 +$(hide) export NINJA_STATUS="$(NINJA_STATUS)" && source $(KATI_ENV_SH) && $(NINJA_MAKEPARALLEL) $(NINJA) $(NINJA_GOALS) -C $(TOP) -f $(KATI_BUILD_NINJA) $(NINJA_ARGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700128
Will Drewryc13f9c92015-10-06 19:40:11 -0700129KATI_FIND_EMULATOR := --use_find_emulator
130ifeq ($(KATI_EMULATE_FIND),false)
131 KATI_FIND_EMULATOR :=
132endif
Colin Cross42470e92015-10-28 13:28:11 -0700133$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900134 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700135 +$(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 -0700136
Dan Willemsen3ad35492015-09-22 16:52:58 -0700137KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700138KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700139# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
140ifeq ($(BUILD_OS),linux)
141KATI_LD += -static
142endif
143
Colin Cross3b324cb2015-07-16 17:27:52 -0700144KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
145KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
146include build/kati/Makefile.ckati
147
Colin Cross8f26a452015-09-29 21:54:33 -0700148MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700149MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
150# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables.
151ifeq ($(BUILD_OS),linux)
152MAKEPARALLEL_LD += -static
153endif
154
155MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates
156MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES)
157include build/tools/makeparallel/Makefile
158
Colin Cross3b324cb2015-07-16 17:27:52 -0700159.PHONY: FORCE
160FORCE: