ninja.mk revision c13f9c952dafb5a59ce5ae039a599e83a9622b83
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati 2MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel 3 4KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh 5NINJA_GOALS := 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 94ifeq (,$(NINJA_STATUS)) 95NINJA_STATUS := [%p %s/%t]$(space) 96endif 97 98ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 99NINJA_ARGS += "-v" 100PHONY: showcommands 101showcommands: droid 102endif 103 104ifdef USE_GOMA 105KATI_MAKEPARALLEL := $(MAKEPARALLEL) 106# Ninja runs remote jobs (i.e., commands which contain gomacc) with 107# this parallelism. Note the parallelism of all other jobs is still 108# limited by the -j flag passed to GNU make. 109NINJA_REMOTE_NUM_JOBS ?= 500 110NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS) 111else 112NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja 113endif 114 115droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja_wrapper 116 @#empty 117 118.PHONY: ninja_wrapper 119ninja_wrapper: $(KATI_BUILD_NINJA) $(MAKEPARALLEL) 120 @echo Starting build with ninja 121 +$(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) 122 123KATI_FIND_EMULATOR := --use_find_emulator 124ifeq ($(KATI_EMULATE_FIND),false) 125 KATI_FIND_EMULATOR := 126endif 127$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) FORCE 128 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 129 +$(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_TARGETS) --gen_all_targets BUILDING_WITH_NINJA=true 130 131KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 132KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 133# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 134ifeq ($(BUILD_OS),linux) 135KATI_LD += -static 136endif 137 138KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 139KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 140include build/kati/Makefile.ckati 141 142MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 143MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 144# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables. 145ifeq ($(BUILD_OS),linux) 146MAKEPARALLEL_LD += -static 147endif 148 149MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates 150MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES) 151include build/tools/makeparallel/Makefile 152 153.PHONY: FORCE 154FORCE: 155