OS := $(shell uname) ifndef WIN GCC := gcc SDL2 := /opt/sdl2 EXT := else GCC := x86_64-w64-mingw32-gcc SDL2 := /opt/sdl2-win EXT := .exe endif SDL2_INC := $(SDL2)/include SDL2_LIB := $(SDL2)/lib FLAGS := -std=c99 -O2 -gdwarf-4 FLAGS_CPU := $(FLAGS) -pthread -I cpu -I build FLAGS_EMU := $(FLAGS) -pthread \ -fno-strict-aliasing -fno-inline -fno-omit-frame-pointer \ -Wall -Wextra \ -Wpedantic -Wconversion -Wsign-conversion -Wshadow \ -Wstrict-prototypes -Wmissing-declarations -Wredundant-decls \ -I cpu -I emu -I build -I $(SDL2_INC) FLAGS_AUX := $(FLAGS) -Wall -Wextra \ -Wpedantic -Wconversion -Wsign-conversion -Wshadow \ -Wstrict-prototypes -Wmissing-declarations -Wredundant-decls ifndef WIN ifeq ($(OS), Linux) FLAGS_EMU += -D EMU_LINUX FLAGS_LNK := $(FLAGS) -pthread -Wall -Wextra LIBS := $(SDL2_LIB)/libSDL2.a \ $(SDL2_LIB)/libSDL2_net.a \ $(SDL2_LIB)/libSDL2_ttf.a \ $(SDL2_LIB)/libfreetype.a \ -ldl -lm endif ifeq ($(OS), Darwin) FLAGS_EMU += -D EMU_OS_X FLAGS_LNK := $(FLAGS) -Wall -Wextra LIBS := $(SDL2_LIB)/libSDL2.a \ $(SDL2_LIB)/libSDL2_net.a \ $(SDL2_LIB)/libSDL2_ttf.a \ $(SDL2_LIB)/libfreetype.a \ -framework AppKit \ -framework AudioToolbox \ -framework Carbon \ -framework CoreAudio \ -framework CoreFoundation \ -framework CoreGraphics \ -framework CoreVideo \ -framework ForceFeedback \ -framework IOKit \ -l iconv endif else FLAGS_EMU += -D EMU_WIN FLAGS_LNK := $(FLAGS) -Wall -Wextra LIBS := -l mingw32 \ $(SDL2_LIB)/libSDL2.a \ $(SDL2_LIB)/libSDL2main.a \ $(SDL2_LIB)/libSDL2_net.a \ $(SDL2_LIB)/libSDL2_ttf.a \ $(SDL2_LIB)/libfreetype.a \ -l gdi32 \ -l imm32 \ -l iphlpapi \ -l ole32 \ -l oleaut32 \ -l version \ -l winmm \ -l ws2_32 endif HEADERS := $(wildcard cpu/*.h) $(wildcard emu/*.h) all: buchla$(EXT) buchla.disk build: mkdir build build/gen: | build gcc $(FLAGS) -o build/gen cpu/m68kmake.c GEN_C := m68kopac.c m68kopdm.c m68kopnz.c m68kops.c GEN_H := m68kops.h GEN_CP := $(GEN_C:%=build/%) GEN_HP := $(GEN_H:%=build/%) GEN_O := $(GEN_C:.c=.o) GEN_OP := $(GEN_O:%=build/%) $(GEN_CP) $(GEN_HP): \ build/gen | build cd cpu; ../build/gen ../build build/%.o: build/%.c $(HEADERS) $(GCC) $(FLAGS_CPU) -c -o $@ $< CPU_C := m68kcpu.c m68kdasm.c CPU_O := $(CPU_C:.c=.o) CPU_OP := $(CPU_O:%=build/%) build/%.o: cpu/%.c $(HEADERS) $(GEN_HP) | build $(GCC) $(FLAGS_CPU) -c -o $@ $< EMU_C := main.c cpu.c vid.c fpu.c tim.c lcd.c ser.c mid.c fdd.c snd.c \ led.c kbd.c sdl.c gdb.c EMU_O := $(EMU_C:.c=.o) EMU_OP := $(EMU_O:%=build/%) build/%.o: emu/%.c $(HEADERS) | build $(GCC) $(FLAGS_EMU) -c -o $@ $< buchla$(EXT): $(CPU_OP) $(GEN_OP) $(EMU_OP) $(GCC) $(FLAGS_LNK) -o buchla$(EXT) \ $(CPU_OP) $(GEN_OP) $(EMU_OP) \ $(LIBS) mkdisk$(EXT): emu/mkdisk.c $(GCC) $(FLAGS_AUX) -o mkdisk$(EXT) emu/mkdisk.c buchla.disk: mkdisk$(EXT) midas.abs ./mkdisk$(EXT) run: buchla$(EXT) buchla.disk ./buchla$(EXT) ${EMU_OPTS} val: buchla$(EXT) buchla.disk valgrind --leak-resolution=high --track-fds=yes --leak-check=full \ --show-reachable=yes --suppressions=misc/buchla.supp \ ./buchla$(EXT) ${EMU_OPTS} clean: rm -rf build rm -f buchla$(EXT) rm -f mkdisk$(EXT) rm -f buchla.disk