ninja.mk revision 88dc18a31952edcf2dfea737e3989f2112e5155f
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati 2MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel 3 4KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh 5NINJA_GOALS := fastincremental generateonly droid showcommands 6# A list of goals which affect parsing of make. 7PARSE_TIME_MAKE_GOALS := \ 8 $(PARSE_TIME_MAKE_GOALS) \ 9 $(dont_bother_goals) \ 10 APP-% \ 11 DUMP_% \ 12 ECLIPSE-% \ 13 PRODUCT-% \ 14 boottarball-nodeps \ 15 btnod \ 16 build-art% \ 17 build_kernel-nodeps \ 18 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 54 55ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS)) 56EXTRA_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(filter-out $(ORIGINAL_MAKECMDGOALS),$(MAKECMDGOALS))) 57KATI_TARGETS := $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)) 58 59define replace_space_and_slash 60$(subst /,_,$(subst $(space),_,$(sort $1))) 61endef 62 63KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT) 64ifneq ($(KATI_TARGETS),) 65KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS)) 66endif 67ifneq ($(ONE_SHOT_MAKEFILE),) 68KATI_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)) 72endif 73 74my_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 84KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja 85KATI_NINJA_SH := $(OUT_DIR)/ninja$(KATI_NINJA_SUFFIX).sh 86 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 94KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH) 95 96ifeq (,$(NINJA_STATUS)) 97NINJA_STATUS := [%p %s/%t]$(space) 98endif 99 100ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 101NINJA_ARGS += "-v" 102PHONY: showcommands 103showcommands: droid 104endif 105 106ifdef USE_GOMA 107KATI_MAKEPARALLEL := $(MAKEPARALLEL) 108# 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) 113else 114NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja 115endif 116 117ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS))) 118fastincremental droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja.intermediate 119 @#empty 120 121.INTERMEDIATE: ninja.intermediate 122ninja.intermediate: $(KATI_OUTPUTS) $(MAKEPARALLEL) 123 @echo Starting build with ninja 124 +$(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) 125else 126generateonly droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): $(KATI_OUTPUTS) 127 @#empty 128endif 129 130ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS))) 131KATI_FORCE := FORCE 132endif 133 134$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE) 135 136.INTERMEDIATE: kati.intermediate 137kati.intermediate: $(KATI) $(MAKEPARALLEL) 138 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 139 +$(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 140 141KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 142KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 143# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 144ifeq ($(BUILD_OS),linux) 145KATI_LD += -static 146endif 147 148KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 149KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 150include build/kati/Makefile.ckati 151 152MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 153MAKEPARALLEL_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 163.PHONY: FORCE 164FORCE: 165