# SPDX-License-Identifier: GPL-2.0-only

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk

define Build/boot-img
	$(RM) -rf $@.bootdir
	mkdir -p $@.bootdir/boot

	$(CP) $@.scr $@.bootdir/boot/boot.scr
	$(CP) $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@.bootdir/boot/$(DEVICE_DTB)
	$(CP) $(IMAGE_KERNEL) $@.bootdir/boot/uImage

	genext2fs --block-size $(BLOCKSIZE:%k=%Ki) \
		--size-in-blocks $$((1024 * $(CONFIG_TARGET_KERNEL_PARTSIZE))) \
		--root $@.bootdir $@.boot

	# convert it to revision 1 - needed for u-boot ext2load
	$(STAGING_DIR_HOST)/bin/tune2fs -O filetype $@.boot
	# Ignore errors because file system was intentionally broken with tune2fs
	-$(STAGING_DIR_HOST)/bin/e2fsck -pDf $@.boot > /dev/null
endef

define Build/boot-script
	$(STAGING_DIR_HOST)/bin/mkimage -A powerpc -T script -C none -n "$(PROFILE) Boot Script" \
		-d mbl_boot.scr \
		$@.scr
endef

define Build/export-dtb
	cp $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@
endef

define Build/MuImage-initramfs
	rm -rf $@.fakerd $@.new

	dd if=/dev/zero of=$@.fakerd bs=32 count=1 conv=sync

	# Netgear used an old uboot that doesn't have FIT support.
	# So we are stuck with either a full ext2/4 fs in a initrd.
	# ... or we try to make the "multi" image approach to work
	# for us.
	#
	# Sadly, the "multi" image has to consists of three
	# "fixed" parts in the following "fixed" order:
	# 1. The kernel which is in $@
	# 2. The (fake) initrd which is in $@.fakerd
	# 3. The device tree binary which is in $@.dtb
	#
	# Now, given that we use the function for the kernel which
	# already has a initramfs image inside, we still have to
	# add a "fake" initrd (which a mkimage header) in the second
	# part of the legacy multi image. Since we need to put the
	# device tree stuff into part 3.

	-$(STAGING_DIR_HOST)/bin/mkimage -A $(LINUX_KARCH) -O linux -T multi -C $(1) \
		-a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY) -n '$(BOARD_NAME) initramfs' \
		-d $@:$@.fakerd:$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@.new
	mv $@.new $@
	rm -rf $@.fakerd
endef

define Build/prepend-dtb
	cat "$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb" "$@" > "$@.new"
	mv "$@.new" "$@"
endef

define Image/cpiogz
	( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9n >$(KDIR_TMP)/$(IMG_PREFIX)-rootfs.cpio.gz )
endef

define Device/Default
  PROFILES := Default
  KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
  DEVICE_DTS :=
  KERNEL_ENTRY := 0x00000000
  KERNEL_LOADADDR := 0x00000000
  DEVICE_DTS_DIR := ../dts
  DEVICE_DTS = $(subst _,-,$(1))
endef

include $(SUBTARGET).mk

$(eval $(call BuildImage))
