xwords/xwords4/wince/Makefile
2010-01-27 05:45:56 +00:00

310 lines
8.5 KiB
Makefile

# -*- compile-command: "make -j3 TARGET_OS=wince DEBUG=TRUE"; -*-
# Copyright 2002-2009 by Eric House (xwords@eehouse.org). All rights
# reserved.
# This Makefile is meant to allow building Crosswords for PocketPC and
# Windows using Linux. As of March 2006, it compiles and runs on
# PocketPC as well as when built with eVC. Better, since bugs have
# been fixed since then. It also runs on Windows natively and under
# WINE.
#
# I'm bulding on Debian's "testing" distribution, current as of the
# above date. Here are some of the packages I had to install to build
# for win32. I make no guarantees this list is complete. Patches are
# required to the pocketpc-sdk and mingw32 packages to build. They've
# been submitted to the maintainers and should be included soon.
# Contact me if you need them in the interim.
#
# mingw32 mingw32-binutils mingw32-runtime pocketpc-sdk
SVNREV = $(shell svnversion -n .. | tr ':' '_')
PLATFORM = wince
TARGET_OS ?= win32
RELAY_NAME_DEFAULT ?= eehouse.org
RELAY_PORT_DEFAULT ?= 10999
NATIVE_CC = gcc
STRIDS = strids
#TARGET_OS = wince
#NO_DRAW = -DNO_DRAW
# The preferred build environment for wince is now cegcc. Debian's
# pocketpc-sdk works in combination with the mingw projects headers,
# but not without effort. cegcc has its own version of those headers
# that it refers to without need for a -I flag. They work well. But
# I'd like to retain the ability to build using pocketpc-sdk if
# possible.
# USE_RAW_MINGW = -DUSE_RAW_MINGW
# arm-wince-mingw32ce for cegcc
ifdef USE_RAW_MINGW
MINGW_INC_PATH ?= -I/usr/i586-mingw32msvc/include
CE_ARCH = arm-wince-pe
else
MINGW_INC_PATH = #in case it's in env
#CE_ARCH = arm-wince-mingw32ce
CE_ARCH = arm-mingw32ce
endif
CEOPT_ROOT ?= /opt
# This requires custom Debian pocketpc-sdk package at the moment
HAVE_COMMCTRL = 1
# Dialog to browse fonts on device. I doubt I want to ship with this.
# CHOOSE_FONTS = -DALLOW_CHOOSE_FONTS
ifeq ($(TARGET_OS),wince)
#SMS = -DXWFEATURE_SMS
RELAY = -DXWFEATURE_RELAY
#RELAY = -DXWFEATURE_RELAY -DCOMMS_HEARTBEAT
# IPDIRECT = -DXWFEATURE_IP_DIRECT
# BLUETOOTH = -DXWFEATURE_BLUETOOTH
CC = ${CE_ARCH}-gcc
WINDRES = ${CE_ARCH}-windres
STRIP = ${CE_ARCH}-strip
ifdef USE_RAW_MINGW
CELIBS = -L/usr/arm-wince-pe/lib
else
CELIBS = -L${CEOPT_ROOT}/${CE_ARCH}/lib/ -lws2
endif
#STANDALONE = -DXWFEATURE_STANDALONE_ONLY
STANDALONE = -DPREV_WAS_STANDALONE_ONLY
COLOR_SEL = -DMY_COLOR_SEL
CFLAGS += -D_WIN32_WCE=0x0400 -D_WIN32_IE=0x0400 -DUNDER_CE \
-D__USE_W32_SOCKETS \
$(STANDALONE) $(USE_RAW_MINGW) -DDRAW_LINK_DIRECT \
-DXWFEATURE_TURNCHANGENOTIFY \
-fdollars-in-identifiers -D__W32API_USE_DLLIMPORT__
# back key should raise focus on main board and backspace in edit controls
CFLAGS += -DOVERRIDE_BACKKEY
RESFLAGS += -D_WIN32_WCE=0x0400
LFLAGS += -Wl,--major-subsystem-version,4,--minor-subsystem-version,20
ifdef HAVE_COMMCTRL
CELIBS += -lcommctrl -laygshell
else
CFLAGS += -DCANT_DO_CMDBAR
endif
CELIBS += -static
else # ifeq ($(TARGET_OS),wince)
ifeq ($(TARGET_OS),win32)
#STANDALONE = -DXWFEATURE_STANDALONE_ONLY
STANDALONE = -DPREV_WAS_STANDALONE_ONLY
#BLUETOOTH = -DXWFEATURE_BLUETOOTH
#SMS = -DXWFEATURE_SMS
RELAY = -DXWFEATURE_RELAY
# IPDIRECT = -DXWFEATURE_IP_DIRECT
CC = i586-mingw32msvc-gcc
WINDRES = i586-mingw32msvc-windres
STRIP = i586-mingw32msvc-strip
CELIBS += -lws2_32
CFLAGS += -DCANT_DO_CMDBAR -DDRAW_LINK_DIRECT -DXWFEATURE_TURNCHANGENOTIFY
# CFLAGS += -DFORCE_FONT="L\"Segoe Condensed\""
#CFLAGS += -DFORCE_HEIGHT=240 -DFORCE_WIDTH=320
endif
endif
ifdef RELAY
ifneq ($(DEBUG),TRUE)
RELAY += -DRELAY_NOEDIT_ADDR
endif
endif
# CFLAGS += -DFORCE_SCROLL=3
CFLAGS += -DARM -I./ -I../common -I../relay
CFLAGS += -Wall -Wunused-parameter
CFLAGS += $(BLUETOOTH) $(RELAY) $(SMS) $(IPDIRECT) $(STANDALONE) $(COLOR_SEL) \
$(CHOOSE_FONTS) $(NO_DRAW) -DUSE_BUFQUEUE
SVNDEF = -DSVN_REV='\"$(SVNREV)\"'
CFLAGS += $(SVNDEF)
RESFLAGS += $(SVNDEF)
# warn upgrading users of new dict location
CFLAGS += -DKEYBOARD_NAV
CFLAGS += -DPERIMETER_FOCUS
# Hack until figure out how to turn off IME (12-key-to-text) on CE.
CFLAGS += -DNUMBER_KEY_AS_INDEX
ifdef RELAY_NAME_DEFAULT
CFLAGS += -DRELAY_NAME_DEFAULT=\"$(RELAY_NAME_DEFAULT)\"
endif
ifdef RELAY_PORT_DEFAULT
CFLAGS += -DRELAY_PORT_DEFAULT=$(RELAY_PORT_DEFAULT)
endif
# This is normally part of MEM_DEBUG, but sometimes we want logging in
# a release build, e.g. to figure out why opening a saved game isn't
# working. So normally it's commented out here.
# LOGGING_FLAG = -DENABLE_LOGGING
ifeq ($(DEBUG),TRUE)
MEM_DEBUG_FLAG=-DMEM_DEBUG
LOGGING_FLAG = -DENABLE_LOGGING
DEBUG_FLAG=-DDEBUG
CFLAGS += -g -DDEBUG_TS
OBJDIR = obj_$(TARGET_OS)_dbg
else
CFLAGS += -Os
OBJDIR = obj_$(TARGET_OS)_rel
endif
BUILTDIR=$(OBJDIR)/built
TARGET = $(BUILTDIR)/xwords4_$(SVNREV).exe
DLL_SRCS = \
./l10n/xwords4_catalan.rc \
./l10n/xwords4_french.rc \
./l10n/xwords4_polish.rc \
./l10n/xwords4_czech.rc \
./l10n/xwords4_english.rc \
BASE_LANG_SRC = l10n/xwords4_english.rc
BASE_LANG_OBJ = $(OBJDIR$)/$(patsubst %.rc,%.rc.o,$(notdir $(BASE_LANG_SRC)))
# filter out the one we're building in. Can always build it as .dll
# manually...
DLLS = $(patsubst %.rc,$(BUILTDIR)/%.dll,\
$(notdir $(patsubst ./$(BASE_LANG_SRC),,$(DLL_SRCS))))
WINCESRC = \
ceaskpwd.c \
ceclrsel.c\
cedict.c \
ceginfo.c \
cemain.c \
cesockwr.c \
ceutil.c \
ceblank.c \
cecondlg.c \
cesvdgms.c \
cehntlim.c \
ceprefs.c \
cestrbx.c \
cedraw.c \
cefonts.c \
ceresstr.c \
cesms.c \
debhacks.c \
cedebug.c \
WINCEOBJS = $(patsubst %.c,%.o,$(addprefix $(OBJDIR)/,$(WINCESRC)))
WINCEICONS = bmps/xwords4_ico_16x16.png \
bmps/xwords4_ico_22x22.png \
bmps/xwords4_ico_32x32.png \
BMPS = bmps/rightarrow.bmp \
bmps/downarro.bmp \
bmps/origin.bmp \
bmps/netarrow.bmp
include ../common/config.mk
COMMONOBJ = $(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(notdir $(COMMONSRC))))
OBJS = $(WINCEOBJS) $(COMMONOBJ)
WINCE_INCLUDES = $(shell ls *.h)
COMMON_INCLUDES = $(shell ls ../common/*.h)
INCLUDES = $(WINCE_INCLUDES) $(COMMON_INCLUDES)
XW_BOTH_DEFINES = \
$(TARGET_OS_DEF) \
-DNODE_CAN_4 \
-DCOLOR_SUPPORT -DFEATURE_TRAY_EDIT -DXWFEATURE_SEARCHLIMIT \
-DXWFEATURE_HINT_CONFIG \
-DPOINTER_SUPPORT -DKEY_SUPPORT -D__LITTLE_ENDIAN \
-DCEFEATURE_CANSCROLL -DUNICODE \
-DLOADSTRING_BROKEN \
$(DEBUG_FLAG) $(MEM_DEBUG_FLAG) $(LOGGING_FLAG) \
CFLAGS += $(XW_BOTH_DEFINES) -DARM
RESFLAGS += $(XW_BOTH_DEFINES) $(STANDALONE) $(BLUETOOTH) $(RELAY) $(SMS) \
$(IPDIRECT) -D_WIN32 -D_WIN32_IE=0x0400 $(COLOR_SEL) $(CHOOSE_FONTS) \
-I ../common
####################################################################
# Rules start here
####################################################################
all : $(TARGET) $(DLLS)
memdebug:
$(MAKE) DEBUG=TRUE all
$(TARGET) : $(OBJS) $(BASE_LANG_OBJ)
mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(LFLAGS) -mwindows $^ $(CELIBS) -o $@
$(STRIP) $@
$(OBJDIR)/%.o : %.c $(INCLUDES)
mkdir -p $(dir $@)
$(CC) -c $(CFLAGS) -o $@ $<
$(OBJDIR)/%.o : ../common/%.c $(INCLUDES)
mkdir -p $(dir $@)
$(CC) -c $(CFLAGS) -o $@ $<
$(BASE_LANG_OBJ) : $(BASE_LANG_SRC) $(INCLUDES) xwords4.ico common_rsrc.rc $(BMPS)
scripts/test_windres.sh ${WINDRES}
$(WINDRES) -v $(MINGW_INC_PATH) $(RESFLAGS) -DAM_BASE_LANGUAGE -o $@ $<
$(OBJDIR)/l10n/%.rc.o : l10n/%.rc $(WINCE_INCLUDES)
scripts/test_windres.sh ${WINDRES}
mkdir -p $(dir $@)
UTF8=x$(shell file -b -n -i $< | grep 'utf-8'); \
if [ x != $$UTF8 ]; then ENC="-c 65001"; fi; \
$(WINDRES) $$ENC -v $(MINGW_INC_PATH) $(RESFLAGS) $< -o $@
$(BUILTDIR)/%.dll: $(OBJDIR)/l10n/%.rc.o
mkdir -p $(dir $@)
$(CC) -shared -o $@ $<
$(STRIP) $@
bmps/%.bmp: bmps/%.pgm
ppmtobmp $< > $@
# Checking in xwords4.ico for now. Hand-built using GIMP and layers
# it's 1/4 the size (because it has only two colors). Should figure
# out how to script GIMP and replace the below.
# xwords4.ico:
# $(WINCEICONS) icotool -c -o $@ $^
CAB: $(TARGET) $(DLLS)
$(STRIP) $<
(cd $(BUILTDIR); \
PATH=../../scripts:$$PATH exe2cab.pl $(notdir $<); \
if test -n "$$XW_WWW_PATH"; then \
cp $(subst exe,cab,$(notdir $<)) "$$XW_WWW_PATH"; \
fi \
)
for DLL in $(notdir $(DLLS)); do \
(cd $(BUILTDIR); PATH=../../scripts:$$PATH dll2cab.pl $$DLL; \
if test -n "$$XW_WWW_PATH"; then \
cp $$DLL "$$XW_WWW_PATH"; \
fi \
); \
done
SHIP: $(TARGET)
$(STRIP) $<
ifdef WINCE_UPLOAD_LOC
zip $<.zip $<
scp $<.zip $(WINCE_UPLOAD_LOC)
scp $< $(WINCE_UPLOAD_LOC)
endif
test:
echo $(COMMONOBJ)
clean :
rm -rf $(OBJDIR) $(TARGET) $(BMPS)
help:
@echo "try 'make TARGET_OS=wince [DEBUG=TRUE] [RELAY_NAME_DEFAULT=localhost]'"
@echo "or 'make TARGET_OS=win32 [DEBUG=TRUE] [RELAY_NAME_DEFAULT=localhost]'"