ninja.mk revision d762bcae259ca9e53f3ca4e784b2dab78c2f6c35
1KATI ?= $(HOST_OUT_EXECUTABLES)/ckati 2 3KATI_OUTPUT_PATTERNS := $(PRODUCT_OUT)/build%.ninja $(PRODUCT_OUT)/ninja%.sh 4NINJA_GOALS := fastincremental generateonly droid showcommands 5# A list of goals which affect parsing of make. 6PARSE_TIME_MAKE_GOALS := \ 7 $(PARSE_TIME_MAKE_GOALS) \ 8 $(dont_bother_goals) \ 9 %tests \ 10 APP-% \ 11 DUMP_% \ 12 ECLIPSE-% \ 13 PRODUCT-% \ 14 boottarball-nodeps \ 15 btnod \ 16 build-art% \ 17 build_kernel-nodeps \ 18 checkbuild \ 19 clean-oat% \ 20 continuous_instrumentation_tests \ 21 continuous_native_tests \ 22 cts \ 23 custom_images \ 24 deps-license \ 25 dicttool_aosp \ 26 dist \ 27 dump-products \ 28 dumpvar-% \ 29 eng \ 30 fusion \ 31 oem_image \ 32 online-system-api-sdk-docs \ 33 pdk \ 34 platform \ 35 platform-java \ 36 product-graph \ 37 samplecode \ 38 sdk \ 39 sdk_addon \ 40 sdk_repo \ 41 snod \ 42 stnod \ 43 systemimage-nodeps \ 44 systemtarball-nodeps \ 45 target-files-package \ 46 test-art% \ 47 user \ 48 userdataimage \ 49 userdebug \ 50 valgrind-test-art% \ 51 win_sdk \ 52 winsdk-tools 53 54-include vendor/google/build/ninja_config.mk 55 56ANDROID_TARGETS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(NINJA_GOALS),$(ORIGINAL_MAKECMDGOALS)) 57KATI_TARGETS := $(if $(filter $(PARSE_TIME_MAKE_GOALS),$(ANDROID_TARGETS)),$(ANDROID_TARGETS),) 58 59define replace_space_and_slash 60$(subst /,_,$(subst $(space),_,$(sort $1))) 61endef 62 63KATI_NINJA_SUFFIX := 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 74KATI_BUILD_NINJA := $(PRODUCT_OUT)/build$(KATI_NINJA_SUFFIX).ninja 75KATI_NINJA_SH := $(PRODUCT_OUT)/ninja$(KATI_NINJA_SUFFIX).sh 76KATI_OUTPUTS := $(KATI_BUILD_NINJA) $(KATI_NINJA_SH) 77 78ifeq (,$(NINJA_STATUS)) 79NINJA_STATUS := [%p %s/%t]$(space) 80endif 81 82ifneq (,$(filter showcommands,$(ORIGINAL_MAKECMDGOALS))) 83NINJA_ARGS += "-v" 84PHONY: showcommands 85showcommands: droid 86endif 87 88ifeq (,$(filter generateonly,$(ORIGINAL_MAKECMDGOALS))) 89fastincremental droid $(ANDROID_TARGETS): ninja.intermediate 90 @#empty 91 92.INTERMEDIATE: ninja.intermediate 93ninja.intermediate: $(KATI_OUTPUTS) 94 @echo Starting build with ninja 95 $(hide) PATH=prebuilts/ninja/$(HOST_PREBUILT_TAG)/:$$PATH NINJA_STATUS="$(NINJA_STATUS)" $(KATI_NINJA_SH) -C $(TOP) $(NINJA_ARGS) $(ANDROID_TARGETS) 96else 97generateonly droid $(ANDROID_TARGETS): $(KATI_OUTPUTS) 98 @#empty 99endif 100 101ifeq (,$(filter fastincremental,$(ORIGINAL_MAKECMDGOALS))) 102KATI_FORCE := FORCE 103endif 104 105$(KATI_OUTPUTS): kati.intermediate $(KATI_FORCE) 106 107.INTERMEDIATE: kati.intermediate 108kati.intermediate: $(KATI) 109 @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... 110 @#TODO: use separate ninja file for mm or single target build 111 $(hide) $(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 112 113KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CPPFLAGS) 114KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) 115# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. 116ifeq ($(BUILD_OS),linux) 117KATI_LD += -static 118endif 119 120KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates 121KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) 122include build/kati/Makefile.ckati 123 124.PHONY: FORCE 125FORCE: 126