blob: 9d0ff9a70b2791c26f0d8e7a3f117db85af32a6d [file] [log] [blame]
Dan Willemsen3f60c4b2016-01-06 16:00:00 -08001NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja
2
3ifeq ($(USE_SOONG),true)
4USE_SOONG_FOR_KATI := true
5endif
6
7ifeq ($(USE_SOONG_FOR_KATI),true)
8include $(BUILD_SYSTEM)/soong.mk
9else
Colin Cross3b324cb2015-07-16 17:27:52 -070010KATI ?= $(HOST_OUT_EXECUTABLES)/ckati
Colin Crossf7ca64f2015-09-06 00:35:21 -070011MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel
Dan Willemsen3f60c4b2016-01-06 16:00:00 -080012endif
Colin Cross3b324cb2015-07-16 17:27:52 -070013
Colin Crossebf32c22015-09-29 21:37:40 -070014KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh
Ying Wang4a4a0bc2015-10-28 12:34:03 -070015
16# Modifier goals we don't need to pass to Ninja.
17NINJA_EXCLUDE_GOALS := showcommands all dist
18.PHONY : $(NINJA_EXCLUDE_GOALS)
19
20# A list of goals which affect parsing of makefiles and we need to pass to Kati.
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090021PARSE_TIME_MAKE_GOALS := \
22 $(PARSE_TIME_MAKE_GOALS) \
23 $(dont_bother_goals) \
Ying Wang4a4a0bc2015-10-28 12:34:03 -070024 all \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090025 APP-% \
26 DUMP_% \
27 ECLIPSE-% \
28 PRODUCT-% \
29 boottarball-nodeps \
30 btnod \
31 build-art% \
32 build_kernel-nodeps \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090033 clean-oat% \
34 continuous_instrumentation_tests \
35 continuous_native_tests \
36 cts \
37 custom_images \
38 deps-license \
39 dicttool_aosp \
40 dist \
41 dump-products \
42 dumpvar-% \
43 eng \
44 fusion \
45 oem_image \
Julien Desprezffc9c522016-03-05 12:05:49 +000046 old-cts \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090047 online-system-api-sdk-docs \
48 pdk \
49 platform \
50 platform-java \
51 product-graph \
52 samplecode \
53 sdk \
54 sdk_addon \
55 sdk_repo \
56 snod \
57 stnod \
58 systemimage-nodeps \
59 systemtarball-nodeps \
60 target-files-package \
61 test-art% \
62 user \
63 userdataimage \
64 userdebug \
65 valgrind-test-art% \
Julien Desprez12878432016-04-01 15:39:48 +010066 vts \
Shinichiro Hamajid762bca2015-09-04 14:38:37 +090067 win_sdk \
68 winsdk-tools
69
70-include vendor/google/build/ninja_config.mk
Colin Cross3b324cb2015-07-16 17:27:52 -070071
Ying Wang4a4a0bc2015-10-28 12:34:03 -070072# Any Android goals that need to be built.
73ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(MAKEPARALLEL),\
74 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS)))
75# Goals we need to pass to Ninja.
76NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS))
77# Goals we need to pass to Kati.
78KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090079
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090080define replace_space_and_slash
81$(subst /,_,$(subst $(space),_,$(sort $1)))
82endef
83
Colin Crossebf32c22015-09-29 21:37:40 -070084KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT)
Ying Wang4a4a0bc2015-10-28 12:34:03 -070085ifneq ($(KATI_GOALS),)
86KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090087endif
88ifneq ($(ONE_SHOT_MAKEFILE),)
Shinichiro Hamaji909e7f42015-09-04 11:41:33 +090089KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE))
90endif
91ifneq ($(BUILD_MODULES_IN_PATHS),)
92KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS))
Shinichiro Hamajibfd01872015-09-01 14:24:18 +090093endif
94
Ying Wang127da9e2015-09-22 14:37:53 -070095my_checksum_suffix :=
Ying Wang127da9e2015-09-22 14:37:53 -070096my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64))))
97ifneq ($(my_ninja_suffix_too_long),)
98# Replace the suffix with a checksum if it gets too long.
99my_checksum_suffix := $(KATI_NINJA_SUFFIX)
100KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM)))
101endif
Ying Wang127da9e2015-09-22 14:37:53 -0700102
Colin Crossebf32c22015-09-29 21:37:40 -0700103KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja
Colin Crossea209152015-11-09 14:21:12 -0800104KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh
Ying Wang127da9e2015-09-22 14:37:53 -0700105
106# Write out a file mapping checksum to the real suffix.
107ifneq ($(my_checksum_suffix),)
108my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf
109$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \
110 echo $(my_checksum_suffix) > $(my_ninja_suffix_file))
111endif
112
Colin Cross3b324cb2015-07-16 17:27:52 -0700113ifeq (,$(NINJA_STATUS))
114NINJA_STATUS := [%p %s/%t]$(space)
115endif
116
Ying Wangbb1da5e2015-07-28 17:57:45 -0700117ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS)))
Colin Cross3b324cb2015-07-16 17:27:52 -0700118NINJA_ARGS += "-v"
Colin Cross3b324cb2015-07-16 17:27:52 -0700119endif
120
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900121ifdef USE_GOMA
Colin Crossf7ca64f2015-09-06 00:35:21 -0700122KATI_MAKEPARALLEL := $(MAKEPARALLEL)
Shinichiro Hamajic1cba692015-09-24 16:22:44 +0900123# Ninja runs remote jobs (i.e., commands which contain gomacc) with
124# this parallelism. Note the parallelism of all other jobs is still
125# limited by the -j flag passed to GNU make.
126NINJA_REMOTE_NUM_JOBS ?= 500
127NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700128else
Colin Crossaf6c0712015-09-18 14:54:40 -0700129NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja
Colin Crossf7ca64f2015-09-06 00:35:21 -0700130endif
131
Colin Cross3ebb2f72015-11-09 14:53:36 -0800132ifeq ($(USE_SOONG),true)
Colin Cross3ebb2f72015-11-09 14:53:36 -0800133COMBINED_BUILD_NINJA := $(OUT_DIR)/combined$(KATI_NINJA_SUFFIX).ninja
134
135$(COMBINED_BUILD_NINJA): $(KATI_BUILD_NINJA) $(SOONG_ANDROID_MK)
136 $(hide) echo "builddir = $(OUT_DIR)" > $(COMBINED_BUILD_NINJA)
137 $(hide) echo "subninja $(SOONG_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
138 $(hide) echo "subninja $(KATI_BUILD_NINJA)" >> $(COMBINED_BUILD_NINJA)
139else
140COMBINED_BUILD_NINJA := $(KATI_BUILD_NINJA)
141endif
142
Ying Wang4a4a0bc2015-10-28 12:34:03 -0700143$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper
Colin Cross3b324cb2015-07-16 17:27:52 -0700144 @#empty
145
Colin Cross42470e92015-10-28 13:28:11 -0700146.PHONY: ninja_wrapper
Colin Cross3ebb2f72015-11-09 14:53:36 -0800147ninja_wrapper: $(COMBINED_BUILD_NINJA) $(MAKEPARALLEL)
Colin Cross3b324cb2015-07-16 17:27:52 -0700148 @echo Starting build with ninja
Colin Cross3ebb2f72015-11-09 14:53:36 -0800149 +$(hide) export NINJA_STATUS="$(NINJA_STATUS)" && source $(KATI_ENV_SH) && $(NINJA_MAKEPARALLEL) $(NINJA) $(NINJA_GOALS) -C $(TOP) -f $(COMBINED_BUILD_NINJA) $(NINJA_ARGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700150
Dan Willemsenae186382016-03-22 14:44:17 -0700151# Dummy Android.mk and CleanSpec.mk files so that kati won't recurse into the
152# out directory
153DUMMY_OUT_MKS := $(OUT_DIR)/Android.mk $(OUT_DIR)/CleanSpec.mk
154$(DUMMY_OUT_MKS):
155 @mkdir -p $(dir $@)
156 $(hide) echo '# This file prevents findleaves.py from traversing this directory further' >$@
157
Will Drewryc13f9c92015-10-06 19:40:11 -0700158KATI_FIND_EMULATOR := --use_find_emulator
159ifeq ($(KATI_EMULATE_FIND),false)
160 KATI_FIND_EMULATOR :=
161endif
Dan Willemsenae186382016-03-22 14:44:17 -0700162$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) $(DUMMY_OUT_MKS) $(SOONG_ANDROID_MK) FORCE
Shinichiro Hamajibfd01872015-09-01 14:24:18 +0900163 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja...
Colin Cross3ebb2f72015-11-09 14:53:36 -0800164 +$(hide) $(KATI_MAKEPARALLEL) $(KATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --no_ignore_dirty=$(SOONG_ANDROID_MK) --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 SOONG_ANDROID_MK=$(SOONG_ANDROID_MK)
Colin Cross3b324cb2015-07-16 17:27:52 -0700165
Dan Willemsen3f60c4b2016-01-06 16:00:00 -0800166ifneq ($(USE_SOONG_FOR_KATI),true)
Dan Willemsen3ad35492015-09-22 16:52:58 -0700167KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Cross3b324cb2015-07-16 17:27:52 -0700168KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700169# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables.
170ifeq ($(BUILD_OS),linux)
Shinichiro Hamajia73d4292016-02-26 16:58:13 +0900171# We need everything in libpthread.a otherwise C++11's threading library will be disabled.
172KATI_LD += -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -ldl
Ying Wang0a0e6ea2015-08-03 18:15:43 -0700173endif
174
Colin Cross3b324cb2015-07-16 17:27:52 -0700175KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates
176KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES)
177include build/kati/Makefile.ckati
178
Colin Cross8f26a452015-09-29 21:54:33 -0700179MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS)
Colin Crossf7ca64f2015-09-06 00:35:21 -0700180MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS)
181# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables.
182ifeq ($(BUILD_OS),linux)
183MAKEPARALLEL_LD += -static
184endif
185
186MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates
187MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES)
188include build/tools/makeparallel/Makefile
Dan Willemsen3f60c4b2016-01-06 16:00:00 -0800189endif
Colin Crossf7ca64f2015-09-06 00:35:21 -0700190
Colin Cross3b324cb2015-07-16 17:27:52 -0700191.PHONY: FORCE
192FORCE: