ninja.mk revision cb31f040e304e7d7b2a08d3fd8eceb72c878c37e
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati 2MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel 3 4KATI_OUTPUT_PATTERNS := $(PRODUCT_OUT)/build%.ninja $(PRODUCT_OUT)/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 tests \ 11 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 56 57ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS)) 58EXTRA_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(filter-out $(ORIGINAL_MAKECMDGOALS),$(MAKECMDGOALS))) 59KATI_TARGETS := $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)) 60 61define replace_space_and_slash 62$(subst /,_,$(subst $(space),_,$(sort $1))) 63endef 64 65KATI_NINJA_SUFFIX := 66ifneq ($(KATI_TARGETS),) 67KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_TARGETS)) 68endif 69ifneq ($(ONE_SHOT_MAKEFILE),) 70KATI_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)) 74endif 75 76my_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 86KATI_BUILD_NINJA := $(PRODUCT_OUT)/build$(KATI_NINJA_SUFFIX).ninja 87KATI_NINJA_SH := $(PRODUCT_OUT)/ninja$(KATI_NINJA_SUFFIX).sh 88 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 96KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH) 97 98ifeq (,$(NINJA_STATUS)) 99NINJA_STATUS := [%p %s/%t]$(space) 100endif 101 102ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 103NINJA_ARGS += "-v" 104PHONY: showcommands 105showcommands: droid 106endif 107 108ifdef USE_GOMA 109KATI_MAKEPARALLEL := $(MAKEPARALLEL) 110# 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) 115else 116NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja 117endif 118 119ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS))) 120fastincremental droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja.intermediate 121 @#empty 122 123.INTERMEDIATE: ninja.intermediate 124ninja.intermediate: $(KATI_OUTPUTS) $(MAKEPARALLEL) 125 @echo Starting build with ninja 126 +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) -C $(TOP) $(NINJA_ARGS) $(ANDROID_TARGETS) 127else 128generateonly droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): $(KATI_OUTPUTS) 129 @#empty 130endif 131 132ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS))) 133KATI_FORCE := FORCE 134endif 135 136$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE) 137 138.INTERMEDIATE: kati.intermediate 139kati.intermediate: $(KATI) $(MAKEPARALLEL) 140 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 141 +$(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 $(KATI_TARGETS) --gen_all_phony_targets USE_NINJA=false 142 143KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 144KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 145# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 146ifeq ($(BUILD_OS),linux) 147KATI_LD += -static 148endif 149 150KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 151KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 152include build/kati/Makefile.ckati 153 154MAKEPARALLEL_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 165.PHONY: FORCE 166FORCE: 167