.DEFAULT_GOAL := flat

SHELL := /bin/bash
WORK_DIR := unzip_boot

help:
	@echo "flat        : boot.subimg -> unzip_boot/*"
	@echo "boot.img    : unsigned boot image"
	@echo "boot.subimg : signed boot image"
	@echo "addon       : (recovery only) add additional tools"

.PHONY: flat
flat:
	rm -fr $(WORK_DIR)
	mkdir -p $(WORK_DIR)/root
	abootimg -x boot.subimg $(WORK_DIR)/bootimg.cfg $(this_kernel) $(this_ramdisk).gz
	gzip -c -d $(this_ramdisk).gz > $(this_ramdisk)
	rm $(this_ramdisk).gz
	cd $(WORK_DIR)/root && \
		cpio -i -F ../ramdisk.img
	@rm $(WORK_DIR)/ramdisk.img
	@echo && echo "===================================" && file $(WORK_DIR)/* && echo "==================================="
kernel_cmdline := "$(shell grep -Po '(?<=cmdline = ).*' $(WORK_DIR)/bootimg.cfg)"
this_root := $(WORK_DIR)/root
this_kernel := $(WORK_DIR)/kernel
this_ramdisk := $(WORK_DIR)/ramdisk.img
ifeq '$(TARGET_PRODUCT)' ''
$(warning NON-android)
this_verity_key := tools/security/verity
else
$(warning android)
this_verity_key := build/target/product/security/verity
endif

.INTERMEDIATE: $(this_ramdisk).gz boot.img
$(this_ramdisk).gz: $(this_root)
	mkbootfs $< | gzip > $@
boot.img: $(this_ramdisk).gz $(this_kernel)
	mkbootimg \
		--kernel $(this_kernel) \
		--ramdisk $(this_ramdisk).gz \
		--cmdline "$(shell echo $(kernel_cmdline))" \
		--base 0x01000000 \
		--output $@
boot.subimg: boot.img
	$(call signer,/boot,$<,$@)

define signer
	boot_signer $(1) $(2) $(this_verity_key).pk8 $(this_verity_key).x509.pem $(3)
endef

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
real_mkfile_path := $(shell readlink $(mkfile_path))

libs := libc.so libcrypto.so libcutils.so libm.so libselinux.so libstdc++.so libpcre.so liblog.so libnetutils.so libsysutils.so libutils.so libbacktrace.so libstlport.so libgccdemangle.so libunwind.so libunwind-ptrace.so
bins := toolbox sh linker netcfg logd logcat
addon: | unzip_boot/root/system/bin
addon: | unzip_boot/root/system/lib
addon: INITRC := unzip_boot/root/init.recovery.marvellberlin.rc
addon:
	#initrc
	echo "service console /system/bin/sh" > $(INITRC)
	echo "    console" >> $(INITRC)
	echo "    user root" >> $(INITRC)
	echo "    group root" >> $(INITRC)
	echo >> $(INITRC)
	echo "service logd /system/bin/logd" >> $(INITRC)
	echo "    socket logd stream 0666 logd logd" >> $(INITRC)
	echo "    socket logdr seqpacket 0666 logd logd" >> $(INITRC)
	echo "    socket logdw dgram 0222 logd logd" >> $(INITRC)
	echo "    seclabel u:r:logd:s0" >> $(INITRC)
	#recovery
	#cp out/target/product/$(TARGET_PRODUCT)/system/bin/recovery unzip_boot/root/sbin/
	#@cp -v out/target/product/$(TARGET_PRODUCT)/obj/EXECUTABLES/recovery_intermediates/recovery unzip_boot/root/sbin/
	#bin
	@$(foreach item,$(bins), \
	  cp -v out/target/product/$(TARGET_PRODUCT)/system/bin/$(item)   unzip_boot/root/system/bin/; $(newline))
	#lib
	@$(foreach item,$(libs), \
	  cp -v out/target/product/$(TARGET_PRODUCT)/system/lib/$(item)   unzip_boot/root/system/lib/; $(newline))
	#@cp -v out/target/product/$(TARGET_PRODUCT)/system/etc/sepolicy.recovery unzip_boot/root/sepolicy
	@cp -v out/target/product/$(TARGET_PRODUCT)/obj/ETC/sepolicy.recovery_intermediates/sepolicy.recovery unzip_boot/root/sepolicy


unzip_boot/root/system/bin:
	mkdir $@
unzip_boot/root/system/lib:
	mkdir $@

#service console /system/bin/sh
#    console
#    user root
#    group root