#!/usr/bin/make -f

SHELL=/bin/bash

include /usr/share/dpkg/architecture.mk

# Bumping this up to >= GCC5 will require the replacing the pre-compiled
# liblto*.a binaries that we strip from our orig.tar.xz.
EDK2_TOOLCHAIN = GCC49
export $(EDK2_TOOLCHAIN)_AARCH64_PREFIX=aarch64-linux-gnu-
export $(EDK2_TOOLCHAIN)_ARM_PREFIX=arm-linux-gnueabihf-

ifeq ($(DEB_BUILD_ARCH),amd64)
	EDK2_BUILD_ARCH=X64
endif
ifeq ($(DEB_BUILD_ARCH),i386)
	EDK2_BUILD_ARCH=IA32
endif
ifeq ($(DEB_BUILD_ARCH),arm64)
	EDK2_BUILD_ARCH=AARCH64
endif

ifeq ($(DEB_HOST_ARCH),amd64)
	EDK2_HOST_ARCH=X64
endif
ifeq ($(DEB_HOST_ARCH),i386)
	EDK2_HOST_ARCH=IA32
endif

COMMON_FLAGS = -DHTTP_BOOT_ENABLE=TRUE -DSECURE_BOOT_ENABLE=TRUE
OVMF_FLAGS   = $(COMMON_FLAGS) -DFD_SIZE_2MB -DTPM2_ENABLE=TRUE
AAVMF_FLAGS  = $(COMMON_FLAGS)

# Clear variables used internally by the edk2 build system
undefine WORKSPACE
undefine ECP_SOURCE
undefine EDK_SOURCE
undefine EFI_SOURCE
undefine EDK_TOOLS_PATH
undefine CONF_PATH

ver := $(shell dpkg-parsechangelog | sed -n -e's/^Version: \(.*\)-[^-]\+/\1/p')

%:
	dh $@

override_dh_auto_build: build-qemu-efi-aarch64 build-qemu-efi-arm build-ovmf

setup-build:
	make -C BaseTools ARCH=$(EDK2_BUILD_ARCH)

build-ovmf: EDK2_ARCH_DIR=X64
build-ovmf: EDK2_HOST_ARCH=X64
build-ovmf: setup-build
	cd UefiCpuPkg/ResetVector/Vtf0 && python Build.py
	set -e; . ./edksetup.sh; \
		build -a $(EDK2_HOST_ARCH) \
			-t $(EDK2_TOOLCHAIN) \
			-p OvmfPkg/OvmfPkgX64.dsc \
			$(OVMF_FLAGS) -b RELEASE

build-qemu-efi: setup-build
	set -e; . ./edksetup.sh; \
		build -a $(EDK2_HOST_ARCH) \
			-t $(EDK2_TOOLCHAIN) \
			-p ArmVirtPkg/ArmVirtQemu.dsc \
			$(AAVMF_FLAGS) -b RELEASE
	dd if=/dev/zero of=Build/ArmVirtQemu-$(EDK2_HOST_ARCH)/RELEASE_$(EDK2_TOOLCHAIN)/FV/$(FW_NAME)_CODE.fd bs=1M seek=64 count=0
	dd if=Build/ArmVirtQemu-$(EDK2_HOST_ARCH)/RELEASE_$(EDK2_TOOLCHAIN)/FV/QEMU_EFI.fd of=Build/ArmVirtQemu-$(EDK2_HOST_ARCH)/RELEASE_$(EDK2_TOOLCHAIN)/FV/$(FW_NAME)_CODE.fd conv=notrunc
	dd if=/dev/zero of=Build/ArmVirtQemu-$(EDK2_HOST_ARCH)/RELEASE_$(EDK2_TOOLCHAIN)/FV/$(FW_NAME)_VARS.fd bs=1M seek=64 count=0

build-qemu-efi-aarch64:
	$(MAKE) -f debian/rules build-qemu-efi EDK2_ARCH_DIR=AArch64 EDK2_HOST_ARCH=AARCH64 FW_NAME=AAVMF

build-qemu-efi-arm:
	$(MAKE) -f debian/rules build-qemu-efi EDK2_ARCH_DIR=Arm EDK2_HOST_ARCH=ARM FW_NAME=AAVMF32

override_dh_auto_clean:
	set -e; \
	if [ -d BaseTools/Source/C/bin ]; then \
		. ./edksetup.sh; build clean; \
		make -C BaseTools clean; \
	fi
	rm -rf Conf/.cache Build .pc-post

get-orig-source:
	# Should be executed on a checkout of the upstream master branch,
	# with the debian/ directory manually copied in.
	git clone . edk2-$(ver)
	# Don't recurse, openssl will ring in MBs of stuff we don't need
	cd edk2-$(ver) && git submodule update --init
	find edk2-$(ver) -name .git | xargs rm -rf
	ln -s ../debian edk2-$(ver)
	# Remove unused embedded source, requested by Ubuntu security team
	rm -r edk2-$(ver)/BaseTools/Source/C/BrotliCompress
	# Remove known-binary files
	cd edk2-$(ver) && python3 ./debian/remove-binaries.py
	# Look for possible unknown binary files
	cd edk2-$(ver) && python3 ./debian/find-binaries.py
	rm edk2-$(ver)/debian
	tar Jcvf ../edk2_$(ver).orig.tar.xz edk2-$(ver)
	rm -rf edk2-$(ver)

.PHONY: setup-build build-ovmf build-qemu-efi
