ninja.mk revision ea20915b3076e3997a9b2b6dd3c4cf45731106ff
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati 2MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel 3NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja 4 5KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh 6 7# Modifier goals we don't need to pass to Ninja. 8NINJA_EXCLUDE_GOALS := showcommands all dist 9.PHONY : $(NINJA_EXCLUDE_GOALS) 10 11# A list of goals which affect parsing of makefiles and we need to pass to Kati. 12PARSE_TIME_MAKE_GOALS := \ 13 $(PARSE_TIME_MAKE_GOALS) \ 14 $(dont_bother_goals) \ 15 all \ 16 APP-% \ 17 DUMP_% \ 18 ECLIPSE-% \ 19 PRODUCT-% \ 20 boottarball-nodeps \ 21 btnod \ 22 build-art% \ 23 build_kernel-nodeps \ 24 clean-oat% \ 25 continuous_instrumentation_tests \ 26 continuous_native_tests \ 27 cts \ 28 custom_images \ 29 deps-license \ 30 dicttool_aosp \ 31 dist \ 32 dump-products \ 33 dumpvar-% \ 34 eng \ 35 fusion \ 36 oem_image \ 37 online-system-api-sdk-docs \ 38 pdk \ 39 platform \ 40 platform-java \ 41 product-graph \ 42 samplecode \ 43 sdk \ 44 sdk_addon \ 45 sdk_repo \ 46 snod \ 47 stnod \ 48 systemimage-nodeps \ 49 systemtarball-nodeps \ 50 target-files-package \ 51 test-art% \ 52 user \ 53 userdataimage \ 54 userdebug \ 55 valgrind-test-art% \ 56 win_sdk \ 57 winsdk-tools 58 59-include vendor/google/build/ninja_config.mk 60 61# Any Android goals that need to be built. 62ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(MAKEPARALLEL),\ 63 $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS))) 64# Goals we need to pass to Ninja. 65NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS)) 66# Goals we need to pass to Kati. 67KATI_GOALS := $(filter $(PARSE_TIME_MAKE_GOALS), $(ANDROID_GOALS)) 68 69define replace_space_and_slash 70$(subst /,_,$(subst $(space),_,$(sort $1))) 71endef 72 73KATI_NINJA_SUFFIX := -$(TARGET_PRODUCT) 74ifneq ($(KATI_GOALS),) 75KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-$(call replace_space_and_slash,$(KATI_GOALS)) 76endif 77ifneq ($(ONE_SHOT_MAKEFILE),) 78KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmm-$(call replace_space_and_slash,$(ONE_SHOT_MAKEFILE)) 79endif 80ifneq ($(BUILD_MODULES_IN_PATHS),) 81KATI_NINJA_SUFFIX := $(KATI_NINJA_SUFFIX)-mmma-$(call replace_space_and_slash,$(BUILD_MODULES_IN_PATHS)) 82endif 83 84my_checksum_suffix := 85my_ninja_suffix_too_long := $(filter 1, $(shell v='$(KATI_NINJA_SUFFIX)' && echo $$(($${$(pound)v} > 64)))) 86ifneq ($(my_ninja_suffix_too_long),) 87# Replace the suffix with a checksum if it gets too long. 88my_checksum_suffix := $(KATI_NINJA_SUFFIX) 89KATI_NINJA_SUFFIX := -$(word 1, $(shell echo $(my_checksum_suffix) | $(MD5SUM))) 90endif 91 92KATI_BUILD_NINJA := $(OUT_DIR)/build$(KATI_NINJA_SUFFIX).ninja 93KATI_ENV_SH := $(OUT_DIR)/env$(KATI_NINJA_SUFFIX).sh 94 95# Write out a file mapping checksum to the real suffix. 96ifneq ($(my_checksum_suffix),) 97my_ninja_suffix_file := $(basename $(KATI_BUILD_NINJA)).suf 98$(shell mkdir -p $(dir $(my_ninja_suffix_file)) && \ 99 echo $(my_checksum_suffix) > $(my_ninja_suffix_file)) 100endif 101 102ifeq (,$(NINJA_STATUS)) 103NINJA_STATUS := [%p %s/%t]$(space) 104endif 105 106ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 107NINJA_ARGS += "-v" 108endif 109 110ifdef USE_GOMA 111KATI_MAKEPARALLEL := $(MAKEPARALLEL) 112# Ninja runs remote jobs (i.e., commands which contain gomacc) with 113# this parallelism. Note the parallelism of all other jobs is still 114# limited by the -j flag passed to GNU make. 115NINJA_REMOTE_NUM_JOBS ?= 500 116NINJA_ARGS += -j$(NINJA_REMOTE_NUM_JOBS) 117else 118NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja 119endif 120 121$(sort $(DEFAULT_GOAL) $(ANDROID_GOALS)) : ninja_wrapper 122 @#empty 123 124.PHONY: ninja_wrapper 125ninja_wrapper: $(KATI_BUILD_NINJA) $(MAKEPARALLEL) 126 @echo Starting build with ninja 127 +$(hide) export NINJA_STATUS="$(NINJA_STATUS)" && source $(KATI_ENV_SH) && $(NINJA_MAKEPARALLEL) $(NINJA) $(NINJA_GOALS) -C $(TOP) -f $(KATI_BUILD_NINJA) $(NINJA_ARGS) 128 129KATI_FIND_EMULATOR := --use_find_emulator 130ifeq ($(KATI_EMULATE_FIND),false) 131 KATI_FIND_EMULATOR := 132endif 133$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) FORCE 134 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 135 +$(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_GOALS) --gen_all_targets BUILDING_WITH_NINJA=true 136 137KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 138KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 139# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 140ifeq ($(BUILD_OS),linux) 141KATI_LD += -static 142endif 143 144KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 145KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 146include build/kati/Makefile.ckati 147 148MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) 149MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 150# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables. 151ifeq ($(BUILD_OS),linux) 152MAKEPARALLEL_LD += -static 153endif 154 155MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates 156MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES) 157include build/tools/makeparallel/Makefile 158 159.PHONY: FORCE 160FORCE: 161