From 1487f31d8343998e4410c94c3451f9d10298128d Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Tue, 8 Mar 2016 11:12:40 -0800 Subject: [PATCH] Use hermetic ckati/makeparallel prebuilts Currently, we're building against the native host version of libc++ and other headers. Instead, use prebuilts of ckati/makeparallel built with Soong against the included libc++ and sysroot. Building ckati / makeparallel doesn't work well in unbundled branches that don't have all of the libc++ dependencies to do successful host builds. KATI is default variable defined when running under Kati, don't use it for other purposes. Use CKATI instead. Bug: 27533820 Change-Id: I82d66f5e34e3341a3cee4c5c83cd1d9a54d057ff --- core/config.mk | 11 ++++++++--- core/ninja.mk | 38 +++----------------------------------- core/soong.mk | 8 +------- 3 files changed, 12 insertions(+), 45 deletions(-) diff --git a/core/config.mk b/core/config.mk index 021a26e92..85c850a20 100644 --- a/core/config.mk +++ b/core/config.mk @@ -442,6 +442,8 @@ endif # # Tools that are prebuilts for TARGET_BUILD_APPS # +prebuilt_sdk_tools := prebuilts/sdk/tools +prebuilt_sdk_tools_bin := $(prebuilt_sdk_tools)/$(HOST_OS)/bin ACP := $(HOST_OUT_EXECUTABLES)/acp AIDL := $(HOST_OUT_EXECUTABLES)/aidl @@ -455,13 +457,14 @@ BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat DX := $(HOST_OUT_EXECUTABLES)/dx MAINDEXCLASSES := $(HOST_OUT_EXECUTABLES)/mainDexClasses +# Always use prebuilts for ckati and makeparallel +CKATI := $(prebuilt_sdk_tools_bin)/ckati +MAKEPARALLEL := $(prebuilt_sdk_tools_bin)/makeparallel + USE_PREBUILT_SDK_TOOLS_IN_PLACE := true # Override the definitions above for unbundled and PDK builds ifneq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK))) -prebuilt_sdk_tools := prebuilts/sdk/tools -prebuilt_sdk_tools_bin := $(prebuilt_sdk_tools)/$(HOST_OS)/bin - ACP := $(prebuilt_sdk_tools_bin)/acp AIDL := $(prebuilt_sdk_tools_bin)/aidl AAPT := $(prebuilt_sdk_tools_bin)/aapt @@ -479,6 +482,8 @@ LLVM_RS_CC := $(prebuilt_sdk_tools_bin)/llvm-rs-cc BCC_COMPAT := $(prebuilt_sdk_tools_bin)/bcc_compat endif # TARGET_BUILD_PDK endif # TARGET_BUILD_APPS || TARGET_BUILD_PDK +prebuilt_sdk_tools := +prebuilt_sdk_tools_bin := # --------------------------------------------------------------- diff --git a/core/ninja.mk b/core/ninja.mk index ef627c80d..afdef7e69 100644 --- a/core/ninja.mk +++ b/core/ninja.mk @@ -1,14 +1,7 @@ NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja ifeq ($(USE_SOONG),true) -USE_SOONG_FOR_KATI := true -endif - -ifeq ($(USE_SOONG_FOR_KATI),true) include $(BUILD_SYSTEM)/soong.mk -else -KATI ?= $(HOST_OUT_EXECUTABLES)/ckati -MAKEPARALLEL ?= $(HOST_OUT_EXECUTABLES)/makeparallel endif KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh @@ -69,7 +62,7 @@ PARSE_TIME_MAKE_GOALS := \ -include vendor/google/build/ninja_config.mk # Any Android goals that need to be built. -ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(KATI) $(MAKEPARALLEL),\ +ANDROID_GOALS := $(filter-out $(KATI_OUTPUT_PATTERNS) $(CKATI) $(MAKEPARALLEL),\ $(sort $(ORIGINAL_MAKECMDGOALS) $(MAKECMDGOALS))) # Goals we need to pass to Ninja. NINJA_GOALS := $(filter-out $(NINJA_EXCLUDE_GOALS), $(ANDROID_GOALS)) @@ -155,34 +148,9 @@ KATI_FIND_EMULATOR := --use_find_emulator ifeq ($(KATI_EMULATE_FIND),false) KATI_FIND_EMULATOR := endif -$(KATI_BUILD_NINJA): $(KATI) $(MAKEPARALLEL) $(SOONG_ANDROID_MK) FORCE +$(KATI_BUILD_NINJA): $(CKATI) $(MAKEPARALLEL) $(SOONG_ANDROID_MK) FORCE @echo Running kati to generate build$(KATI_NINJA_SUFFIX).ninja... - +$(hide) $(KATI_MAKEPARALLEL) $(KATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --no_ignore_dirty=$(SOONG_ANDROID_MK) --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 SOONG_ANDROID_MK=$(SOONG_ANDROID_MK) - -ifneq ($(USE_SOONG_FOR_KATI),true) -KATI_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) $(HOST_SYSTEMCPP_CPPFLAGS) -KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) $(HOST_SYSTEMCPP_LDFLAGS) -# Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. -ifeq ($(BUILD_OS),linux) -# We need everything in libpthread.a otherwise C++11's threading library will be disabled. -KATI_LD += -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -ldl -endif - -KATI_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/ckati_intermediates -KATI_BIN_PATH := $(HOST_OUT_EXECUTABLES) -include build/kati/Makefile.ckati - -MAKEPARALLEL_CXX := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_CFLAGS) $(CLANG_HOST_GLOBAL_CPPFLAGS) $(HOST_SYSTEMCPP_CPPFLAGS) -MAKEPARALLEL_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) $(HOST_SYSTEMCPP_LDFLAGS) -# Build static makeparallel. Unfortunately Mac OS X doesn't officially support static exectuables. -ifeq ($(BUILD_OS),linux) -MAKEPARALLEL_LD += -static -endif - -MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates -MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES) -include build/tools/makeparallel/Makefile -endif + +$(hide) $(KATI_MAKEPARALLEL) $(CKATI) --ninja --ninja_dir=$(OUT_DIR) --ninja_suffix=$(KATI_NINJA_SUFFIX) --regen --ignore_dirty=$(OUT_DIR)/% --no_ignore_dirty=$(SOONG_ANDROID_MK) --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 SOONG_ANDROID_MK=$(SOONG_ANDROID_MK) .PHONY: FORCE FORCE: diff --git a/core/soong.mk b/core/soong.mk index f48e15e9a..176c15949 100644 --- a/core/soong.mk +++ b/core/soong.mk @@ -4,9 +4,6 @@ SOONG_BUILD_NINJA := $(SOONG_OUT_DIR)/build.ninja SOONG_ANDROID_MK := $(SOONG_OUT_DIR)/Android.mk SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.variables SOONG_IN_MAKE := $(SOONG_OUT_DIR)/.soong.in_make -SOONG_HOST_EXECUTABLES := $(SOONG_OUT_DIR)/host/$(HOST_PREBUILT_TAG)/bin -KATI := $(SOONG_HOST_EXECUTABLES)/ckati -MAKEPARALLEL := $(SOONG_HOST_EXECUTABLES)/makeparallel ifeq (,$(filter /%,$(SOONG_OUT_DIR))) SOONG_TOP_RELPATH := $(shell python -c "import os; print os.path.relpath('$(TOP)', '$(SOONG_OUT_DIR)')") @@ -63,7 +60,4 @@ $(SOONG_IN_MAKE): # Build an Android.mk listing all soong outputs as prebuilts $(SOONG_ANDROID_MK): $(SOONG) $(SOONG_VARIABLES) $(SOONG_IN_MAKE) FORCE - $(hide) $(SOONG) $(KATI) $(MAKEPARALLEL) $(NINJA_ARGS) - -$(KATI): $(SOONG_ANDROID_MK) -$(MAKEPARALLEL): $(SOONG_ANDROID_MK) + $(hide) $(SOONG) $(SOONG_BUILD_NINJA) $(NINJA_ARGS) -- 2.11.0