ninja.mk revision d3701e9e967a7e1e97aa365af4c0080d3bad929e
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 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))) 57# The target "dist" changes its behavior depending whether other 58# targets are specified or not. See distdir.mk for detail. 59KATI_TARGETS := $(if $(filter dist,$(ANDROID_TARGETS)),$(ANDROID_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 BUILDING_WITH_NINJA=true 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