changeset 2601:6a84a38b3cf9

Handle dependencies properly in makefile
author Michael Pavone <pavone@retrodev.com>
date Thu, 13 Feb 2025 21:02:47 -0800
parents 251cc75574af
children 10c7f1e44c47
files Makefile
diffstat 1 files changed, 67 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Thu Feb 13 02:18:30 2025 -0800
+++ b/Makefile	Thu Feb 13 21:02:47 2025 -0800
@@ -172,17 +172,18 @@
 endif #CPU=wasm
 endif #Windows
 
-ifndef OPT
 ifdef DEBUG
+OBJDIR:=obj/debug
 OPT:=-g3 -O0
 else
+OBJDIR:=obj/release
 ifdef NOLTO
 OPT:=-O2
 else
 OPT:=-O2 -flto
 endif #NOLTO
 endif #DEBUG
-endif #OPT
+LIBOBJDIR:=$(OBJDIR)/lib
 
 CFLAGS:=$(OPT) $(CFLAGS)
 LDFLAGS:=$(OPT) $(LDFLAGS)
@@ -272,15 +273,20 @@
 RENDEROBJS+= $(LIBZOBJS) png.o
 endif
 
-MAINOBJS=blastem.o system.o genesis.o debug.o gdb_remote.o vdp.o $(RENDEROBJS) io.o romdb.o hash.o menu.o xband.o \
-	realtec.o i2c.o nor.o sega_mapper.o multi_game.o megawifi.o $(NET) serialize.o $(TERMINAL) $(CONFIGOBJS) gst.o \
-	$(M68KOBJS) $(TRANSOBJS) $(AUDIOOBJS) saves.o zip.o bindings.o jcart.o gen_player.o coleco.o pico_pcm.o ymz263b.o \
-	segacd.o lc8951.o cdimage.o cdd_mcu.o cd_graphics.o cdd_fader.o sft_mapper.o mediaplayer.o oscilloscope.o
+COREOBJS:=system.o genesis.o vdp.o io.o romdb.o hash.o xband.o realtec.o i2c.o nor.o $(M68KOBJS) \
+	sega_mapper.o multi_game.o megawifi.o $(NET) serialize.o $(TERMINAL) $(CONFIGOBJS) gst.o \
+	$(TRANSOBJS) $(AUDIOOBJS) saves.o jcart.o gen_player.o coleco.o pico_pcm.o ymz263b.o \
+	segacd.o lc8951.o cdimage.o cdd_mcu.o cd_graphics.o cdd_fader.o sft_mapper.o mediaplayer.o
 
-LIBOBJS=libblastem.o system.o genesis.o vdp.o io.o romdb.o hash.o xband.o realtec.o \
-	i2c.o nor.o sega_mapper.o multi_game.o megawifi.o $(NET) serialize.o $(TERMINAL) $(CONFIGOBJS) gst.o \
-	$(M68KOBJS) $(TRANSOBJS) $(AUDIOOBJS) saves.o jcart.o rom.db.o gen_player.o coleco.o pico_pcm.o ymz263b.o \
-	segacd.o lc8951.o cdimage.o cdd_mcu.o cd_graphics.o cdd_fader.o sft_mapper.o mediaplayer.o $(LIBZOBJS)
+ifdef NOZ80
+CFLAGS+=-DNO_Z80
+else
+COREOBJS+= sms.o i8255.o $(Z80OBJS)
+endif
+
+MAINOBJS:=$(COREOBJS) blastem.o $(RENDEROBJS) zip.o  menu.o debug.o gdb_remote.o bindings.o oscilloscope.o
+
+LIBOBJS:=$(COREOBJS) libblastem.o rom.db.o $(LIBZOBJS)
 
 ifdef NONUKLEAR
 CFLAGS+= -DDISABLE_NUKLEAR
@@ -289,13 +295,6 @@
 LDFLAGS+=$(EXTRA_NUKLEAR_LDFLAGS)
 endif
 
-ifdef NOZ80
-CFLAGS+=-DNO_Z80
-else
-MAINOBJS+= sms.o i8255.o $(Z80OBJS)
-LIBOBJS+= sms.o i8255.o $(Z80OBJS)
-endif
-
 ifeq ($(OS),Windows)
 MAINOBJS+= res.o
 endif
@@ -316,76 +315,62 @@
 ifneq ($(OS),Windows)
 ALL+= termhelper
 endif
+DISOBJS:=dis.o disasm.o backend.o 68kinst.o tern.o vos_program_module.o util.o
+MTESTOBJS:=trans.o serialize.o $(M68KOBJS) $(TRANSOBJS) util.o
+ZTESTOBJS:=ztestrun.o serialize.o $(Z80OBJS) $(TRANSOBJS) util.o
+CPMOBJS:=blastcpm.o util.o serialize.o $(Z80OBJS) $(TRANSOBJS)
 
-ifeq ($(MAKECMDGOALS),libblastem.$(SO))
-CFLAGS+= -fpic -DIS_LIB -DDISABLE_ZLIB
-endif
+LIBCFLAGS=$(CFLAGS) -fpic -DIS_LIB -DDISABLE_ZLIB
+
+-include $(MAINOBJS:%.o=$(OBJDIR)/%.d)
+-include $(LIBOBJS:%.o=$(LIBOBJDIR)/%.d)
+-include $(DISOBJS:.o=$(OBJDIR)/%.d)
+-include $(OBJDIR)/trans.d
+-include $(OBJDIR)/ztestrun.d
+-include $(OBJDIR)/blastcpm.d
 
 all : $(ALL)
 
-libblastem.$(SO) : $(LIBOBJS)
+$(OBJDIR) :
+	mkdir -p $(OBJDIR)/nuklear_ui
+	mkdir -p $(OBJDIR)/zlib
+
+$(LIBOBJDIR) :
+	mkdir -p $(LIBOBJDIR)/zlib
+
+libblastem.$(SO) : $(LIBOBJS:%.o=$(LIBOBJDIR)/%.o)
 	$(CC) -shared -o $@ $^ $(LDFLAGS)
 
-blastem$(EXE) : $(MAINOBJS)
+blastem$(EXE) : $(MAINOBJS:%.o=$(OBJDIR)/%.o)
 	$(CC) -o $@ $^ $(LDFLAGS) $(PROFFLAGS)
 	$(FIXUP) ./$@
 
-blastjag$(EXE) : jaguar.o jag_video.o $(RENDEROBJS) serialize.o $(M68KOBJS) $(TRANSOBJS) $(CONFIGOBJS)
+termhelper : $(OBJDIR)/termhelper.o
 	$(CC) -o $@ $^ $(LDFLAGS)
 
-termhelper : termhelper.o
-	$(CC) -o $@ $^ $(LDFLAGS)
-
-dis$(EXE) : dis.o disasm.o backend.o 68kinst.o tern.o vos_program_module.o util.o
+dis$(EXE) : $(DISOBJS:%.o=$(OBJDIR)/%.o)
 	$(CC) -o $@ $^ $(OPT)
 
-jagdis : jagdis.o jagcpu.o tern.o
-	$(CC) -o $@ $^
+jagdis : $(OBJDIR)/jagdis.o $(OBJDIR)/jagcpu.o $(OBJDIR)/tern.o
+	$(CC) -o $@ $^ $(OPT)
 
-zdis$(EXE) : zdis.o z80inst.o
-	$(CC) -o $@ $^
-
-libemu68k.a : $(M68KOBJS) $(TRANSOBJS)
-	ar rcs libemu68k.a $(M68KOBJS) $(TRANSOBJS)
-
-trans : trans.o serialize.o $(M68KOBJS) $(TRANSOBJS) util.o
+zdis$(EXE) : $(OBJDIR)/zdis.o $(OBJDIR)/z80inst.o
 	$(CC) -o $@ $^ $(OPT)
 
-transz80 : transz80.o $(Z80OBJS) $(TRANSOBJS)
-	$(CC) -o transz80 transz80.o $(Z80OBJS) $(TRANSOBJS)
+trans : $(MTESTOBJS:%.o=$(OBJDIR)/%.o)
+	$(CC) -o $@ $^ $(OPT)
 
-ztestrun : ztestrun.o serialize.o $(Z80OBJS) $(TRANSOBJS)
-	$(CC) -o ztestrun $^ $(OPT)
+ztestrun : $(ZTESTOBJS:%.o=$(OBJDIR)/%.o)
+	$(CC) -o $@ $^ $(OPT)
 
-ztestgen : ztestgen.o z80inst.o
-	$(CC) -ggdb -o ztestgen ztestgen.o z80inst.o
+ztestgen : $(OBJDIR)/ztestgen.o $(OBJDIR)/z80inst.o
+	$(CC) -o $@ $^ $(OPT)
 
-blastcpm : blastcpm.o util.o serialize.o $(Z80OBJS) $(TRANSOBJS)
+blastcpm : $(CPMOBJS:%.o=$(OBJDIR)/%.o)
 	$(CC) -o $@ $^ $(OPT) $(PROFFLAGS)
 
-test : test.o vdp.o
-	$(CC) -o test test.o vdp.o
-
-testgst : testgst.o gst.o
-	$(CC) -o testgst testgst.o gst.o
-
-test_x86 : test_x86.o gen_x86.o gen.o
-	$(CC) -o test_x86 test_x86.o gen_x86.o gen.o
-
-test_arm : test_arm.o gen_arm.o mem.o gen.o
-	$(CC) -o test_arm test_arm.o gen_arm.o mem.o gen.o
-
-test_int_timing : test_int_timing.o vdp.o
-	$(CC) -o $@ $^
-
-gen_fib : gen_fib.o gen_x86.o mem.o
-	$(CC) -o gen_fib gen_fib.o gen_x86.o mem.o
-
-offsets : offsets.c z80_to_x86.h m68k_core.h
-	$(CC) -o offsets offsets.c
-
-vos_prog_info : vos_prog_info.o vos_program_module.o
-	$(CC) -o vos_prog_info vos_prog_info.o vos_program_module.o
+vos_prog_info : $(OBJDIR)/vos_prog_info.o $(OBJDIR)/vos_program_module.o
+	$(CC) -o $@ $^ $(OPT)
 
 m68k.c : m68k.cpu cpu_dsl.py
 	./cpu_dsl.py -d call $< > $@
@@ -397,14 +382,23 @@
 %.db.c : %.db
 	sed $< -e 's/"/\\"/g' -e 's/^\(.*\)$$/"\1\\n"/' -e'1s/^\(.*\)$$/const char $(shell echo $< | tr '.' '_')_data[] = \1/' -e '$$s/^\(.*\)$$/\1;/' > $@
 
-%.o : %.S
-	$(CC) -c -o $@ $<
+$(OBJDIR)/%.o : %.S | $(OBJDIR)
+	$(CC) -c -MMD -o $@ $<
+
+$(OBJDIR)/%.o : %.c | $(OBJDIR)
+	$(CC) $(CFLAGS) -c -MMD -o $@ $<
+
+$(OBJDIR)/%.o : %.m | $(OBJDIR)
+	$(CC) $(CFLAGS) -c -MMD -o $@ $<
 
-%.o : %.c
-	$(CC) $(CFLAGS) -c -o $@ $<
+$(LIBOBJDIR)/%.o : %.S | $(LIBOBJDIR)
+	$(CC) -c -MMD -o $@ $<
 
-%.o : %.m
-	$(CC) $(CFLAGS) -c -o $@ $<
+$(LIBOBJDIR)/%.o : %.c | $(LIBOBJDIR)
+	$(CC) $(LIBCFLAGS) -c -MMD -o $@ $<
+
+$(LIBOBJDIR)/%.o : %.m | $(LIBOBJDIR)
+	$(CC) $(LIBCFLAGS) -c -MMD -o $@ $<
 
 %.png : %.xcf
 	convert -background none -flatten $< $@
@@ -433,4 +427,4 @@
 tmss.md : font.tiles
 
 clean :
-	rm -rf $(ALL) trans ztestrun ztestgen *.o nuklear_ui/*.o zlib/*.o
+	rm -rf $(ALL) trans ztestrun ztestgen *.o nuklear_ui/*.o zlib/*.o $(OBJDIR)