2014-12-12 18:18:07 +01:00
|
|
|
TERM = xterm
|
2013-11-08 17:22:37 +01:00
|
|
|
TOPDIR = $(shell pwd)
|
|
|
|
ARCH = x86
|
|
|
|
NAME = eduos
|
2014-11-28 01:34:26 +01:00
|
|
|
KERNDIRS = libkern kernel mm arch/$(ARCH)/kernel arch/$(ARCH)/mm
|
2013-11-08 17:22:37 +01:00
|
|
|
SUBDIRS = $(KERNDIRS)
|
|
|
|
|
|
|
|
# Set your own cross compiler tool chain prefix here
|
|
|
|
CROSSCOMPREFIX =
|
|
|
|
|
|
|
|
CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc
|
|
|
|
CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++
|
|
|
|
GCC_FOR_TARGET = $(CROSSCOMPREFIX)gcc
|
|
|
|
CPP_FOR_TARGET = $(CROSSCOMPREFIX)cpp
|
|
|
|
AR_FOR_TARGET = $(CROSSCOMPREFIX)ar
|
|
|
|
AS_FOR_TARGET = $(CROSSCOMPREFIX)as
|
|
|
|
LD_FOR_TARGET = $(CROSSCOMPREFIX)ld
|
|
|
|
NM_FOR_TARGET = $(CROSSCOMPREFIX)nm
|
|
|
|
OBJDUMP_FOR_TARGET = $(CROSSCOMPREFIX)objdump
|
|
|
|
OBJCOPY_FOR_TARGET = $(CROSSCOMPREFIX)objcopy
|
|
|
|
RANLIB_FOR_TARGET = $(CROSSCOMPREFIX)ranlib
|
|
|
|
STRIP_FOR_TARGET = $(CROSSCOMPREFIX)strip
|
|
|
|
READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf
|
2014-11-28 01:49:03 +01:00
|
|
|
|
2013-11-08 17:22:37 +01:00
|
|
|
NASM = nasm
|
2013-11-27 22:43:15 +01:00
|
|
|
NASMFLAGS = -felf32 -g -i$(TOPDIR)/include/eduos/
|
2014-12-02 23:04:54 +01:00
|
|
|
GDB = $(CROSSCOMPREFIX)gdb
|
2014-11-28 01:49:03 +01:00
|
|
|
GDBFLAGS = -x debug.gdb
|
2014-11-30 09:01:11 +01:00
|
|
|
QEMU = qemu-system-i386
|
2014-11-28 01:49:03 +01:00
|
|
|
QEMUFLAGS = -smp 2 -monitor stdio \
|
|
|
|
-net nic,model=rtl8139 \
|
2014-12-09 10:09:03 +01:00
|
|
|
-net user,hostfwd=tcp::12345-:7
|
2014-12-12 18:32:07 +01:00
|
|
|
QEMUDEBUGFLAGS = -monitor none -daemonize \
|
|
|
|
-net nic,model=rtl8139 \
|
|
|
|
-net user,hostfwd=tcp::12345-:7
|
2014-12-19 17:01:12 +01:00
|
|
|
QEMUSERIALFLAGS = -device pci-serial,chardev=tS0 \
|
|
|
|
-chardev socket,host=localhost,port=4555,server,id=tS0
|
2014-11-28 01:49:03 +01:00
|
|
|
|
2013-11-08 17:22:37 +01:00
|
|
|
INCLUDE = -I$(TOPDIR)/include -I$(TOPDIR)/arch/$(ARCH)/include
|
|
|
|
# Compiler options for final code
|
|
|
|
CFLAGS = -g -m32 -march=i586 -Wall -O2 -fno-builtin -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc $(INCLUDE) -fno-stack-protector
|
|
|
|
# Compiler options for debugging
|
2014-12-12 18:32:07 +01:00
|
|
|
debug debug-eclipse : CFLAGS = -g -O0 -m32 -march=i586 -Wall -fno-builtin -DWITH_FRAME_POINTER -nostdinc $(INCLUDE) -fno-stack-protector
|
2013-11-08 17:22:37 +01:00
|
|
|
AR = ar
|
|
|
|
ARFLAGS = rsv
|
|
|
|
RM = rm -rf
|
|
|
|
LDFLAGS = -T link.ld -z max-page-size=4096 --defsym __BUILD_DATE=$(shell date +'%Y%m%d') --defsym __BUILD_TIME=$(shell date +'%H%M%S')
|
|
|
|
STRIP_DEBUG = --strip-debug
|
|
|
|
KEEP_DEBUG = --only-keep-debug
|
|
|
|
|
|
|
|
# Prettify output
|
|
|
|
V = 0
|
|
|
|
ifeq ($V,0)
|
|
|
|
Q = @
|
|
|
|
P = > /dev/null
|
|
|
|
endif
|
|
|
|
|
|
|
|
default: all
|
|
|
|
|
|
|
|
all: $(NAME).elf
|
|
|
|
|
|
|
|
$(NAME).elf:
|
|
|
|
$Q$(LD_FOR_TARGET) $(LDFLAGS) -o $(NAME).elf $^
|
|
|
|
@echo [OBJCOPY] $(NAME).sym
|
|
|
|
$Q$(OBJCOPY_FOR_TARGET) $(KEEP_DEBUG) $(NAME).elf $(NAME).sym
|
2014-12-12 18:32:07 +01:00
|
|
|
#@echo [OBJCOPY] $(NAME).elf
|
|
|
|
#$Q$(OBJCOPY_FOR_TARGET) $(STRIP_DEBUG) $(NAME).elf
|
2013-11-08 17:22:37 +01:00
|
|
|
|
|
|
|
clean:
|
|
|
|
$Q$(RM) $(NAME).elf $(NAME).sym *~
|
|
|
|
@echo Cleaned.
|
|
|
|
|
|
|
|
veryclean: clean
|
|
|
|
$Q$(RM) qemu-vlan0.pcap
|
|
|
|
@echo Very cleaned
|
|
|
|
|
|
|
|
qemu: $(NAME).elf
|
2014-11-28 01:49:03 +01:00
|
|
|
$(QEMU) $(QEMUFLAGS) -kernel $(NAME).elf
|
2013-11-08 17:22:37 +01:00
|
|
|
|
2014-12-09 10:09:03 +01:00
|
|
|
uart: $(NAME).elf
|
2014-12-19 17:01:12 +01:00
|
|
|
$(QEMU) $(QEMUFLAGS) $(QEMUSERIALFLAGS) -kernel $(NAME).elf
|
2014-12-09 10:09:03 +01:00
|
|
|
|
2014-11-28 01:49:03 +01:00
|
|
|
debug: $(NAME).elf
|
|
|
|
$(TERM) -e $(GDB) $(GDBFLAGS) &
|
2014-12-12 18:32:07 +01:00
|
|
|
$(QEMU) $(QEMUDEBUGFLAGS) -s -S -kernel $(NAME).elf
|
|
|
|
|
2014-12-19 17:01:12 +01:00
|
|
|
debug-eclipse: clean $(NAME).elf
|
2014-12-12 18:32:07 +01:00
|
|
|
killall $(QEMU) &
|
2014-12-19 17:01:12 +01:00
|
|
|
( ( $(QEMU) $(QEMUDEBUGFLAGS) $(QEMUSERIALFLAGS) -s -S -kernel $(NAME).elf & ) & )
|
2013-11-08 17:22:37 +01:00
|
|
|
|
2013-11-09 00:25:25 +01:00
|
|
|
doc:
|
|
|
|
@echo Create documentation...
|
2014-11-28 01:49:03 +01:00
|
|
|
@doxygen
|
2013-11-09 00:25:25 +01:00
|
|
|
|
2013-11-08 17:22:37 +01:00
|
|
|
%.o : %.c
|
|
|
|
@echo [CC] $@
|
|
|
|
$Q$(CC_FOR_TARGET) -c -D__KERNEL__ $(CFLAGS) -o $@ $<
|
|
|
|
@echo [DEP] $*.dep
|
|
|
|
$Q$(CC_FOR_TARGET) -MF $*.dep -MT $*.o -MM $(CFLAGS) $<
|
|
|
|
|
2013-11-27 22:43:15 +01:00
|
|
|
include/eduos/config.inc: include/eduos/config.h
|
|
|
|
@echo "; This file is generated automatically from the config.h file." > include/eduos/config.inc
|
|
|
|
@echo "; Before editing this, you should consider editing config.h." >> include/eduos/config.inc
|
|
|
|
@awk '/^#define KERNEL_STACK_SIZE/{ print "%define KERNEL_STACK_SIZE", $$3 }' include/eduos/config.h >> include/eduos/config.inc
|
|
|
|
|
|
|
|
%.o : %.asm include/eduos/config.inc
|
2013-11-08 17:22:37 +01:00
|
|
|
@echo [ASM] $@
|
|
|
|
$Q$(NASM) $(NASMFLAGS) -o $@ $<
|
|
|
|
|
|
|
|
%.o : %.S
|
|
|
|
@echo [GCC-ASM] $@
|
|
|
|
$Q$(CC_FOR_TARGET) $(CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
.PHONY: default all clean emu gdb newlib tools
|
2014-11-28 01:49:03 +01:00
|
|
|
|
2013-11-08 17:22:37 +01:00
|
|
|
include $(addsuffix /Makefile,$(SUBDIRS))
|