From 3f60c4b6c0b9eb44fb4daf07f1703e2a452b2fb7 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 6 Jan 2016 16:00:00 -0800 Subject: [PATCH] Allow building kati & makeparallel with soong This uses far fewer hacks in order to build these host tools, but will require more libraries(libc++,etc) from unbundled and stripped down branches. Once this becomes the only option, all builds will happen after soong runs. Then the toolchain / global cflags information will be able to be moved from make to soong (and exported back to make). Change-Id: I270b1d92bcef28a96fbc3ec9910d9bd0c101ac0f --- core/ninja.mk | 15 ++++++++++++--- core/soong.mk | 8 +++++++- tools/makeparallel/Android.bp | 26 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 tools/makeparallel/Android.bp diff --git a/core/ninja.mk b/core/ninja.mk index 750aae5ca..2878514e6 100644 --- a/core/ninja.mk +++ b/core/ninja.mk @@ -1,6 +1,15 @@ +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 -NINJA ?= prebuilts/ninja/$(HOST_PREBUILT_TAG)/ninja +endif KATI_OUTPUT_PATTERNS := $(OUT_DIR)/build%.ninja $(OUT_DIR)/ninja%.sh @@ -119,8 +128,6 @@ NINJA_MAKEPARALLEL := $(MAKEPARALLEL) --ninja endif ifeq ($(USE_SOONG),true) -include $(BUILD_SYSTEM)/soong.mk - COMBINED_BUILD_NINJA := $(OUT_DIR)/combined$(KATI_NINJA_SUFFIX).ninja $(COMBINED_BUILD_NINJA): $(KATI_BUILD_NINJA) $(SOONG_ANDROID_MK) @@ -147,6 +154,7 @@ $(KATI_BUILD_NINJA): $(KATI) $(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) KATI_LD := $(CLANG_CXX) $(CLANG_HOST_GLOBAL_LDFLAGS) # Build static ckati. Unfortunately Mac OS X doesn't officially support static exectuables. @@ -168,6 +176,7 @@ endif MAKEPARALLEL_INTERMEDIATES_PATH := $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/makeparallel_intermediates MAKEPARALLEL_BIN_PATH := $(HOST_OUT_EXECUTABLES) include build/tools/makeparallel/Makefile +endif .PHONY: FORCE FORCE: diff --git a/core/soong.mk b/core/soong.mk index aab26de94..646c68ed4 100644 --- a/core/soong.mk +++ b/core/soong.mk @@ -4,6 +4,9 @@ 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)')") @@ -57,4 +60,7 @@ $(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) $(SOONG_BUILD_NINJA) $(NINJA_ARGS) + $(hide) $(SOONG) $(KATI) $(MAKEPARALLEL) $(NINJA_ARGS) + +$(KATI): $(SOONG_ANDROID_MK) +$(MAKEPARALLEL): $(SOONG_ANDROID_MK) diff --git a/tools/makeparallel/Android.bp b/tools/makeparallel/Android.bp new file mode 100644 index 000000000..cb818177a --- /dev/null +++ b/tools/makeparallel/Android.bp @@ -0,0 +1,26 @@ +// Copyright 2016 Google Inc. All rights reserved +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_binary_host { + name: "makeparallel", + srcs: [ + "makeparallel.cpp", + ], + cflags: ["-Wall", "-Werror"], + target: { + linux: { + host_ldlibs: ["-lrt", "-lpthread"], + }, + }, +}