OBJDIRS += user USER_LIBSRCS:= lib/printfmt.c \ lib/string.c \ lib/user/assert.c \ lib/user/astart.asm \ lib/user/stdio.c \ lib/user/syscall.c \ USER_LIBOBJS := $(patsubst %.c, $(OBJDIR)/%.o, $(USER_LIBSRCS)) USER_LIBOBJS := $(patsubst %.asm, $(OBJDIR)/%.o, $(USER_LIBOBJS)) USER_SRCS := user/testpid.c \ user/testkey.c \ user/delay.c \ user/snake.bin \ USER_OBJS := $(patsubst %.c, $(OBJDIR)/%.o, $(USER_SRCS)) USER_BINS := $(patsubst %.bin, $(OBJDIR)/%.bin, $(USER_SRCS)) USER_BINS := $(patsubst %.c, $(OBJDIR)/%.bin, $(USER_SRCS)) $(OBJDIR)/user/%.o: user/%.c $(OBJDIR)/.vars.CFLAGS @echo + cc $< @mkdir -p $(@D) @$(CC) $(CFLAGS) -c -o $@ $< $(OBJDIR)/user/%.bin: user/%.bin @echo + cp $< @echo 'd2dcd918806dfd71bb55e52a4081e95e' > $(OBJDIR)/.snakemd5 @md5sum $< | awk '{print $$1}' | cmp -s $(OBJDIR)/.snakemd5 || (echo 'you are a cheater!!!'; exit 1;) @mkdir -p $(@D) @cp $< $(@D) $(OBJDIR)/user/%.bin: $(OBJDIR)/user/%.o $(USER_LIBOBJS) $(OBJDIR)/.vars.LDFLAGS @echo + ld $@ @$(LD) $(LDFLAGS) -o $@ $< $(USER_LIBOBJS) $(GCC_LIB)