HOSTCXX:=$(CXX) ifeq ($(TARGET),SDL) # SDL CC=gcc CXX=g++ LD=g++ STRIP=strip SDL_INCLUDE=$(shell pkg-config --cflags sdl2) SDL_LIBS=$(shell pkg-config --libs sdl2) CFLAGS=-g -DBUILD_SDL $(SDL_INCLUDE) CXXFLAGS=$(CFLAGS) LDFLAGS= LDLIBS=$(SDL_LIBS) -lstdc++ EXE=game EXTRA_FILES= SYSTEM=SDL PLATFORM_OBJ= else ifeq ($(TARGET),SDLWIN) # SDL on Windows CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ LD=i686-w64-mingw32-g++ STRIP=i686-w64-mingw32-strip WINDRES=i686-w64-mingw32-windres SDL_INCLUDE=-I/usr/i686-w64-mingw32/include/SDL2 SDL_LDFLAGS=-L/usr/i686-w64-mingw32/lib SDL_LIBS=-lmingw32 -lSDL2main -lSDL2.dll CFLAGS=-g -DBUILD_SDL $(SDL_INCLUDE) -m32 CXXFLAGS=$(CFLAGS) LDFLAGS=$(SDL_LDFLAGS) #LDFLAGS+=-mwindows LDLIBS=$(SDL_LIBS) -lstdc++ EXE=game.exe EXTRA_FILES=$(shell find /usr/i686-w64-mingw32/ -iname 'SDL2.dll' | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/i686-w64-mingw32/ -iname 'libgcc_s_dw2-1.dll' | grep win32 | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/i686-w64-mingw32/ -iname 'libgcc_s_seh-1.dll' | grep win32 | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/i686-w64-mingw32/ -iname 'libstdc++-6.dll' | grep win32 | head -n1) SYSTEM=SDL PLATFORM_OBJ=app.res else ifeq ($(TARGET),SDLWIN64) # SDL on Windows CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ LD=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip WINDRES=x86_64-w64-mingw32-windres SDL_INCLUDE=-I/usr/x86_64-w64-mingw32/include/SDL2 SDL_LDFLAGS=-L/usr/x86_64-w64-mingw32/lib SDL_LIBS=-lmingw32 -lSDL2main -lSDL2.dll CFLAGS=-g -DBUILD_SDL $(SDL_INCLUDE) -m64 CXXFLAGS=$(CFLAGS) LDFLAGS=$(SDL_LDFLAGS) #LDFLAGS+=-mwindows LDLIBS=$(SDL_LIBS) -lstdc++ EXE=game.exe EXTRA_FILES=$(shell find /usr/x86_64-w64-mingw32/ -iname 'SDL2.dll' | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/x86_64-w64-mingw32/ -iname 'libgcc_s_dw2-1.dll' | grep win32 | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/x86_64-w64-mingw32/ -iname 'libgcc_s_seh-1.dll' | grep win32 | head -n1) EXTRA_FILES+=$(shell find /usr/lib/gcc/x86_64-w64-mingw32/ -iname 'libstdc++-6.dll' | grep win32 | head -n1) SYSTEM=SDL PLATFORM_OBJ=app.res else # DOS CC=i586-pc-msdosdjgpp-gcc CXX=i586-pc-msdosdjgpp-g++ LD=i586-pc-msdosdjgpp-g++ STRIP=i586-pc-msdosdjgpp-strip # FIXME: we override the host compiler to build tools here, maybe move tools to a separate Makefile HOSTCXX=g++ CFLAGS=-O3 -march=i486 CXXFLAGS=$(CFLAGS) LDFLAGS= LDLIBS= EXE=game.exe DPMI_HOST=CWSDPMI.EXE EXTRA_FILES=install.bat $(DPMI_HOST) SYSTEM=DOS PLATFORM_OBJ= endif OBJ=main.o OBJ+=$(PLATFORM_OBJ) OBJ+=$(patsubst %.cpp,%.o,$(wildcard graphics/*.cpp)) OBJ+=$(patsubst %.cpp,%.o,$(wildcard audio/*.cpp)) OBJ+=$(patsubst %.cpp,%.o,$(wildcard util/*.cpp)) OBJ+=$(patsubst %.cpp,%.o,$(wildcard scenes/*.cpp)) ifeq ($(SYSTEM),SDL) OBJ+=$(patsubst %.cpp,%.o,$(wildcard system/sdl/*.cpp)) else ifeq ($(SYSTEM),DOS) OBJ+=$(patsubst %.cpp,%.o,$(wildcard system/dos/*.cpp)) else $(error Unknown SYSTEM variable:$(SYSTEM)) endif CONVERTER_CXX=$(HOSTCXX) CONVERTER_EXE=gbmconv CONVERTER_SRC=converter.cpp CONVERTER_SRC+=graphics/Bitmap.cpp CONVERTER_SRC+=util/Files.cpp util/Bmp.cpp util/Gbm.cpp COMPILED_GFX_ASSETS=assets/font1.gbm assets/cow.gbm assets/witch.gbm GFX_ASSETS=assets/bg.bmp $(COMPILED_GFX_ASSETS) MUSIC_ASSETS=assets/rain.rad assets/getup.rad assets/spiral.rad RELEASE_FILES=$(EXE) $(GFX_ASSETS) $(MUSIC_ASSETS) $(EXTRA_FILES) FLOPPY_IMG=game.img .PHONY: all clean release debug assets floppy all: $(CONVERTER_EXE) $(EXE) clean: ; rm -rf $(OBJ) $(EXE) $(CONVERTER_EXE) $(FLOPPY_IMG) $(COMPILED_GFX_ASSETS) release debug release: all assets; $(STRIP) $(EXE); upx $(EXE); mkdir -p release; cp -Rv $(RELEASE_FILES) release/ debug: all assets; mkdir -p debug; cp -Rv $(RELEASE_FILES) debug/ floppy: release; dd if=/dev/zero of=$(FLOPPY_IMG) bs=512 count=2880 && mkfs.fat -F12 $(FLOPPY_IMG) && mcopy -i $(FLOPPY_IMG) -s release/* :: $(CONVERTER_EXE): $(CONVERTER_SRC); $(CONVERTER_CXX) -o $@ $(CONVERTER_SRC) $(EXE): $(OBJ); $(LD) $(LDFLAGS) -o $@ $(OBJ) $(LDLIBS) %.o : %.c ; $(CC) $(CFLAGS) -c $< -o $@ %.o : %.cpp ; $(CXX) $(CXXFLAGS) -c $< -o $@ assets: $(CONVERTER_EXE) $(GFX_ASSETS) %.gbm : %.bmp %_m.bmp $(CONVERTER_EXE) ; ./$(CONVERTER_EXE) $@ $^ %.res : %.rc ; $(WINDRES) $< -O coff -o $@