aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile123
1 files changed, 113 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index e34bd09..6b5ccf6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,119 @@
-core:
- $(MAKE) -C core/
+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:
- $(MAKE) -C lib/
+ @echo Building Lib
+ @$(MAKE) -C lib/
-smash:
- $(MAKE) -C smash/
+smash: lib
+ @echo Building Smash
+ @$(MAKE) -C smash/
dist:
- mkdir -p dist/core dist/smash
- cp core/objects/* dist/core/
- cp smash/smash dist/smash/
- cp lib/slib.a 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
+.PHONY: core lib smash initramfs rootfs iso qemu qemu-nographic clean