Mise a jour de mon avancement
This commit is contained in:
111
Makefile
Normal file
111
Makefile
Normal file
@@ -0,0 +1,111 @@
|
||||
SYSTEM?=UEFI
|
||||
PLATFORM?=QEMU
|
||||
|
||||
QEMU=qemu-system-i386 -enable-kvm -m 512 -monitor stdio -vga virtio
|
||||
QEMU_VNC=qemu-system-i386 -m 512 -monitor stdio -vga virtio -display vnc=:1,password=on -audiodev none,id=audio0
|
||||
|
||||
ISO_NAME=yoctos.iso
|
||||
|
||||
GRUB_CONF=grub/grub.cfg
|
||||
|
||||
SYSTEM_OK=0
|
||||
ifeq ($(SYSTEM),BIOS)
|
||||
GRUB_MKRESCUE_ARGS=
|
||||
SYSTEM_OK=1
|
||||
endif
|
||||
ifeq ($(SYSTEM),UEFI)
|
||||
GRUB_MKRESCUE_ARGS=/usr/lib/grub/i386-pc
|
||||
SYSTEM_OK=1
|
||||
endif
|
||||
ifneq ($(SYSTEM_OK),1)
|
||||
$(error invalid SYSTEM)
|
||||
endif
|
||||
|
||||
PLATFORM_OK=0
|
||||
ifeq ($(PLATFORM),QEMU)
|
||||
CC_DEFINES=-DQEMU
|
||||
PLATFORM_OK=1
|
||||
endif
|
||||
ifeq ($(PLATFORM),PC)
|
||||
CC_DEFINES=-DEMULATE_DISK_IN_RAM
|
||||
PLATFORM_OK=1
|
||||
endif
|
||||
ifneq ($(PLATFORM_OK),1)
|
||||
$(error invalid PLATFORM)
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG),0)
|
||||
CC_FLAGS=-O3
|
||||
LD_FLAGS=
|
||||
else
|
||||
CC_FLAGS=-g -O0
|
||||
LD_FLAGS=-g
|
||||
endif
|
||||
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo "run build the OS ISO image (+ filsystem) and run it in QEMU"
|
||||
@echo "iso build the OS ISO image (+ filesystem)"
|
||||
@echo "common build the common object files only"
|
||||
@echo "kernel build the kernel only"
|
||||
@echo "debug build the OS ISO image (+ filsystem) and run it in QEMU for debugging"
|
||||
@echo "deploy build the OS ISO image (+ filsystem) and deploy it to the specified device"
|
||||
@echo " Requires DEV to be defined (eg. DEV=/dev/sdb)"
|
||||
@echo "clean clean up everything"
|
||||
@echo ""
|
||||
@echo "Available variables:"
|
||||
@echo "SYSTEM target system type, either UEFI or BIOS (default: UEFI)"
|
||||
@echo "PLATFORM target platform type, either QEMU or PC (default: QEMU)"
|
||||
@echo "DEBUG whether to generate debug code, either on or off (default: on)"
|
||||
@echo "DEV device to deploy the ISO image onto (only used by the \"deploy\" target)"
|
||||
@echo ""
|
||||
@echo "Usage examples:"
|
||||
@echo "make run"
|
||||
@echo "make run SYSTEM=BIOS PLATFORM=QEMU"
|
||||
@echo "make PLATFORM=PC DEBUG=0 DEV=/dev/sdb deploy"
|
||||
|
||||
iso: $(ISO_NAME)
|
||||
|
||||
msg:
|
||||
@echo "================================================="
|
||||
@echo "Build targeting a $(PLATFORM)/$(SYSTEM) platform"
|
||||
@echo "================================================="
|
||||
|
||||
run: $(ISO_NAME)
|
||||
$(QEMU) -cdrom $<
|
||||
|
||||
run_vnc: $(ISO_NAME)
|
||||
$(QEMU_VNC) -cdrom $<
|
||||
|
||||
# The "accel=tcg" option is necessary to be able to debug an ELF within QEMU
|
||||
debug: $(ISO_NAME)
|
||||
$(QEMU) -s -S -cdrom $< -machine accel=tcg
|
||||
|
||||
# ISO image creation taken from http://wiki.osdev.org/Bare_Bones#Booting_the_Kernel
|
||||
# Requires grub-mkrescue and xorriso
|
||||
# NOTE: on hosts that boot via UEFI, the path /usr/lib/grub/i386-pc is required
|
||||
# by grub-mkrescue otherwise the ISO won't be bootable by qemu.
|
||||
$(ISO_NAME): msg $(GRUB_CONF) kernel
|
||||
mkdir -p build/boot/grub build/data/
|
||||
cp $(GRUB_CONF) build/boot/grub/
|
||||
cp kernel/kernel.elf build/boot/
|
||||
grub-mkrescue $(GRUB_MKRESCUE_ARGS) -o $@ build
|
||||
@echo "Built the $@ image for a $(SYSTEM) system."
|
||||
|
||||
common:
|
||||
$(MAKE) -C $@ CC_DEFINES=$(CC_DEFINES) CC_FLAGS="$(CC_FLAGS)" LD_FLAGS="$(LD_FLAGS)"
|
||||
|
||||
kernel:
|
||||
$(MAKE) -C $@ CC_DEFINES=$(CC_DEFINES) CC_FLAGS="$(CC_FLAGS)" LD_FLAGS="$(LD_FLAGS)"
|
||||
|
||||
deploy: $(ISO_NAME)
|
||||
sudo dd if=/dev/urandom of=$(DEV) bs=1M count=10
|
||||
sudo dd if=$< of=$(DEV)
|
||||
sudo sync
|
||||
|
||||
clean:
|
||||
/bin/rm -rf build $(ISO_NAME)
|
||||
$(MAKE) -C common clean
|
||||
$(MAKE) -C kernel clean
|
||||
|
||||
.PHONY: clean common kernel
|
||||
Reference in New Issue
Block a user