1## Palm OS Protein Generic Makefile Engine for Eclipse v1.0.0
2#
3# Last edit: 7/22/04
4#
5# This makefile engine is capable of compiling Protein 
6# applications for Palm OS.
7#
8# This makefile engine assumes that the following variables are 
9# set outside of this makefile by a referencing master makefile
10# (see a master makefile generated by a Palm OS Developer 
11# Suite wizard for detailed explanation of each variable):
12#
13#	SOURCES
14#	RESOURCES
15#	DATABASE_RESET 
16#	DATABASE_BACKUP 
17#	DATABASE_HIDDEN 
18#	DATABASE_PROTECT
19#	DATABASE_BUNDLE
20#	DATABASE_VERSION 
21#	DATABASE_NAME 
22#	PROJECT_TYPE
23#	DEBUG_OR_RELEASE 
24#	OPTIMIZE_LEVEL 
25#	WARNING_LEVEL 
26#	ENABLE_EXCEPTIONS
27#	ENABLE_ASSERTIONS
28#	ADDITIONAL_LINK_LIBRARIES 
29#	ADDITIONAL_SIM_LINK_LIBRARIES 
30#	LOCAL_INCLUDE_PATHS 
31#	LOCAL_SIM_INCLUDE_PATHS 
32#	SYSTEM_INCLUDE_PATHS 
33#	SYSTEM_SIM_INCLUDE_PATHS 
34#	DEFINES 
35#	SIM_DEFINES 
36#	ADDITIONAL_COMPILER_FLAGS 
37#	ADDITIONAL_SIM_COMPILER_FLAGS 
38#	ADDITIONAL_LINKER_FLAGS 
39#	ADDITIONAL_SIM_LINKER_FLAGS 
40#	ADDITIONAL_AR_FLAGS
41#	ADDITIONAL_SIM_AR_FLAGS
42#	TEXTENCODING
43#	LOCALE_CHECKING
44#	STRICT_ENCODING
45#	SDK_LOCATION
46#	TARGET_PLATFORM
47#
48# Additionally, the user of this makefile engine may obtain the 
49# dynamic values for:
50#	SDK_LOCATION
51#	SDK_VERSION
52#	TOOLS_DIR 
53# by doing an optional include of a makefile segment that is 
54# generated during the Palm OS Developer Suite standard make build.
55# The makefile line to accomplish this is:
56#	-include auto-generated.mk
57# All master makefiles generated by Palm OS Developer Suite
58# wizards include this line already to pick up and use these
59# dynamic definitions.
60#
61# All variable values may be overridden by editing the make command
62# for the project (Project->Properties->C/C++ Make Project->Make Builder,
63# Build Command field).
64#
65
66###############################################################################
67# Defaults
68
69comma:= ,
70
71ifeq ($(TOOLS_DIR), )
72	TOOLS_DIR =
73endif
74
75# Locale (defaults to English)
76ifeq ($(LOCALE), )
77	LOCALE := enUS
78endif
79
80ifeq ($(CREATOR_ID), )
81	CREATOR_ID = STRT
82endif
83
84ifeq ($(DB_TYPE), )
85	DB_TYPE = appl
86endif
87
88ifeq ($(SLD_FILE), )
89	SLD_FILE = none
90endif
91
92ifeq ($(DEBUG_DEVICE_OUTPUT_DIR), )
93	DEBUG_DEVICE_OUTPUT_DIR = DebugDevice
94endif
95
96ifeq ($(RELEASE_DEVICE_OUTPUT_DIR), )
97	RELEASE_DEVICE_OUTPUT_DIR = ReleaseDevice
98endif
99
100ifeq ($(DEBUG_SIMULATOR_OUTPUT_DIR), )
101	DEBUG_SIMULATOR_OUTPUT_DIR = DebugSim
102endif
103
104ifeq ($(RELEASE_SIMULATOR_OUTPUT_DIR), )
105	RELEASE_SIMULATOR_OUTPUT_DIR = ReleaseSim
106endif
107
108ifeq ($(SDK_VERSION), )
109	SDK_VERSION = sdk-6
110endif
111
112ifeq ($(ENABLE_EXCEPTIONS), )
113	ENABLE_EXCEPTIONS=TRUE
114endif
115
116###############################################################################
117# App/PRC/Database Names
118#
119# The difference between App Name and Database name is that App Name may 
120# contain spaces while the database name is the App name with spaces removed.
121# (Coded in such a way that if the user already explicitly defined these
122# variables previously, we'll go with those).
123
124ifeq ($(DATABASE_NAME), )
125ifeq ($(ESCAPED_ARTIFACT_NAME), )
126	# Database name defaults if ARTIFACT_NAME is empty
127	DATABASE_NAME = StartApp
128else
129	DATABASE_NAME = $(ESCAPED_ARTIFACT_NAME)
130endif
131endif
132
133ifeq ($(PRC_NAME), )
134ifeq ($(ESCAPED_ARTIFACT_NAME), )
135	# PRC name defaults if ESCAPED_ARTIFACT_NAME is empty
136	PRC_NAME = Start.prc
137else
138	PRC_NAME = $(DATABASE_NAME).prc
139endif
140endif
141
142ifeq ($(LIB_NAME), )
143ifeq ($(ESCAPED_ARTIFACT_NAME), )
144	# LIB name defaults if ESCAPED_ARTIFACT_NAME is empty
145	LIB_NAME = Start.a
146else
147	LIB_NAME = $(DATABASE_NAME).a
148endif
149endif
150
151ifeq ($(SIM_LIB_NAME), )
152ifeq ($(ESCAPED_ARTIFACT_NAME), )
153	# SIM LIB name defaults if ESCAPED_ARTIFACT_NAME is empty
154	SIM_LIB_NAME = Start.lib
155else
156	SIM_LIB_NAME = $(DATABASE_NAME).lib
157endif
158endif
159
160###############################################################################
161# Compile and Link Settings
162
163TARGET_FORMAT=PalmOS6
164
165# Compiler settings... compiler + optimizations + debug
166# This is a makefile for Palm OS 6 so the compilers used are as follows:
167# Device target compiler is pacc
168# Simulator target compiler is gcc
169
170CC = "$(TOOLS_DIR)pacc"
171SIM_CC = gcc
172
173CFLAGS += -D__PALMOS_KERNEL__=1 -D__PALMOS__=0x06000000
174SIM_CFLAGS += -fexceptions -mno-cygwin -mwindows -D__PALMOS_KERNEL__=1 -D__PALMOS__=0x06000000 -D_SUPPORTS_NAMESPACE=0 -D_SUPPORTS_RTTI=1 -DTARGET_PLATFORM=TARGET_PLATFORM_PALMSIM_WIN32 -DTARGET_HOST=TARGET_HOST_PALMOS
175
176# Warning level for device target
177ifeq ($(WARNING_LEVEL), ALL)
178	CFLAGS += -W4
179else
180ifeq ($(WARNING_LEVEL), SOME)
181	CFLAGS += -W2
182else
183ifeq ($(WARNING_LEVEL), NONE)
184	CFLAGS += -W0
185endif
186endif
187endif
188
189# Warning level for simulator target
190ifeq ($(SIM_WARNING_LEVEL), ALL)
191	SIM_CFLAGS += -Wall
192else
193ifeq ($(SIM_WARNING_LEVEL), NONE)
194	SIM_CFLAGS += -w
195endif
196endif
197
198# Warnings as errors for device builds
199ifeq ($(WARNING_AS_ERROR), TRUE)
200	CFLAGS += -Werror
201endif
202
203# Warnings as errors for simulator builds
204ifeq ($(SIM_WARNING_AS_ERROR), TRUE)
205	SIM_CFLAGS += -Werror
206endif
207
208# Adding after other warnings flags so this is always in effect
209SIM_CFLAGS += -Wno-multichar 
210
211# Verbose output for device build
212ifeq ($(VERBOSE), TRUE)
213	CFLAGS += -v
214endif
215
216# Verbose output for simulator build
217ifeq ($(SIM_VERBOSE), TRUE)
218	SIM_CFLAGS += -v
219endif
220
221# Dislay logo
222ifeq ($(ARM_LOGO), TRUE)
223	CFLAGS += -logo
224else
225	CFLAGS += -nologo
226endif
227
228# Exception handling support
229ifeq ($(ENABLE_EXCEPTIONS), TRUE)
230	CFLAGS += -ex
231	LDFLAGS += -ex
232endif
233
234# Assertion handling support
235ifeq ($(ENABLE_ASSERTIONS), TRUE)
236	CFLAGS += -UNDEBUG
237else
238	CFLAGS += -DNDEBUG=1
239endif
240
241# Additional linker flags
242ifdef ADDITIONAL_PALINK_FLAGS
243	LDFLAGS += $(ADDITIONAL_PALINK_FLAGS)
244endif
245
246# Optimization settings
247ifeq ($(OPTIMIZE_LEVEL), INLINING)
248	OPTIMIZER_FLAG	= -O5
249	SIM_OPTIMIZER_FLAG = -O3
250else
251ifeq ($(OPTIMIZE_LEVEL), INTERPROCEDURAL)
252	OPTIMIZER_FLAG	= -O4
253	SIM_OPTIMIZER_FLAG = -O3
254else
255ifeq ($(OPTIMIZE_LEVEL), FULL)
256	OPTIMIZER_FLAG	= -O3
257	SIM_OPTIMIZER_FLAG = -O3
258else
259ifeq ($(OPTIMIZE_LEVEL), INTRAPROCEDURAL)
260	OPTIMIZER_FLAG	= -O2
261	SIM_OPTIMIZER_FLAG = -O3
262else
263ifeq ($(OPTIMIZE_LEVEL), SOME)
264	OPTIMIZER_FLAG	= -O1
265	SIM_OPTIMIZER_FLAG = -O1
266else
267ifeq ($(OPTIMIZE_LEVEL), NONE)
268	OPTIMIZER_FLAG	= -O0
269	SIM_OPTIMIZER_FLAG = -O0
270else
271# Default to 0 for debug, 3 for release
272ifeq ($(DEBUG_OR_RELEASE), Debug)
273	OPTIMIZER_FLAG = -O0
274	SIM_OPTIMIZER_FLAG = -O0
275else
276	OPTIMIZER_FLAG	= -O3
277	SIM_OPTIMIZER_FLAG = -O3
278endif	
279endif
280endif
281endif
282endif
283endif
284endif
285	
286# Debug settings (can override optimize settings)
287ifeq ($(DEBUG_OR_RELEASE), Debug)
288	DEBUG_FLAG += -g
289	BUILD_TYPE_FLAG = -DBUILD_TYPE=BUILD_TYPE_DEBUG
290	TRACE_OUTPUT_FLAG = -DTRACE_OUTPUT=TRACE_OUTPUT_ON
291else
292	BUILD_TYPE_FLAG = -DBUILD_TYPE=BUILD_TYPE_RELEASE
293	TRACE_OUTPUT_FLAG = -DTRACE_OUTPUT=TRACE_OUTPUT_OFF
294endif	
295
296ifeq ($(DEBUG_OR_RELEASE), Debug)
297	OBJ_DIR = $(DEBUG_DEVICE_OUTPUT_DIR)
298	SIM_OBJ_DIR = $(DEBUG_SIMULATOR_OUTPUT_DIR)
299else
300	OBJ_DIR = $(RELEASE_DEVICE_OUTPUT_DIR)
301	SIM_OBJ_DIR = $(RELEASE_SIMULATOR_OUTPUT_DIR)
302endif
303
304
305CFLAGS += $(OPTIMIZER_FLAG) $(DEBUG_FLAG) $(BUILD_TYPE_FLAG) $(TRACE_OUTPUT_FLAG)
306SIM_CFLAGS += $(SIM_OPTIMIZER_FLAG) $(DEBUG_FLAG) $(BUILD_TYPE_FLAG) $(TRACE_OUTPUT_FLAG)
307
308# Linker settings (must come after setting DEBUG_FLAG)
309LD = "$(TOOLS_DIR)pacc"
310SIM_LD = gcc
311
312LDFLAGS += $(DEBUG_FLAG) -nologo -Wl,-nolocals
313SIM_LDFLAGS += $(DEBUG_FLAG) -mno-cygwin -mwindows $(SIM_OBJ_DIR)/gcc_link.def -shared -nostdlib -u___divdi3 -u___moddi3 -u___udivdi3 -u___umoddi3
314SIM_LIBS = -L "$(TOOLS_DIR)misclibs" -lpxstlport -lpxsupc++ -lpxgcc -lgcc
315ifeq ($(DEBUG_OR_RELEASE), Debug)
316	LDFLAGS += -Wl,-debug -Wl,-libpath -Wl,"$(SDK_LOCATION)libraries/ARM_4T/Debug/Default"
317	SIM_LIBS += "$(SDK_LOCATION)libraries/Simulator/Debug/PalmOS.lib"
318else
319	LDFLAGS += -Wl,-libpath -Wl,"$(SDK_LOCATION)libraries/ARM_4T/Release/Default"
320	SIM_LIBS += "$(SDK_LOCATION)libraries/Simulator/Release/PalmOS.lib" 
321endif
322
323LDOBJS = PalmOS.a SystemGlue.a FloatMgr.sa
324
325ifeq ($(TARGET_PLATFORM), Device)
326	NATIVE_OBJ_DIR := $(OBJ_DIR)
327	RSC_OBJ_DIR := $(OBJ_DIR)
328else
329	NATIVE_OBJ_DIR := $(SIM_OBJ_DIR)
330	RSC_OBJ_DIR := $(SIM_OBJ_DIR)
331endif
332
333# Librarian settings
334AR="$(TOOLS_DIR)palib"
335SIM_AR=ar
336
337ARFLAGS= -c -a
338SIM_ARFLAGS=-rc
339
340LINKER_OUTPUT := $(OBJ_DIR)/$(DATABASE_NAME).axf
341SIM_LINKER_OUTPUT := $(SIM_OBJ_DIR)/$(DATABASE_NAME).dll
342
343TARGET	:= $(OBJ_DIR)/$(PRC_NAME)
344SIM_TARGET	:= $(SIM_OBJ_DIR)/$(PRC_NAME)
345
346STATIC_LIB_TARGET := $(OBJ_DIR)/$(LIB_NAME)
347SIM_STATIC_LIB_TARGET	:= $(SIM_OBJ_DIR)/$(SIM_LIB_NAME)
348
349###############################################################################
350# Resource flags (PalmRC)
351
352RFLAGS +=
353
354# Default text encoding is Latin
355ifeq ($(PRC_TEXT_ENCODING), )
356	PRC_TEXT_ENCODING = LATIN
357endif
358
359ifeq ($(PRC_TEXT_ENCODING), LATIN)
360	RFLAGS += -target 4.0
361else
362ifeq ($(PRC_TEXT_ENCODING), JAPANESE)
363	RFLAGS += -target 4.0J
364else
365ifeq ($(PRC_TEXT_ENCODING), SIMPLIFIED_CHINESE)
366	RFLAGS += -target 4.0CS
367endif
368endif
369endif
370
371ifeq ($(PRC_NO_LOCALE_CHECK), TRUE)
372	RFLAGS += -noLocaleCheck
373endif
374
375ifeq ($(PRC_STRICT_LOCALE), TRUE)
376	RFLAGS += -strictLocale
377endif
378
379ifeq ($(PRC_STRICT_ENCODING), TRUE)
380	RFLAGS += -strictTextEncoding
381endif
382
383ifdef PRC_OVERLAY_FILTER
384	RFLAGS += -overlayFilter $(PRC_OVERLAY_FILTER)
385endif
386
387ifeq ($(PRC_NO_WARN_SIZE), TRUE)
388	RFLAGS += -noWarnSize
389endif
390
391ifeq ($(PRC_QUIET), TRUE)
392	RFLAGS += -quiet
393endif
394
395ifeq ($(PRCMERGE_QUIET), TRUE)
396	PRCFLAGS += -quiet
397endif
398
399###############################################################################
400
401# function for converting sources to object file names in one of output directories
402define SOURCE_LIST_TO_OBJS
403	$(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(foreach file, $(SOURCES), \
404	$(basename $(notdir $(file))))))
405endef
406
407# function for converting sources to object file names in $(SIM_OBJ_DIR)
408define SOURCE_LIST_TO_SIM_OBJS
409	$(addprefix $(SIM_OBJ_DIR)/, $(addsuffix .o, $(foreach file, $(SOURCES), \
410	$(basename $(notdir $(file))))))
411endef
412
413# function for converting resources into resource object files
414define RESOURCE_LIST_TO_OBJS
415	$(addprefix $(RSC_OBJ_DIR)/, $(addsuffix .trc, $(foreach file, $(RESOURCES), \
416	$(basename $(file)))))
417endef
418
419OBJS = $(SOURCE_LIST_TO_OBJS)
420SIM_OBJS = $(SOURCE_LIST_TO_SIM_OBJS)
421SOURCE_PATHS += $(sort $(foreach file, $(SOURCES), $(dir $(file))))
422RESOURCE_OBJS = $(RESOURCE_LIST_TO_OBJS)
423RESOURCE_PATHS += $(sort $(foreach file, $(RESOURCES), $(dir $(file))))
424SLD_BASENAME := $(addsuffix _Startup, $(basename $(notdir $(SLD_FILE))))
425SLD_OBJ := $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(SLD_BASENAME)))
426SLD_SIM_OBJ := $(addprefix $(SIM_OBJ_DIR)/, $(addsuffix .o, $(SLD_BASENAME)))
427
428VPATH :=
429VPATH += $(addprefix :, $(subst  ,:, $(filter-out $($(subst, :, ,$(VPATH))), $(SOURCE_PATHS) $(RESOURCE_PATHS) )))
430
431SYSTEM_INCLUDES = $(SYSTEM_INCLUDE_PATHS) -I "$(SDK_LOCATION)headers" -I "$(SDK_LOCATION)headers/posix"
432INCLUDES = $(LOCAL_INCLUDE_PATHS) $(foreach path, $(SOURCE_PATHS), $(addprefix -I, $(path))) $(SYSTEM_INCLUDES) $(PRE_INCLUDE_PATHS)
433CPP_INCLUDES = -I "$(TOOLS_DIR)include/stlport"
434
435SIM_SYSTEM_INCLUDES = $(SYSTEM_SIM_INCLUDE_PATHS) -I "$(SDK_LOCATION)headers" -I "$(SDK_LOCATION)headers/posix"
436SIM_INCLUDES = $(LOCAL_SIM_INCLUDE_PATHS) $(foreach path, $(SOURCE_PATHS), $(addprefix -I, $(path))) $(SIM_SYSTEM_INCLUDES) $(SIM_PRE_INCLUDE_PATHS)
437SIM_CPP_INCLUDES = -I "$(TOOLS_DIR)include/stlport"
438
439# Now add additional settings specified by user
440LDFLAGS += $(ADDITIONAL_LINK_LIBRARIES)
441LDFLAGS += $(foreach libpath, $(ADDITIONAL_LINK_LIBPATH), $(addprefix -libpath , $(libpath)))
442LDFLAGS += $(foreach option, $(ADDITIONAL_LINKER_FLAGS), $(addprefix -Wl$(comma), $(option)))
443CFLAGS += $(foreach define, $(DEFINES), $(addprefix -D, $(define)))
444CFLAGS += $(foreach define, $(UNDEFINES), $(addprefix -U, $(define)))
445CFLAGS += $(ADDITIONAL_COMPILER_FLAGS)
446
447SIM_LDFLAGS += $(ADDITIONAL_SIM_LINK_LIBRARIES)
448SIM_LDFLAGS += $(ADDITIONAL_SIM_LINKER_FLAGS)
449SIM_LDFLAGS += $(foreach libpath, $(ADDITIONAL_SIM_LINK_LIBPATH), $(addprefix -L, $(libpath)))
450SIM_CFLAGS += $(foreach define, $(SIM_DEFINES), $(addprefix -D, $(define)))
451SIM_CFLAGS += $(foreach define, $(SIM_UNDEFINES), $(addprefix -U, $(define)))
452SIM_CFLAGS += $(ADDITIONAL_SIM_COMPILER_FLAGS)
453
454# Specifyc additional archival flags (for static libraries)
455ARFLAGS += $(ADDITIONAL_AR_FLAGS)
456SIM_ARFLAGS += $(ADDITIONAL_SIM_AR_FLAGS)
457
458RFLAGS += $(ADDITIONAL_PRC_FLAGS)
459PRCFLAGS += $(ADDITIONAL_PRCMERGE_FLAGS)
460
461###############################################################################
462# Flags for PRC creation
463
464PRCFLAGS += -dbFlagExtendedDB -dbFlagExecutable
465
466PRCFLAGS += -dbVersion $(DATABASE_VERSION) $(DATABASE_PROTECT) $(DATABASE_HIDDEN) $(DATABASE_BACKUP) $(DATABASE_RESET) $(DATABASE_BUNDLE)
467
468
469###############################################################################
470# Flags for pslib
471
472PSLIB_DEV_FLAGS =
473PSLIB_SIM_FLAGS = -outSimgcc
474ifeq ($(PROJECT_TYPE), slib)
475	PSLIB_DEV_FLAGS += -outEntryNums $(OBJ_DIR)/$(DATABASE_NAME)_Client.h -outObjStubs $(OBJ_DIR)/$(DATABASE_NAME)_Client.sa 
476	PSLIB_SIM_FLAGS += -outEntryNums $(SIM_OBJ_DIR)/$(DATABASE_NAME)_Client.h -outSimStubs $(SIM_OBJ_DIR)/$(DATABASE_NAME)_Client.slib
477endif
478
479
480
481###############################################################################
482# Project make target determination
483
484ifeq ($(TARGET_PLATFORM), Device)
485
486ifeq ($(PROJECT_TYPE), )
487	PROJECT_TARGET = device
488endif
489
490ifeq ($(PROJECT_TYPE), appl)
491	PROJECT_TARGET = device
492endif
493ifeq ($(PROJECT_TYPE), slib)
494	PROJECT_TARGET = device_shared_lib
495endif
496ifeq ($(PROJECT_TYPE), lib)
497	PROJECT_TARGET = device_static_lib
498endif
499
500else
501
502ifeq ($(PROJECT_TYPE), )
503	PROJECT_TARGET = simulator
504endif
505
506ifeq ($(PROJECT_TYPE), appl)
507	PROJECT_TARGET = simulator
508endif
509ifeq ($(PROJECT_TYPE), slib)
510	PROJECT_TARGET = simulator_shared_lib
511endif
512ifeq ($(PROJECT_TYPE), lib)
513	PROJECT_TARGET = simulator_static_lib
514endif
515
516endif
517
518###############################################################################
519#	Eclipse requires an all target to get the work done
520
521all:  $(PROJECT_TARGET)
522
523#	This rule is only valid for projects created as application projects.
524#	Don't invoke this make target directly; instead change the value of
525#	TARGET_PLATFORM to Device in the main makefile
526device: $(OBJ_DIR) $(TARGET)
527
528#	This rule is only valid for projects created as application projects.
529#	Don't invoke this make target directly; instead change the value of
530#	TARGET_PLATFORM to Simulator in the main makefile
531simulator: $(SIM_OBJ_DIR) $(SIM_TARGET)
532
533#	This rule is only valid for projects created as shared library projects.
534#	Don't invoke this make target directly; instead change the value of
535#	TARGET_PLATFORM to Device in the main makefile
536device_shared_lib: $(OBJ_DIR) $(TARGET)
537
538#	This rule is only valid for projects created as shared library projects.
539#	Don't invoke this make target directly; instead change the value of
540#	TARGET_PLATFORM to Simulator in the main makefile
541simulator_shared_lib: $(SIM_OBJ_DIR) $(SIM_TARGET)
542
543#	This rule is only valid for projects created as static library projects.
544#	Don't invoke this make target directly; instead change the value of
545#	TARGET_PLATFORM to Device in the main makefile
546device_static_lib: $(OBJ_DIR) $(STATIC_LIB_TARGET)
547
548#	This rule is only valid for projects created as static library projects.
549#	Don't invoke this make target directly; instead change the value of
550#	TARGET_PLATFORM to Simulator in the main makefile
551simulator_static_lib: $(SIM_OBJ_DIR) $(SIM_STATIC_LIB_TARGET)
552
553
554# rule to create the object file directories if needed
555$(OBJ_DIR):
556	@[ -d $(OBJ_DIR) ] || mkdir $(OBJ_DIR) > /dev/null 2>&1
557
558$(SIM_OBJ_DIR):
559	@[ -d $(SIM_OBJ_DIR) ] || mkdir $(SIM_OBJ_DIR) > /dev/null 2>&1
560	
561# main C/C++ sources
562$(OBJ_DIR)/%.o : %.c makefile
563	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
564$(OBJ_DIR)/%.o : %.cpp makefile
565	$(CC) -c $< $(INCLUDES) $(CPP_INCLUDES) $(CFLAGS) -o $@
566$(OBJ_DIR)/%.o : %.cp makefile
567	$(CC) -c $< $(INCLUDES) $(CPP_INCLUDES) $(CFLAGS) -o $@
568$(OBJ_DIR)/%.o : %.cc makefile
569	$(CC) -c $< $(INCLUDES) $(CPP_INCLUDES) $(CFLAGS) -o $@
570$(OBJ_DIR)/%.o : %.C makefile
571	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
572$(OBJ_DIR)/%.o : %.CC makefile
573	$(CC) -c $< $(INCLUDES) $(CPP_INCLUDES) $(CFLAGS) -o $@
574$(OBJ_DIR)/%.o : %.CPP makefile
575	$(CC) -c $< $(INCLUDES) $(CPP_INCLUDES) $(CFLAGS) -o $@
576
577# Simulator C/C++ sources
578$(SIM_OBJ_DIR)/%.o : %.c makefile
579	$(SIM_CC) -c $< $(SIM_INCLUDES) -std=c99 $(SIM_CFLAGS) -o $@
580$(SIM_OBJ_DIR)/%.o : %.cpp makefile
581	$(SIM_CC) -c $< $(SIM_INCLUDES) $(SIM_CPP_INCLUDES) -frtti $(SIM_CFLAGS) -o $@
582$(SIM_OBJ_DIR)/%.o : %.cp makefile
583	$(SIM_CC) -c $< $(SIM_INCLUDES) $(SIM_CPP_INCLUDES) -frtti $(SIM_CFLAGS) -o $@
584$(SIM_OBJ_DIR)/%.o : %.cc makefile
585	$(SIM_CC) -c $< $(SIM_INCLUDES) $(SIM_CPP_INCLUDES) -frtti $(SIM_CFLAGS) -o $@
586$(SIM_OBJ_DIR)/%.o : %.C makefile
587	$(SIM_CC) -c $< $(SIM_INCLUDES)  -std=c99 $(SIM_CFLAGS) -o $@
588$(SIM_OBJ_DIR)/%.o : %.CC makefile
589	$(SIM_CC) -c $< $(SIM_INCLUDES) $(SIM_CPP_INCLUDES) -frtti $(SIM_CFLAGS) -o $@
590$(SIM_OBJ_DIR)/%.o : %.CPP makefile
591	$(SIM_CC) -c $< $(SIM_INCLUDES) $(SIM_CPP_INCLUDES) -frtti $(SIM_CFLAGS) -o $@
592
593
594# XRD source processing
595$(RSC_OBJ_DIR)/%.trc : %.xrd makefile
596	"$(TOOLS_DIR)PalmRC" -p $(TARGET_FORMAT) -makeDeps $(@D)/$(*F).deps $(RFLAGS) -locale $(LOCALE) "`cygpath -w -a ./$<`" -o $@
597$(RSC_OBJ_DIR)/%.trc : %.XRD makefile
598	"$(TOOLS_DIR)PalmRC" -p $(TARGET_FORMAT) -makeDeps $(@D)/$(*F).deps $(RFLAGS) -locale $(LOCALE) "`cygpath -w -a ./$<`" -o $@
599
600
601# Definition file source processing
602$(SLD_OBJ) : makefile
603	@echo "...Processing definition file for Device..."
604	"$(TOOLS_DIR)pslib" -inDef "$(SLD_FILE)" $(PSLIB_DEV_FLAGS) -outObjStartup $@ -type '$(DB_TYPE)' -creator '$(CREATOR_ID)' -execName $(DATABASE_NAME)
605	
606$(SLD_SIM_OBJ) : makefile
607	@echo "...Processing definition file for Simulator..."
608	"$(TOOLS_DIR)pslib" -inDef "$(SLD_FILE)" $(PSLIB_SIM_FLAGS) -outSimStartup $@ -outSimRsrc $(SIM_OBJ_DIR)/acod0000.bin  -outSimDefs $(SIM_OBJ_DIR)/gcc_link.def -type '$(DB_TYPE)' -creator '$(CREATOR_ID)' -execName $(DATABASE_NAME)
609
610# Linking step
611$(LINKER_OUTPUT) : $(OBJS)
612	@echo "...Linking for Device Target..."
613	$(LD) -o $(LINKER_OUTPUT) $(OBJS) $(SLD_OBJ) $(LDOBJS) $(LDFLAGS)
614
615$(SIM_LINKER_OUTPUT) : $(SIM_OBJS)
616	@echo "...Linking for Simulator Target..."
617	$(SIM_LD) --entry 0 -o $(SIM_LINKER_OUTPUT) $(SIM_OBJS) $(SLD_SIM_OBJ) $(SIM_LDFLAGS) $(SIM_LIBS)
618
619
620# Final target creation
621$(TARGET): $(SLD_OBJ) $(LINKER_OUTPUT) $(RESOURCE_OBJS) 
622	@echo "...Creating PRC for Device: $(TARGET)"
623	"$(TOOLS_DIR)pelf2bin" -format 6 -directory $(OBJ_DIR) -code acod -data adat -rsrc 0x0000 $(LINKER_OUTPUT)
624	"$(TOOLS_DIR)PRCMerge" -dbType '$(DB_TYPE)' -dbCreator '$(CREATOR_ID)' -dbName $(DATABASE_NAME) $(PRCFLAGS) -o $(TARGET) $(RESOURCE_OBJS) $(OBJ_DIR)/adat0000.bin $(OBJ_DIR)/acod0000.bin
625	@echo ...Done with Device build...
626	@echo 
627
628$(SIM_TARGET): $(SLD_SIM_OBJ) $(SIM_LINKER_OUTPUT) $(RESOURCE_OBJS)
629	@echo "...Creating PRC for Simulator: $(SIM_TARGET)"
630	cp -f "$(SDK_LOCATION)misctools/Resources/amdd_fake" $(SIM_OBJ_DIR)/adat0000.bin
631	"$(TOOLS_DIR)PRCMerge" -dbType '$(DB_TYPE)' -dbCreator '$(CREATOR_ID)' -dbName $(DATABASE_NAME) $(PRCFLAGS) -o $(SIM_TARGET) $(RESOURCE_OBJS) $(SIM_OBJ_DIR)/adat0000.bin $(SIM_OBJ_DIR)/acod0000.bin
632	@echo ...Done with Simulator build...
633	@echo 
634
635$(STATIC_LIB_TARGET) : $(OBJS)
636	@echo "...Linking Static Library for Device Target..."
637	$(AR) $(ARFLAGS) $(STATIC_LIB_TARGET) $(OBJS) 
638
639$(SIM_STATIC_LIB_TARGET) : $(SIM_OBJS)
640	@echo "...Linking Static Library for Simulator Target..."
641	$(SIM_AR) $(SIM_ARFLAGS) $(SIM_STATIC_LIB_TARGET) $(SIM_OBJS) 
642
643
644FORCE:
645
646# Eclipse requires a clean command
647clean :: FORCE
648	-rm -rf $(NATIVE_OBJ_DIR)/*
649
650
651printvars :: FORCE
652	@echo "SDK_LOCATION"
653	@echo $(SDK_LOCATION)
654	@echo "CFLAGS"
655	@echo $(CFLAGS)
656	@echo "SIM_CFLAGS"
657	@echo $(SIM_CFLAGS)
658	@echo "LDFLAGS"
659	@echo $(LDFLAGS)
660	@echo "SIM_LDFLAGS"
661	@echo $(SIM_LDFLAGS)
662	@echo "OBJS"
663	@echo $(OBJS)
664	@echo "SIM_OBJS"
665	@echo $(SIM_OBJS)
666	@echo "SLD_OBJ"
667	@echo $(SLD_OBJ)
668	@echo "SLD_SIM_OBJ"
669	@echo $(SLD_SIM_OBJ)
670	@echo "TARGET"
671	@echo $(TARGET)
672	@echo "SIM_TARGET"
673	@echo $(SIM_TARGET)
674	@echo "SOURCE_PATHS"
675	@echo $(SOURCE_PATHS)
676	@echo "RESOURCE_OBJS"
677	@echo $(RESOURCE_OBJS)
678	@echo "RESOURCE_PATHS"
679	@echo $(RESOURCE_PATHS)
680	@echo "OBJ_DIR"
681	@echo $(OBJ_DIR)
682	@echo "SIM_OBJ_DIR"
683	@echo $(SIM_OBJ_DIR)
684	@echo "RSC_OBJ_DIR"
685	@echo $(RSC_OBJ_DIR)
686	@echo "LINKER_OUTPUT"
687	@echo $(LINKER_OUTPUT)
688	@echo "SIM_LINKER_OUTPUT"
689	@echo $(SIM_LINKER_OUTPUT)
690	@echo "SIM_GCC_SLIBS"
691	@echo $(SIM_GCC_SLIBS)
692	@echo "SIM_GCC_SLIB_PATHS"
693	@echo $(SIM_GCC_SLIB_PATHS)
694	@echo "VPATH"
695	@echo $(VPATH)
696
697
698#
699# dependency generation
700# Generate dependencies with depend target "make depend"
701#
702
703DEPFLAG = -MM
704
705#
706# Adds $(SIM_OBJ_DIR) to target .o file
707# ...Search for string starting at the beginning of the line [^]
708# ...that contain anything followed by .o [.*\.o]
709# ...and remember that string [\(...\)]
710# ...replace that string with $(SIM_OBJ_DIR)/<tagged string> [$$(SIM_OBJ_DIR)/\1]
711# ($ is doubled so that make doesn't interpret the variable syntax)
712#
713SOURCE_SEDSCRIPT = sed -e's%^\(.*\.o\)%$$(OBJ_DIR)/\1%'
714SOURCE_SIM_SEDSCRIPT = sed -e's%^\(.*\.o\)%$$(SIM_OBJ_DIR)/\1%'
715
716# Command adds $(RSC_OBJ_DIR) and converts .xrd to .trc
717RESOURCE_TARGET_SEDSCRIPT = sed -e';s%^\(.*\).xrd%$$(RSC_OBJ_DIR)/\1.trc%'
718
719# Command to escape spaces in a path
720ESCAPE_SPACES_SEDSCRIPT = sed 's/ /\\\ /g'
721
722# Take out all newlines (and/or returns) and replace with spaces
723# ...putting all dependencies on the same line
724RESOURCE_PREREQ_SEDSCRIPT = tr '\r\n' ' '
725
726depend :: FORCE
727	@echo "" > .dependencies
728	@$(SIM_CC) $(SIM_INCLUDES) $(SIM_CFLAGS) $(DEPFLAG) $(SOURCES) | $(SOURCE_SIM_SEDSCRIPT) >> .dependencies
729	@$(SIM_CC) $(SIM_INCLUDES) $(SIM_CFLAGS) $(DEPFLAG) $(SOURCES) | $(SOURCE_SEDSCRIPT) >> .dependencies
730	@for i in $(RESOURCES); do \
731		echo "$$i: \\" | $(RESOURCE_TARGET_SEDSCRIPT) >> .resdependencies; \
732		"$(TOOLS_DIR)PalmRC" -p $(TARGET_FORMAT) $(RFLAGS) -locale $(LOCALE) -makedeps $$i.tmp "`cygpath -w -a ./$$i`"; \
733		cygpath -m -f $$i.tmp | $(ESCAPE_SPACES_SEDSCRIPT) >> $$i.deps; \
734		rm -rf $$i.tmp; \
735		cat $$i.deps | $(RESOURCE_PREREQ_SEDSCRIPT) >> .resdependencies; \
736		echo "" >> .resdependencies; \
737		rm -rf $$i.deps; \
738		cat .resdependencies >> .dependencies; \
739		rm -rf .resdependencies; \
740	done
741
742
743cleandepend :: FORCE
744	-rm -f .dependencies
745
746-include .dependencies
747