aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: aff5319f0f19c64baadacea88c3e69768c00e0a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
ERSION=0.0.1
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}/system/config \
	          ${INITRAMFS}/system/manual \
	          ${INITRAMFS}/system/core \
	          ${INITRAMFS}/system/utils \
	          ${INITRAMFS}/system/scripts \
	          ${INITRAMFS}/system/devices \
	          ${INITRAMFS}/system/info \
	          ${INITRAMFS}/system/process \
	          ${INITRAMFS}/system/data
	@cp core/objects/* ${INITRAMFS}/system/core/
	@cp utils/init ${INITRAMFS}/system/core/
	@cp smash/smash ${INITRAMFS}/system/core/
	@cp utils/* ${INITRAMFS}/system/utils/
	@cp man/* ${INITRAMFS}/system/manual/
	@cp -r config/* ${INITRAMFS}/system/config/
	@cp -r data/* ${INITRAMFS}/system/data/
	@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 build_config/linux.config ${TARGET}/kernel-src/.config
	@echo Building Kernel
	$(MAKE) -C ${TARGET}/kernel-src
	@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 build_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 \
		-no-emul-boot \
		-b syslinux/isolinux.bin \
		-c syslinux/boot.cat \
		-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} -vga virtio

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

clean-build:
	@$(MAKE) -C core clean
	@$(MAKE) -C lib clean
	@$(MAKE) -C smash clean

.PHONY: core lib smash initramfs rootfs iso qemu qemu-nographic clean