libkernaux/examples/bootloader-stivale2-limine/Makefile

94 lines
2.7 KiB
Makefile
Raw Normal View History

2022-01-12 09:40:35 +00:00
all: test
2022-01-10 04:31:41 +00:00
2022-01-17 18:06:32 +00:00
CCPREFIX = ../../vendor/cross/root/bin/x86_64-elf-
2022-01-10 04:31:41 +00:00
AS = $(CCPREFIX)as
CC = $(CCPREFIX)gcc
2022-02-02 02:46:21 +00:00
LIBKERNAUX_SRC = ../..
2022-01-17 12:13:54 +00:00
LIBKERNAUX_BUILD = ../../build/dev-cross-x86_64
LIBKERNAUX_DEST = ../../dest/dev-cross-x86_64
2022-01-12 09:40:35 +00:00
DIFF = diff
2022-01-10 04:31:41 +00:00
LIMINE = ../../vendor/limine/build/bin
2022-01-15 16:10:56 +00:00
QEMU = qemu-system-x86_64 -serial stdio -display none
2022-01-10 04:31:41 +00:00
XORRISO = xorriso
2022-01-12 09:40:35 +00:00
EXPECTED = expected.txt
2022-01-10 04:31:41 +00:00
IMAGE = image.iso
LINKERSCR = linker.ld
2022-01-12 09:40:35 +00:00
OUTPUT = output.txt
2022-01-10 04:31:41 +00:00
ROOTFS = rootfs
LIMINE_CD = $(LIMINE)/limine-cd.bin
LIMINE_ELTORITO = $(LIMINE)/limine-eltorito-efi.bin
LIMINE_INSTALL = $(LIMINE)/limine-install
LIMINE_SYS = $(LIMINE)/limine.sys
REL_KERNEL = boot/kernel
REL_LIMINE_CD = boot/limine-cd.bin
REL_LIMINE_CFG = boot/limine.cfg
REL_LIMINE_ELTORITO = boot/limine-eltorito-efi.bin
REL_LIMINE_SYS = boot/limine.sys
FULL_KERNEL = $(ROOTFS)/$(REL_KERNEL)
FULL_LIMINE_CD = $(ROOTFS)/$(REL_LIMINE_CD)
FULL_LIMINE_CFG = $(ROOTFS)/$(REL_LIMINE_CFG)
FULL_LIMINE_ELTORITO = $(ROOTFS)/$(REL_LIMINE_ELTORITO)
FULL_LIMINE_SYS = $(ROOTFS)/$(REL_LIMINE_SYS)
CFLAGS = \
2022-02-02 02:46:21 +00:00
-std=c99 \
-Wall \
-Wextra \
-Werror \
-ffreestanding \
-fno-stack-protector \
-fno-pic \
-I$(LIBKERNAUX_SRC)/include \
-I$(LIBKERNAUX_BUILD)/include \
-mabi=sysv \
-mcmodel=kernel \
-mno-80387 \
-mno-red-zone \
2022-01-10 04:31:41 +00:00
-MMD
2022-02-02 02:46:21 +00:00
# -pedantic \
2022-01-10 04:31:41 +00:00
OBJS = main.c.o stivale2.c.o
2022-01-10 04:31:41 +00:00
2022-01-12 09:40:35 +00:00
test: run
$(DIFF) -a -Z $(EXPECTED) $(OUTPUT)
2022-01-10 04:31:41 +00:00
run: $(IMAGE)
2022-01-15 16:10:56 +00:00
$(QEMU) -cdrom $< | tee $(OUTPUT)
2022-01-10 04:31:41 +00:00
clean:
2022-01-12 09:40:35 +00:00
rm -f $(OUTPUT) $(IMAGE) $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS) $(OBJS)
2022-01-10 04:31:41 +00:00
$(IMAGE): $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
$(XORRISO) -as mkisofs -b $(REL_LIMINE_CD) -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot $(REL_LIMINE_ELTORITO) -efi-boot-part --efi-boot-image --protective-msdos-label $(ROOTFS) -o $@
$(LIMINE_INSTALL) $@
2022-02-02 03:43:20 +00:00
$(FULL_KERNEL): $(LINKERSCR) build-libkernaux.a $(OBJS)
$(CC) -T $(LINKERSCR) -o $@ $(OBJS) -ffreestanding -nostdlib -zmax-page-size=0x1000 -static -lkernaux -lgcc -Wl,-L$(LIBKERNAUX_DEST)/lib
2022-01-10 04:31:41 +00:00
$(FULL_LIMINE_CD):
cp -f $(LIMINE_CD) $(FULL_LIMINE_CD)
$(FULL_LIMINE_ELTORITO):
cp -f $(LIMINE_ELTORITO) $(FULL_LIMINE_ELTORITO)
$(FULL_LIMINE_SYS):
cp -f $(LIMINE_SYS) $(FULL_LIMINE_SYS)
2022-01-15 07:32:37 +00:00
build-libkernaux.a:
2022-01-17 12:13:54 +00:00
cd $(LIBKERNAUX_BUILD) && ./config
cd $(LIBKERNAUX_BUILD) && make libkernaux.a
cd $(LIBKERNAUX_BUILD) && make install-data install-exec
2022-01-15 07:32:37 +00:00
2022-01-10 04:31:41 +00:00
%.c.o: %.c
$(CC) -c $< -o $@ $(CFLAGS)
%.S.o: %.S
$(AS) $< -o $@