#
# Copyright (c) 2018, 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.
#

#
#  This makefile contains rules for building QEMU for running Trusty.
#  It is expected that it will be included by the project that uses QEMU
#  and the caller will configure the following variables:
#
#      QEMU_ROOT       - Root of qemu project
#      QEMU_BUILD_BASE - location that will be used to store temp files and
#                        build results.
#      QEMU_ARCH       - qemu arch to build
#      QEMU_TARGET     - targets to build, use comma to separate targets
#                        if multiple targets are specified.
#
#  The following variable is returned to the caller:
#      QEMU_BIN        - resulting qemu image
#      QEMU_BUILD_BASE - location that will be used to store temp files and
#                        build results.
#
#

QEMU_BIN:=$(QEMU_BUILD_BASE)/$(QEMU_ARCH)-softmmu/qemu-system-$(QEMU_ARCH)
QEMU_MAKEFILE:=$(QEMU_BUILD_BASE)/Makefile

# Set of features disabled by the AOSP emulator. We don't need these features
# either, and we want minimal dependencies.
QEMU_AOSP_DISABLES := \
            --disable-attr \
            --disable-blobs \
            --disable-curl \
            --disable-curses \
            --disable-docs \
            --disable-glusterfs \
            --disable-gtk \
            --disable-guest-agent \
            --disable-libnfs \
            --disable-libiscsi \
            --disable-libssh2 \
            --disable-libusb \
            --disable-seccomp \
            --disable-spice \
            --disable-usb-redir \
            --disable-user \
            --disable-vde \
            --disable-vhdx \
            --disable-vhost-net \
            --disable-opengl \

# Warnings which pollute the build output and which can make us miss
# warnings in non-external code that we should be paying attention to.
QEMU_SUPPRESSED_WARNINGS := \
    -Wno-address-of-packed-member \
    -Wno-format-truncation \
    -Wno-stringop-truncation \
    -Wno-array-bounds \

$(QEMU_MAKEFILE): QEMU_ROOT:=$(QEMU_ROOT)
$(QEMU_MAKEFILE): QEMU_BUILD_BASE:=$(QEMU_BUILD_BASE)
$(QEMU_MAKEFILE): QEMU_TARGET:=$(QEMU_TARGET)
$(QEMU_MAKEFILE): QEMU_AOSP_DISABLES:=$(QEMU_AOSP_DISABLES)
$(QEMU_MAKEFILE): QEMU_SUPPRESSED_WARNINGS:=$(QEMU_SUPPRESSED_WARNINGS)
$(QEMU_MAKEFILE):
	mkdir -p $(QEMU_BUILD_BASE)
	#--with-git=true sets the "git" program to /bin/true - it essentially disables git
	#--disable-git-update may look like what we want, but it requests manual intervention, not disables git
	# TODO(b/148904400): Our prebuilt Clang can't build QEMU yet, and there is no
	# prebuilts GCC, i.e. currently we can only build QEMU with host toolchain. On
	# some hosts compiler will complain about stringop truncation.
	cd $(QEMU_BUILD_BASE) && $(abspath $(QEMU_ROOT)/configure) \
		--target-list=$(QEMU_TARGET) --with-git=true --disable-werror \
		--extra-cflags="$(QEMU_SUPPRESSED_WARNINGS)" \
		--disable-gcrypt --disable-vnc-png $(QEMU_AOSP_DISABLES) \
		--python=$(BUILDTOOLS_BINDIR)/py3-cmd

$(QEMU_BIN): QEMU_BUILD_BASE:=$(QEMU_BUILD_BASE)
$(QEMU_BIN): $(QEMU_MAKEFILE) .PHONY
	$(MAKE) -C $(QEMU_BUILD_BASE)

# Add QEMU_BIN to the list of project dependencies
EXTRA_BUILDDEPS += $(QEMU_BIN)

QEMU_ARCH:=
QEMU_ROOT:=
QEMU_TARGET:=
QEMU_AOSP_DISABLES:=
QEMU_SUPPRESSED_WARNINGS:=