# Folders
PXE ?= ./pxe
TFTP = ${PXE}/tftp
SMB = ${PXE}/smb

# Artifacts Linux
INITRAMFS = ${TFTP}/alpine-initrd.xz
KERNEL = ${TFTP}/linux
SHIM = ${TFTP}/shimx64.efi
GRUB = ${TFTP}/grubx64.efi

# Artifacts WinPE
BOOT_SDI = ${TFTP}/Boot/boot.sdi
BOOT_WIM = ${TFTP}/Boot/boot.wim
DUMPIT_EXE = ${SMB}/winpe/DumpIt.exe
WINPMEM_EXE = ${SMB}/winpe/winpmem.exe
SEARCH_VMK_EXE = ${SMB}/winpe/search-vmk.exe
DISLOCKER_METADATA_EXE = ${SMB}/winpe/dislocker-metadata.exe

all: linux winpe

linux: ${SHIM} ${GRUB} ${KERNEL} ${INITRAMFS}
	@echo "Building Linux based bitpixie exploitation components..."

${INITRAMFS} ${KERNEL}:
	@echo "Preparing initramfs and kernel..."
	linux/initramfs/bitpixie build
	linux/initramfs/bitpixie deploy

${SHIM} ${GRUB}:
	@echo "Preparing shim and GRUB..."
	docker run --platform linux/amd64 --rm -v "${CURDIR}/linux/bootloader:/build" -v "${PXE}":/mnt -w /root \
                alpine:3.20.3 "/build/download.sh"

winpe: ${BOOT_SDI} ${BOOT_WIM} ${WINPMEM_EXE} ${SEARCH_VMK_EXE} ${DISLOCKER_METADATA_EXE}
	@echo "Building WinPE based bitpixie exploitation components..."

${BOOT_SDI} ${BOOT_WIM}:
	@echo "Preparing Windows boot.{sdi,wim} files..."
	docker run --platform linux/amd64 --rm -v "${CURDIR}/winpe:/build" -v "${PXE}":/mnt -w /root \
                alpine:3.20.3 "/build/download-winpe.sh"

${WINPMEM_EXE}:
	@echo "Bulding $@..."
	docker run --platform linux/amd64 --rm -v "${CURDIR}/winpe:/build" -v "${PXE}":/mnt -w /root \
                alpine:3.20.3 "/build/build-winpmem.sh"

${DUMPIT_EXE}:
	@echo "Please download Magnet DumpIt for Windows"
	@echo "\n https://www.magnetforensics.com/resources/magnet-dumpit-for-windows/\n"
	@echo "And place it into $@\n"
	@exit 1

${SEARCH_VMK_EXE}:
	@echo "Bulding $@..."
	docker run --platform linux/amd64 --rm -v "${CURDIR}/search-vmk:/src" -v "${CURDIR}/winpe:/build" -v "${PXE}":/mnt -w /root \
                alpine:3.20.3 "/build/build-search-vmk.sh"

${DISLOCKER_METADATA_EXE}:
	@echo "Bulding $@..."
	docker run --platform linux/amd64 --rm -v "${CURDIR}/winpe:/build" -v "${PXE}":/mnt -w /root \
                alpine:3.20.3 "/build/build-dislocker-metadata.sh"

clean:
	@rm -f "${SHIM}" "${GRUB}" "${KERNEL}" "${INITRAMFS}"
	@rm -f "${BOOT_SDI}" "${BOOT_WIM}" "${WINPMEM_EXE}" "${SEARCH_VMK_EXE}" "${DISLOCKER_METADATA_EXE}"

.PHONY: all linux winpe clean
