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