@@ -47,8 +47,21 @@ OBJS_EXT :=
4747
4848ifeq ($(call has, SYSTEM) , 1)
4949OBJS_EXT += system.o
50- OBJS_EXT += plic.o
51- OBJS_EXT += uart.o
50+ endif
51+
52+ ifeq ($(call has, GDBSTUB) , 1)
53+ GDBSTUB_OUT = $(abspath $(OUT ) /mini-gdbstub)
54+ GDBSTUB_COMM = 127.0.0.1:1234
55+ src/mini-gdbstub/Makefile :
56+ git submodule update --init $(dir $@ )
57+ GDBSTUB_LIB := $(GDBSTUB_OUT ) /libgdbstub.a
58+ $(GDBSTUB_LIB ) : src/mini-gdbstub/Makefile
59+ $(MAKE ) -C $(dir $< ) O=$(dir $@ )
60+ OBJS_EXT += gdbstub.o breakpoint.o
61+ CFLAGS += -D'GDBSTUB_COMM="$(GDBSTUB_COMM ) "'
62+ LDFLAGS += $(GDBSTUB_LIB ) -pthread
63+ gdbstub-test : $(BIN )
64+ $(Q ) .ci/gdbstub-test.sh && $(call notice, [OK])
5265endif
5366
5467# Integer Multiplication and Division instructions
@@ -230,11 +243,22 @@ ifeq ($(call has, GDBSTUB), 1)
230243$(OBJS ) : $(GDBSTUB_LIB )
231244endif
232245
246+ # Peripherals for system emulation
247+ ifeq ($(call has, SYSTEM) , 1)
248+ DEV_OUT := $(OUT ) /devices
249+ DEV_SRC := src/devices
250+ $(DEV_OUT ) /% .o : $(DEV_SRC ) /% .c $(deps_emcc )
251+ $(VECHO ) " CC\t$@ \n"
252+ $(Q )$(CC ) -o $@ $(CFLAGS ) $(CFLAGS_emcc ) -c -MMD -MF $@ .d $<
253+ DEV_OBJS := $(patsubst $(DEV_SRC ) /% .c, $(DEV_OUT ) /% .o, $(wildcard $(DEV_SRC ) /* .c) )
254+ deps += $(DEV_OBJS:%.o=%.o.d )
255+ endif
256+
233257$(OUT ) /% .o : src/% .c $(deps_emcc )
234258 $(VECHO ) " CC\t$@ \n"
235259 $(Q )$(CC ) -o $@ $(CFLAGS ) $(CFLAGS_emcc ) -c -MMD -MF $@ .d $<
236260
237- $(BIN ) : $(OBJS )
261+ $(BIN ) : $(OBJS ) $( DEV_OBJS )
238262 $(VECHO ) " LD\t$@ \n"
239263 $(Q )$(CC ) -o $@ $(CFLAGS_emcc ) $^ $(LDFLAGS )
240264
@@ -331,7 +355,7 @@ endif
331355endif
332356
333357clean :
334- $(RM ) $(BIN ) $(OBJS ) $(HIST_BIN ) $(HIST_OBJS ) $(deps ) $(WEB_FILES ) $(CACHE_OUT ) src/rv32_jit.c
358+ $(RM ) $(BIN ) $(OBJS ) $(DEV_OBJS ) $( HIST_BIN ) $(HIST_OBJS ) $(deps ) $(WEB_FILES ) $(CACHE_OUT ) src/rv32_jit.c
335359distclean : clean
336360 -$(RM ) $(DOOM_DATA ) $(QUAKE_DATA )
337361 $(RM ) -r $(TIMIDITY_DATA )
0 commit comments