diff --git a/.gitignore b/.gitignore index eaeabd1..d06ca98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,7 @@ -*.o -*.d +build/ +bin/ # `make -f Makefile.js` artifacts .emscripten_cache js/* !js/lib.js - -# `make -f Makefile` artifacts -build_filelist -splitimg -temu diff --git a/Makefile b/Makefile index 390ae37..d7cb8d9 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,10 @@ # THE SOFTWARE. # +# artifact paths +BUILD:=build +BIN:=bin + # if set, network filesystem is enabled. libcurl and libcrypto # (openssl) must be installed. CONFIG_FS_NET=y @@ -103,33 +107,48 @@ CFLAGS+=-DCONFIG_X86EMU EMU_OBJS+=x86_cpu.o x86_machine.o ide.o ps2.o vmmouse.o pckbd.o vga.o endif -temu$(EXE): $(EMU_OBJS) - $(CC) $(LDFLAGS) -o $@ $^ $(EMU_LIBS) +# macro to prepend $(BUILD) +define mkbuild +$(addprefix $(BUILD)/,$(1)) +endef + +temu$(EXE): $(BUILD) $(BIN) $(EMU_OBJS) + $(CC) $(LDFLAGS) -o $(BIN)/$@ $(call mkbuild,$(EMU_OBJS)) $(EMU_LIBS) riscv_cpu32.o: riscv_cpu.c - $(CC) $(CFLAGS) -DMAX_XLEN=32 -c -o $@ $< + $(CC) $(CFLAGS) -DMAX_XLEN=32 -c -o $(BUILD)/$@ $< riscv_cpu64.o: riscv_cpu.c - $(CC) $(CFLAGS) -DMAX_XLEN=64 -c -o $@ $< + $(CC) $(CFLAGS) -DMAX_XLEN=64 -c -o $(BUILD)/$@ $< riscv_cpu128.o: riscv_cpu.c - $(CC) $(CFLAGS) -DMAX_XLEN=128 -c -o $@ $< + $(CC) $(CFLAGS) -DMAX_XLEN=128 -c -o $(BUILD)/$@ $< build_filelist: build_filelist.o fs_utils.o cutils.o - $(CC) $(LDFLAGS) -o $@ $^ -lm + $(CC) $(LDFLAGS) -o $(BIN)/$@ $(call mkbuild,$^) -lm splitimg: splitimg.o - $(CC) $(LDFLAGS) -o $@ $^ + $(CC) $(LDFLAGS) -o $(BIN)/$@ $(call mkbuild,$^) install: $(PROGS) $(STRIP) $(PROGS) $(INSTALL) -m755 $(PROGS) "$(DESTDIR)$(bindir)" %.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< + $(CC) $(CFLAGS) -c -o $(BUILD)/$@ $< +.PHONY: $(BUILD) +$(BUILD): + @mkdir -p $(BUILD) $(BUILD)/slirp + +.PHONY: $(BIN) +$(BIN): + @mkdir -p $@ + +.PHONY: clean clean: - rm -f *.o *.d *~ $(PROGS) slirp/*.o slirp/*.d slirp/*~ + rm -f *~ $(PROGS) + rm -rf $(BUILD) --include $(wildcard *.d) --include $(wildcard slirp/*.d) +-include $(wildcard $(BUILD)/*.d) +-include $(wildcard $(BUILD)/slirp/*.d)