metalsvm/Makefile.example

88 lines
2.3 KiB
Text

TOPDIR = $(shell pwd)
ARCH = x86
NAME = metalsvm.bin
SYM_NAME = metalsvm.sym
LWIPDIRS = lwip/src/api lwip/src/core lwip/src/core/ipv4 lwip/src/netif
DRIVERDIRS = drivers/net
KERNDIRS = libkern kernel mm fs arch/$(ARCH)/kernel arch/$(ARCH)/mm $(LWIPDIRS) $(DRIVERDIRS)
SUBDIRS = $(KERNDIRS)
#OBJS = $(shell for i in $(KERNDIRS); do find $$i -name *.o; done)
OBJCOPY = objcopy
STRIP_DEBUG = --strip-debug
KEEP_DEBUG = --only-keep-debug
MAKE = make
NASM = nasm
NASMFLAGS = -felf32 -g
INCLUDE = -I$(TOPDIR)/include -I$(TOPDIR)/arch/$(ARCH)/include -I$(TOPDIR)/lwip/src/include -I$(TOPDIR)/lwip/src/include/ipv4 -I$(TOPDIR)/drivers
CC = gcc
CFLAGS = -g -m32 -march=i586 -Wall -O2 -fno-zero-initialized-in-bss -fno-builtin-function -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc $(INCLUDE) -fno-stack-protector
AR = ar
ARFLAGS = rsv
RM = rm -rf
LD = ld
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')
# Prettify output
V = 0
ifeq ($V,0)
Q = @
P = > /dev/null
endif
default: all
all: newlib tools $(NAME)
#all:
# for i in $(SUBDIRS); do $(MAKE) -C $$i all; done
# $(MAKE) link
#link:
# $(LD) $(LDFLAGS) -o $(NAME) $(OBJS)
# $(OBJCOPY) $(KEEP_DEBUG) $(NAME) $(SYM_NAME)
# $(OBJCOPY) $(STRIP_DEBUG) $(NAME)
newlib:
$(MAKE) ARCH=$(ARCH) LDFLAGS="-m32" CFLAGS="-m32 -O2 -march=i586 -fno-stack-protector" NASMFLAGS="-felf32 -g" -C newlib
tools:
$(MAKE) -C tools
$(NAME):
$Q$(LD) $(LDFLAGS) -o $(NAME) $^
@echo [OBJCOPY] $(SYM_NAME)
$Q$(OBJCOPY) $(KEEP_DEBUG) $(NAME) $(SYM_NAME)
@echo [OBJCOPY] $(NAME)
$Q$(OBJCOPY) $(STRIP_DEBUG) $(NAME)
qemu: newlib tools $(NAME)
qemu -no-kvm -smp 2 -net nic,model=rtl8139 -net user,hostfwd=tcp::12345-:7 -net dump -kernel metalsvm.bin -initrd tools/initrd.img
clean:
$Q$(RM) $(NAME) $(SYM_NAME) *~
$Q$(MAKE) -C tools clean
@echo Cleaned.
veryclean: clean
$Q$(MAKE) -C newlib veryclean
@echo Very cleaned
#depend:
# for i in $(SUBDIRS); do $(MAKE) -k -C $$i depend; done
%.o : %.c
@echo [CC] $@
$Q$(CC) -c -D__KERNEL__ $(CFLAGS) -o $@ $<
@echo [DEP] $*.dep
$Q$(CC) -MF $*.dep -MT $*.o -MM $(CFLAGS) $<
%.o : %.asm
@echo [ASM] $@
$Q$(NASM) $(NASMFLAGS) -o $@ $<
.PHONY: default all clean emu gdb newlib tools
include $(addsuffix /Makefile,$(SUBDIRS))