OS := $(shell uname) SDL2 := /opt/sdl2 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) ifeq ($(OS), Linux) FLAGS_LNK := $(FLAGS) -pthread -Wall -Wextra LIBS := $(SDL2_LIB)/libSDL2.a -ldl -lm endif ifeq ($(OS), Darwin) FLAGS_LNK := $(FLAGS) -Wall -Wextra LIBS := $(SDL2_LIB)/libSDL2.a \ -framework AppKit \ -framework AudioToolbox \ -framework Carbon \ -framework CoreAudio \ -framework CoreFoundation \ -framework CoreGraphics \ -framework CoreVideo \ -framework ForceFeedback \ -framework IOKit \ -l iconv endif HEADERS := $(wildcard cpu/*.h) $(wildcard emu/*.h) all: buchla 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 EMU_O := $(EMU_C:.c=.o) EMU_OP := $(EMU_O:%=build/%) build/%.o: emu/%.c $(HEADERS) | build gcc $(FLAGS_EMU) -c -o $@ $< buchla: $(CPU_OP) $(GEN_OP) $(EMU_OP) gcc $(FLAGS_LNK) -o buchla \ $(CPU_OP) $(GEN_OP) $(EMU_OP) \ $(LIBS) run: buchla ./buchla val: buchla valgrind --leak-resolution=high --track-fds=yes --leak-check=full \ --show-reachable=yes --suppressions=misc/buchla.supp ./buchla clean: rm -rf build rm -f buchla