aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile15
-rw-r--r--devices/Makefile9
-rw-r--r--i686/Makefile9
-rw-r--r--lib/Makefile9
-rw-r--r--rules.mk21
-rw-r--r--src/Makefile13
6 files changed, 37 insertions, 39 deletions
diff --git a/Makefile b/Makefile
index d10fd2a..f623e7a 100644
--- a/Makefile
+++ b/Makefile
@@ -36,13 +36,14 @@ src/kernel.a:
${MAKE} ARCH=${ARCH} -C src kernel.a
glitch.elf: ${ARCH}/arch.a src/kernel.a devices/devs.a lib/libk.a
- ${LD} ${LDFLAGS} -T ${ARCH}/linker.ld -o $@ $^
+ @echo ' LD $@'
+ @${LD} ${LDFLAGS} -T ${ARCH}/linker.ld -o $@ $^
glitch.iso: glitch.elf grub/grub.cfg
- grub-file --is-x86-multiboot2 glitch.elf
- mkdir -p isodir/boot/grub
- mkdir -p isodir/boot/glitch
- cp grub/grub.cfg isodir/boot/grub/grub.cfg
- cp glitch.elf isodir/boot/glitch/glitch.elf
- grub-mkrescue -o glitch.iso isodir
+ @grub-file --is-x86-multiboot2 glitch.elf
+ @mkdir -p isodir/boot/grub
+ @mkdir -p isodir/boot/glitch
+ @cp grub/grub.cfg isodir/boot/grub/grub.cfg
+ @cp glitch.elf isodir/boot/glitch/glitch.elf
+ @grub-mkrescue -o glitch.iso isodir
diff --git a/devices/Makefile b/devices/Makefile
index 578a0f6..41edaaa 100644
--- a/devices/Makefile
+++ b/devices/Makefile
@@ -1,15 +1,10 @@
include ../${ARCH}/toolchain.mk
-include ../rules.mk
CCFLAGS += -I. -I../${ARCH}
all: devs.a
devs,SRCS = pic_8259.c uart_16550.c vga.c
-devs,OBJS = $(filter %.o,$(devs,SRCS:%.S=%.o) $(devs,SRCS:%.s=%.o) $(devs,SRCS:%.c=%.o))
-devs.a: ${devs,OBJS}
- @echo ' AR $@'
- @${AR} ${ARFLAGS} $@ $^
-clean:
- @rm -rf ${devs,OBJS}
+include ../rules.mk
+
diff --git a/i686/Makefile b/i686/Makefile
index 52295a8..e77f1c6 100644
--- a/i686/Makefile
+++ b/i686/Makefile
@@ -1,5 +1,4 @@
include ../${ARCH}/toolchain.mk
-include ../rules.mk
CCFLAGS += -I../grub/include
@@ -8,10 +7,6 @@ all: arch.a
arch,SRCS = boot.S init.s \
gdt.c lgdt.c \
lidt.c
-arch,OBJS = $(filter %.o,$(arch,SRCS:%.S=%.o) $(arch,SRCS:%.s=%.o) $(arch,SRCS:%.c=%.o))
-arch.a: ${arch,OBJS}
- @echo ' AR $@'
- @${AR} ${ARFLAGS} $@ $^
-clean:
- @rm -rf ${arch,OBJS}
+include ../rules.mk
+
diff --git a/lib/Makefile b/lib/Makefile
index c34790d..85d1f34 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -1,15 +1,10 @@
include ../${ARCH}/toolchain.mk
-include ../rules.mk
CCFLAGS += -I. -I..
all: libk.a
libk,SRCS = memcpy.c memset.c stdio/printf.c string/itoa.c
-libk,OBJS = $(libk,SRCS:%.c=%.o)
-libk.a: ${libk,OBJS}
- @echo ' AR $@'
- @${AR} ${ARFLAGS} $@ $^
-clean:
- @rm -rf ${libk,OBJS}
+include ../rules.mk
+
diff --git a/rules.mk b/rules.mk
index a3491df..152cc74 100644
--- a/rules.mk
+++ b/rules.mk
@@ -1,7 +1,20 @@
+# generate ,OBJS variable for each ,SRCS
+, = ,
+$(foreach V,$(filter %$(,)SRCS, ${.VARIABLES}),\
+ $(eval $(V:$(,)SRCS=$(,)OBJS) += $(foreach f,$($(V)),$(addsuffix .o,$(basename $(f))))) \
+ $(eval $(V:$(,)SRCS=.a): $($(V:$(,)SRCS=$(,)OBJS))) \
+ $(eval clean: $($(V:$(,)SRCS=$(,)OBJS))) \
+)
+
+# Suffix rules
+%.a:
+ @echo ' AR $@'
+ @${AR} ${ARFLAGS} $@ $(filter %.o,$^)
+
.SUFFIXES: .s .S .c .o
.s.o:
- @echo ' CC $^'
- @$(CC) $(CCFLAGS) -c -o $@ $^
+ @echo ' AS $^'
+ @$(AS) $(ASFLAGS) -c -o $@ $^
.S.o:
@echo ' CC $^'
@@ -11,3 +24,7 @@
@echo ' CC $^'
@$(CC) $(CCFLAGS) -c -o $@ $^
+# clean target
+.PHONY: clean
+clean:
+ @rm -rf $^
diff --git a/src/Makefile b/src/Makefile
index f9d3a28..e93d337 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,21 +1,16 @@
include ../${ARCH}/toolchain.mk
-include ../rules.mk
CCFLAGS += -I. -isystem../grub/include -I../${ARCH} -I../lib -I..
all: kernel.a
-kernel,SRCS = multiboot2.c mmap.c kernel.c isr.c mem/vmm.c
-kernel,OBJS = $(kernel,SRCS:%.c=%.o)
-kernel.a: conf.h ${kernel,OBJS}
- @echo ' AR $@'
- @${AR} ${ARFLAGS} $@ ${kernel,OBJS}
-
conf.h: conf.h.in
@cp conf.h.in conf.h
@sed -i 's/@VERSION@/$(shell git describe)/' conf.h
@sed -i 's/@CC@/$(shell ${CC} --version | head -n1)/' conf.h
-clean:
- @rm -rf ${kernel,OBJS}
+kernel,SRCS := multiboot2.c mmap.c kernel.c isr.c mem/vmm.c
+kernel,OBJS := conf.h
+
+include ../rules.mk