ninja.mk revision b71d24931c7a18799249e3c7f7f6de20ac76cc75
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 76KATI_BUILD_NINJA := $(PRODUCT_OUT)/build$(KATI_NINJA_SUFFIX).ninja 77KATI_NINJA_SH := $(PRODUCT_OUT)/ninja$(KATI_NINJA_SUFFIX).sh 78KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH) 79 80ifeq (,$(NINJA_STATUS)) 81NINJA_STATUS := [%p %s/%t]$(space) 82endif 83 84ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 85NINJA_ARGS += "-v" 86PHONY: showcommands 87showcommands: droid 88endif 89 90ifdef KATI_REMOTE_NUM_JOBS_FLAG 91KATI_MAKEPARALLEL := $(MAKEPARALLEL) 92else 93NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja 94endif 95 96ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS))) 97fastincremental droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): ninja.intermediate 98 @#empty 99 100.INTERMEDIATE: ninja.intermediate 101ninja.intermediate: $(KATI_OUTPUTS) $(MAKEPARALLEL) 102 @echo Starting build with ninja 103 +$(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(NINJA_MAKEPARALLEL) $(KATI_NINJA_SH) -C $(TOP) $(NINJA_ARGS) $(ANDROID_TARGETS) 104else 105generateonly droid $(ANDROID_TARGETS) $(EXTRA_TARGETS): $(KATI_OUTPUTS) 106 @#empty 107endif 108 109ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS))) 110KATI_FORCE := FORCE 111endif 112 113$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE) 114 115.INTERMEDIATE: kati.intermediate 116kati.intermediate: $(KATI) $(MAKEPARALLEL) 117 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 118 @#TODO: use separate ninja file for mm or single target build 119 +$(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 $(KATI_REMOTE_NUM_JOBS_FLAG) -f build/core/main.mk $(or $(KATI_TARGETS),--gen_all_phony_targets) USE_NINJA=false 120 121KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CPPFLAGS) 122KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 123# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 124ifeq ($(BUILD_OS),linux) 125KATI_LD += -static 126endif 127 128KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 129KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 130include build/kati/Makefile.ckati 131 132MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CPPFLAGS) 133MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 134# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables. 135ifeq ($(BUILD_OS),linux) 136MAKEPARALLEL_LD += -static 137endif 138 139MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates 140MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES) 141include build/tools/makeparallel/Makefile 142 143.PHONY: FORCE 144FORCE: 145