VERSION=0.0.2 SYSLINUX_VERSION=6.03 KERNEL_VERSION=6.1.11 TARGET=./target INITRAMFS=${TARGET}/initramfs ROOTFS=${TARGET}/rootfs ISO=${TARGET}/rex.iso default_target: iso core: lib @echo Building Core @$(MAKE) -C core/ lib: @echo Building Lib @$(MAKE) -C lib/ smash: lib @echo Building Smash @$(MAKE) -C smash/ dist: @echo Extracting Dist @mkdir -p dist/core dist/smash @cp core/objects/* dist/core/ @cp smash/smash dist/smash/ @cp lib/slib.a dist/ target: @echo Creating Target Directory @mkdir target initramfs: target core smash @echo Installing Initramfs @mkdir -p ${INITRAMFS}/bin ${INITRAMFS}/etc ${INITRAMFS}/shr/man @cp core/objects/* ${INITRAMFS}/bin/ @cp man/* ${INITRAMFS}/shr/man/ @cp smash/smash ${INITRAMFS}/bin/ @cp utils/* ${INITRAMFS}/bin/ @cp etc/* ${INITRAMFS}/etc/ @mv ${INITRAMFS}/bin/init ${INITRAMFS}/init @echo Building Initramfs @cd ${INITRAMFS} && find . | cpio -o --quiet --format=newc > ../initramfs.img ${TARGET}/kernel: @echo Downloading Kernel @curl -s "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${KERNEL_VERSION}.tar.xz" -o ${TARGET}/kernel.tar.gz @echo Extracting Kernel @tar -xf ${TARGET}/kernel.tar.gz @mv linux-${KERNEL_VERSION} ${TARGET}/kernel-src @cp config/linux.config ${TARGET}/kernel-src/.config @echo Building Kernel @$(MAKE) -C ${TARGET}/kernel-src > /dev/null @cp ${TARGET}/kernel-src/arch/x86_64/boot/bzImage ${TARGET}/kernel ${TARGET}/syslinux: @echo Downloading SYSLINUX @curl -s "https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-${SYSLINUX_VERSION}.tar.gz" -o ${TARGET}/syslinux.tar.gz @echo Extracting SYSLINUX @tar -xf ${TARGET}/syslinux.tar.gz @mv syslinux-${SYSLINUX_VERSION} ${TARGET}/syslinux rootfs: target initramfs ${TARGET}/syslinux ${TARGET}/kernel @echo Installing Rootfs @mkdir -p ${ROOTFS}/syslinux ${ROOTFS}/images/rex/ @cp ${TARGET}/initramfs.img ${ROOTFS}/images/rex/boot.img @cp ${TARGET}/kernel ${ROOTFS}/images/rex/kernel @cp config/syslinux.cfg ${ROOTFS}/syslinux/syslinux.cfg @cp ${TARGET}/syslinux/bios/core/isolinux.bin \ ${TARGET}/syslinux/bios/com32/elflink/ldlinux/ldlinux.c32 \ ${TARGET}/syslinux/bios/com32/libutil/libutil.c32 \ ${TARGET}/syslinux/bios/com32/menu/menu.c32 \ ${ROOTFS}/syslinux/ iso: rootfs @echo Creating ISO @mkisofs -o ${ISO} \ -rational-rock \ -volid "reX ${VERSION}" \ -cache-inodes \ -joliet \ -full-iso9660-filenames \ -input-charset UTF8 \ -b syslinux/isolinux.bin \ -c syslinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -quiet \ ${ROOTFS} @isohybrid ${ISO} @echo Building ISO finished. @echo @echo The ISO is located under ${ISO} @echo qemu: iso @echo Running QEMU @qemu-system-x86_64 -cdrom ${ISO} qemu-nographic: iso @echo Running QEMU in nongraphic mode @echo @echo IMPORTANT: Select Serial Mode in the bootloader. @echo Else there will be no output. @echo @qemu-system-x86_64 -cdrom ${ISO} -nographic clean: @echo Cleaning Up reX Repository @-rm -r target @$(MAKE) -C core clean @$(MAKE) -C lib clean @$(MAKE) -C smash clean .PHONY: core lib smash initramfs rootfs iso qemu qemu-nographic clean