ifndef PLATFORM PLATFORM := native endif ifneq ($(PLATFORM),$(filter $(PLATFORM),amiga windows-32 windows-64 native native-32 native-64)) DUMMY := $(error Unsupported platform $(PLATFORM)) endif BUILD_DIR := build/$(PLATFORM) MKDIR_DUMMY := $(shell mkdir -p $(BUILD_DIR)) all: $(BUILD_DIR)/Shrinkler # Common flags CFLAGS := -Wall -Wno-sign-compare LFLAGS := -s ifdef DEBUG CFLAGS += -g -DDEBUG LFLAGS := else CFLAGS += -O3 endif ifdef PROFILE CFLAGS += -fno-inline -fno-inline-functions LFLAGS := endif ifeq ($(PLATFORM),amiga) # Amiga build, using GCC and ixemul TOOLCHAIN_DIR := toolchain AMIGA_GCC_DIR := $(TOOLCHAIN_DIR)/GCC-4.5.0-m68k-amigaos-cygwin/usr/local/amiga BINUTILS_DIR := $(TOOLCHAIN_DIR)/amiga-binutils INCLUDE_DIR := $(TOOLCHAIN_DIR)/C++include/include LIB_DIR1 := $(TOOLCHAIN_DIR)/C++include/lib LIB_DIR2 := $(AMIGA_GCC_DIR)/lib/gcc/m68k-amigaos/4.5.0 LIB_DIR3 := $(TOOLCHAIN_DIR)/ixemul-sdk/lib CC := $(AMIGA_GCC_DIR)/bin/m68k-amigaos-g++ CFLAGS += -m68000 INCLUDE := -I $(INCLUDE_DIR)/c++/4.3.2 -I $(INCLUDE_DIR)/c++/4.3.2/m68k-amigaos -I $(INCLUDE_DIR) ASM := $(BINUTILS_DIR)/as ASMFLAGS := LINK := $(BINUTILS_DIR)/ld STARTUP := $(LIB_DIR3)/crt0.o LIBS := -L $(LIB_DIR1) -L $(LIB_DIR2) -L $(LIB_DIR3) -lstdc++ -lgcc -lc $(BUILD_DIR)/%.o: %.cpp $(CC) $(CFLAGS) $(INCLUDE) $< -S -o $(@:%.o=%.s) $(ASM) $(ASMFLAGS) $(@:%.o=%.s) -o $@ else ifeq ($(PLATFORM),windows-32) # 32-bit MinGW build CC := i686-w64-mingw32-g++ LINK := i686-w64-mingw32-g++ LFLAGS += -static-libgcc -static-libstdc++ else ifeq ($(PLATFORM),windows-64) # 64-bit MinGW build CC := x86_64-w64-mingw32-g++ LINK := x86_64-w64-mingw32-g++ LFLAGS += -static-libgcc -static-libstdc++ else # Native build CC := g++ LINK := g++ ifeq ($(PLATFORM),native-32) CFLAGS += -m32 endif ifeq ($(PLATFORM),native-64) CFLAGS += -m64 endif endif endif # Common setup for non-Amiga builds INCLUDE := STARTUP := LIBS := $(BUILD_DIR)/%.o: %.cpp $(CC) $(CFLAGS) $(INCLUDE) $< -c -o $@ endif $(BUILD_DIR)/Shrinkler.o: *.h Header1.dat Header1T.dat Header2.dat OverlapHeader.dat OverlapHeaderT.dat MiniHeader.dat %.dat: %.bin python -c 'for b in open("$^", "rb").read(): print ("0x%02X," % ord(b)),' > $@ $(BUILD_DIR)/Shrinkler: $(BUILD_DIR)/Shrinkler.o $(LINK) $(LFLAGS) $(STARTUP) $< $(LIBS) -o $@ clean: rm -rf build