mirror of
				https://github.com/cfenollosa/os-tutorial.git
				synced 2025-06-13 12:54:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
C_SOURCES = $(wildcard kernel/*.c drivers/*.c cpu/*.c libc/*.c)
 | 
						|
HEADERS = $(wildcard kernel/*.h drivers/*.h cpu/*.h libc/*.h)
 | 
						|
# Nice syntax for file extension replacement
 | 
						|
OBJ = ${C_SOURCES:.c=.o cpu/interrupt.o} 
 | 
						|
 | 
						|
# Change this if your cross-compiler is somewhere else
 | 
						|
CC = /usr/local/i386elfgcc/bin/i386-elf-gcc
 | 
						|
GDB = /usr/local/i386elfgcc/bin/i386-elf-gdb
 | 
						|
# -g: Use debugging symbols in gcc
 | 
						|
CFLAGS = -g 
 | 
						|
 | 
						|
# First rule is run by default
 | 
						|
os-image.bin: boot/bootsect.bin kernel.bin
 | 
						|
	cat $^ > os-image.bin
 | 
						|
 | 
						|
# '--oformat binary' deletes all symbols as a collateral, so we don't need
 | 
						|
# to 'strip' them manually on this case
 | 
						|
kernel.bin: boot/kernel_entry.o ${OBJ}
 | 
						|
	i386-elf-ld -o $@ -Ttext 0x1000 $^ --oformat binary
 | 
						|
 | 
						|
# Used for debugging purposes
 | 
						|
kernel.elf: boot/kernel_entry.o ${OBJ}
 | 
						|
	i386-elf-ld -o $@ -Ttext 0x1000 $^ 
 | 
						|
 | 
						|
run: os-image.bin
 | 
						|
	qemu-system-i386 -fda os-image.bin
 | 
						|
 | 
						|
# Open the connection to qemu and load our kernel-object file with symbols
 | 
						|
debug: os-image.bin kernel.elf
 | 
						|
	qemu-system-i386 -s -fda os-image.bin -d guest_errors,int &
 | 
						|
	${GDB} -ex "target remote localhost:1234" -ex "symbol-file kernel.elf"
 | 
						|
 | 
						|
# Generic rules for wildcards
 | 
						|
# To make an object, always compile from its .c
 | 
						|
%.o: %.c ${HEADERS}
 | 
						|
	${CC} ${CFLAGS} -ffreestanding -c $< -o $@
 | 
						|
 | 
						|
%.o: %.asm
 | 
						|
	nasm $< -f elf -o $@
 | 
						|
 | 
						|
%.bin: %.asm
 | 
						|
	nasm $< -f bin -o $@
 | 
						|
 | 
						|
clean:
 | 
						|
	rm -rf *.bin *.dis *.o os-image.bin *.elf
 | 
						|
	rm -rf kernel/*.o boot/*.bin drivers/*.o boot/*.o cpu/*.o
 |