view Makefile @ 84:969fff31e495

Fix mingw cross build.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 19 Feb 2013 00:40:26 +0200
parents 1096f6ffd15c
children 011e65a6367b
line wrap: on
line source

### Global settings
CFLAGS += -W -Wall -O3
LDFLAGS +=
RANLIB=ranlib

# Prefix for x86-32 win32 MinGW tools (gcc, ar, ld, ranlib)
MINGW32_PREFIX=i686-w64-mingw32-
MINGW32_PATH=/usr/i686-w64-mingw32

# Prefix for x86-64 win64 MinGW tools
MINGW64_PREFIX=x86_64-w64-mingw32-
MINGW64_PATH=/usr/x86_64-w64-mingw32

### Subdirectories to build
SUBDIRS=pwplib peluce nykyaeka oldchsool pwpzax

### Show some help
help:
	@if test ! -f config.mak; then \
	echo "PWPLib build system"; \
	echo "Usage: make <target>"; \
	echo ""; \
	echo "sdl        - LibSDL video/audio for POSIX style systems"; \
	echo "unix       - Terminal only POSIX style systems"; \
	echo "linux      - Like unix, but with Linux console and OSS audio support"; \
	echo "hpux       - HP-UX (untested now)"; \
	echo "sdl-win32  - LibSDL for Win32, cross compilation via MinGW toolchain"; \
	echo "sdl-win64  - Like above, but for Win64 via MinGW64"; \
	echo ""; \
	else \
	echo "Configured as:"; \
	cat config.mak; \
	echo "To re-build: 'make all'"; \
	echo "To reconfigure: 'make clean' and 'make <target>'"; \
	fi

endianchk: endianchk.c
	$(CC) -o $@ $<

config.mak:
	@echo "" > $@
	@echo "# Build target: $(XTARGET)" >> $@
	@echo "XTARGET=$(XTARGET)" >> $@
	@echo "CC=$(PREFIX)$(CC)" >> $@
	@echo "AR=$(PREFIX)$(AR)" >> $@
	@echo "LD=$(PREFIX)$(LD)" >> $@
	@echo "RANLIB=$(PREFIX)$(RANLIB)" >> $@
	@echo "CFLAGS=$(CFLAGS) $(XCFLAGS)" >> $@
	@echo "LDFLAGS=$(LDFLAGS) $(XLDFLAGS)" >> $@
	@echo "BINEXT=$(BINEXT)" >> $@
	@echo "" >> $@

### Build sub targets	
all:
	@for subdir in $(SUBDIRS); do if ! $(MAKE) -C "$$subdir"; then echo "Make returned $?"; exit 1; fi; done

pwplib.a:
	$(MAKE) -C pwplib

clean:
	@for subdir in $(SUBDIRS); do $(MAKE) -C "$$subdir" clean; done
	$(RM) config.mak endianchk

### Major targets
unix: endianchk
	$(RM) config.mak && endianflags=`./endianchk` && \
	$(MAKE) config.mak XTARGET="$@" XCFLAGS="-DUNIX $$endianflags" XLDFLAGS="-lm" && \
	$(MAKE) all

hpux:
	$(RM) config.mak && \
	$(MAKE) config.mak XTARGET="$@" XCFLAGS="-DUNIX -DBIG_ENDIAN -DDRIVE_HPUX" XLDFLAGS="-lm" && \
	$(MAKE) all

linux: endianchk
	$(RM) config.mak && endianflags=`./endianchk` && \
	$(MAKE) config.mak XTARGET="$@" XCFLAGS="-DUNIX -DDRIVE_LINUXCON -DDRIVE_OSS $$endianflags" XLDFLAGS="-lm" && \
	$(MAKE) all

sdl: endianchk
	$(RM) config.mak && endianflags=`./endianchk` && \
	$(MAKE) config.mak XTARGET="$@" XCFLAGS="-DUNIX -DDRIVE_SDL $$endianflags `sdl-config --cflags`" XLDFLAGS="`sdl-config --libs` -lm" && \
	$(MAKE) all

sdl-win32:
	$(RM) config.mak && \
	$(MAKE) config.mak PREFIX="$(MINGW32_PREFIX)" BINEXT=".exe" CC="gcc" \
	XTARGET="$@" XCFLAGS="-DDRIVE_SDL `$(MINGW32_PATH)/bin/sdl-config --cflags`" \
	XLDFLAGS="-s -L$(MINGW32_PATH)/lib/ `$(MINGW32_PATH)/bin/sdl-config --libs` -lSDL -lmingw32 -lm" && \
	$(MAKE) all

sdl-win64:
	$(RM) config.mak && \
	$(MAKE) config.mak PREFIX="$(MINGW64_PREFIX)" BINEXT=".exe" CC="gcc" \
	XTARGET="$@" XCFLAGS="-DDRIVE_SDL `$(MINGW64_PATH)/bin/sdl-config --cflags`" \
	XLDFLAGS="-s -L$(MINGW64_PATH)/lib/ `$(MINGW64_PATH)/bin/sdl-config --libs` -lSDL -lmingw32 -lm" && \
	$(MAKE) all

PACKAGE=pwpunix-1.96-sdl
ZIPFILE=$(PACKAGE)-win32-bin.zip

README.txt: README
	unix2dos -n $< $@

sdl-win32-zip: clean sdl-win32 README.txt SDL.dll
	$(RM) $(ZIPFILE)
	for subdir in $(SUBDIRS); do tmp=`ls $$subdir/*.exe`; if test -f "$$tmp"; then cp "$$tmp" .; fi; done; \
	zip -9vv $(ZIPFILE) *.exe README.txt SDL.dll

hg-tar:
	hg archive -t tgz $(PACKAGE).tar.gz

.dummy: