From a5ca4348d9cc9b88b20c1a3cb6a140d4a0e7047f Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 25 Jun 2009 19:46:49 +0000 Subject: [PATCH] changing Makefile system a bit, again git-svn-id: svn://anubis/hos/trunk@19 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/Makefile | 50 +++++++++++++++++++++++++++++------------------ kernel/subdir.mak | 33 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 kernel/subdir.mak diff --git a/kernel/Makefile b/kernel/Makefile index a8058f6..ba0eed7 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,23 +1,31 @@ -KERNEL := hos -LDFLAGS := -T link.ld - export PLATFORM := $(shell if [[ `uname` =~ "CYGWIN" ]]; then \ echo cygwin; \ else \ echo unix; \ fi) -ifeq ($(PLATFORM), cygwin) -export LD := i586-elf-ld -export CC := i586-elf-gcc -export CXX := i586-elf-g++ -else -export LD := ld -export CC := gcc -export CXX := g++ -endif -export NASM := nasm +ifeq ($(PLATFORM), cygwin) +export LD := i586-elf-ld +export CC := i586-elf-gcc +export CXX := i586-elf-g++ +else +export LD := ld +export CC := gcc +export CXX := g++ +endif +export NASM := nasm + +WD := $(shell pwd) +LDSCRIPT := link.ld +KERNEL := hos +export CPPFLAGS := -I$(WD)/include +export CFLAGS := -Wall -O2 +export CXXFLAGS := -Wall -O2 +export LDFLAGS := -T $(LDSCRIPT) + +SUBDIRS := boot +SUBDIRS_clean := $(subdirs:%=%.clean) .PHONY: all all: $(KERNEL).gz @@ -25,12 +33,16 @@ all: $(KERNEL).gz $(KERNEL).gz: $(KERNEL) gzip -c $< > $@ -$(KERNEL): boot.o - $(LD) $(LDFLAGS) -o $@ $< +$(KERNEL): $(SUBDIRS) + $(LD) $(LDFLAGS) -o $@ $(SUBDIRS:%=%/%.o) -boot.o: boot.asm - $(NASM) -f elf -o $@ $< +.PHONY: $(SUBDIRS) +$(SUBDIRS): + $(MAKE) -C $@ .PHONY: clean -clean: - -rm -f *~ $(KERNEL) $(KERNEL).gz *.o +clean: $(SUBDIRS_clean) + -rm -f *~ $(KERNEL) $(KERNEL).gz + +%.clean: + $(MAKE) -C $* clean clean=1 diff --git a/kernel/subdir.mak b/kernel/subdir.mak new file mode 100644 index 0000000..f396122 --- /dev/null +++ b/kernel/subdir.mak @@ -0,0 +1,33 @@ + +ASMOBJS := $(patsubst %.asm,%.o,$(wildcard *.asm)) +COBJS := $(patsubst %.c,%.o,$(wildcard *.c)) +CXXOBJS := $(patsubst %.cc,%.o,$(wildcard *.cc)) +CDEPS := $(COBJS:.o=.dep) +CXXDEPS := $(CXXOBJS:.o=.dep) + +all: $(SUBDIR).o + +$(SUBDIR).o: $(ASMOBJS) $(COBJS) $(CXXOBJS) + $(LD) -r -o $@ $^ + +%.o: %.asm + $(NASM) -f elf -o $@ $< + +%.o: %.c + $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $< + +%.o: %.cc + $(CXX) -c -o $@ $(CPPFLAGS) $(CXXFLAGS) $< + +# Make dependency files +%.dep: %.c + @set -e; rm -f $@; \ + $(CC) -MM $(CPPFLAGS) $< | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ + +clean: + -rm -f *.o *.dep *~ + +# Include dependency files +ifndef clean +-include $(DEPS) +endif