# makewce.rules - common build rules for wce
#
# modification history
# --------------------
# 04-25-02,mj	created
#
########################################################################

# Set searching directories for target and dependencies
vpath %.obj    $(OBJDIR)

# Include RULES file if it exists
#ifeq ($(shell if exist RULES $(ECHO) 1),1)
#include RULES
#endif

# Accumulate source files specified in each directory makefile
COBJECTS  	= $(CSOURCES:.c=.obj)
AOBJECTS  	= $(ASOURCES:.s=.obj)
ifeq ($(OBJECTS),)
OBJECTS  	= $(COBJECTS) $(AOBJECTS)
endif

$(TARGET).lib : $(OBJECTS) $(CSOURCES)
	@ $(ECHO) 'Building $@'
	$(LD) $(LDFLAGS) -ignore:4001 -out:$(OBJDIR)\$(TARGET).lib $(addprefix $(OBJDIR)\,$(notdir $(OBJECTS)))

$(OBJECTS) : %.obj : %.c
	@if not exist $(OBJDIR) mkdir $(OBJDIR)
	$(CC) $(CFLAGS) $(EXTRA_DEFINE) $(EXTRA_INCLUDE) $(ADDED_CFLAGS) -c $< -Fo$(OBJDIR)\$(notdir $@) 

#deps : $(CSOURCES)
#	@$(ECHO) '##' >> RULES
#	@$(ECHO) '## This file is generated by \"make\" - DO NOT EDIT !' >> RULES
#	@$(ECHO) '## $(shell $(DATE))' >> RULES
#	@$(ECHO) '##' >> RULES
#	@for %x in ($^) do \
#	    @$(ECHO) "  %x" & \
#	     $(CC) -M -MG $(CFLAGS) %x >> RULES & \
#	     $(ECHO) >> RULES

.PHONY: clean
clean:
	- ($(CD) $(OBJDIR)) && $(RM) *.obj
	- ($(CD) $(OBJDIR)) && $(RM) *.lib

FORCE :

# end of file

