# HG changeset patch # User Michael Pavone # Date 1739509367 28800 # Node ID 6a84a38b3cf94c009f8f7f1683300241d9d2f1b2 # Parent 251cc75574aff67b7bb7c4fe1cc2ee93be36f92f Handle dependencies properly in makefile diff -r 251cc75574af -r 6a84a38b3cf9 Makefile --- 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)