# My quick makefile

.PHONY : clean
.PHONY : ipkg
.PHONY : dist

VERSION_MAJOR=1
VERSION_MINOR=1
VERSION_MICRO=0
VERSION_EXTRA=

VERSION = ${VERSION_MAJOR}_${VERSION_MINOR}_${VERSION_MICRO}${VERSION_EXTRA}
CVS_VERSION_TAG=V${VERSION}

PATH		:= /skiff/local/bin:/bin:${PATH}
CROSS_COMPILE 	= arm-linux-

AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc

#LINUXKERNELSRC	= /skiff/davep/linux-2.4.3-rmk2-np1/kernel
ifeq ($(LINUXKERNELSRC),)
LINUXKERNELSRC	= /skiff/davep/K2_4_6-rmk1-np2-branch/linux/kernel
endif
LINUXKERNELINCLUDEDIR	= $(LINUXKERNELSRC)/include
LINUXKERNELVERSIONFILE	= $(LINUXKERNELSRC)/include/linux/version.h
LINUX_KERNEL_VERSION	:= $(shell ./getver.py < ${LINUXKERNELVERSIONFILE})

DEFS		= \
		-DCVS_VERSION_TAG=${CVS_VERSION_TAG} \
		-DVERSION_MAJOR=${VERSION_MAJOR} \
		-DVERSION_MINOR=${VERSION_MICRO} \
		-DVERSION_MICRO=${VERSION_MICRO} \
		-DVERSION=${VERSION} \
		-DRELEASE

IFLAGS		= -I. -I.. -I$(LINUXKERNELINCLUDEDIR)

CFLAGS 		= -Wall  -Wstrict-prototypes -O2 ${DEFS}

M_DEFINES	= -D__KERNEL__ -DMODULE
M_FLAGS		= ${M_DEFINES} ${IFLAGS} ${CFLAGS}
M_FLAGS		+= -fno-strict-aliasing
M_FLAGS		+= -pipe -mapcs-32
M_FLAGS		+= -march=armv4
M_FLAGS		+= -mtune=strongarm110
M_FLAGS		+= -mshort-load-bytes
M_FLAGS		+= -msoft-float

P_DEFINES	= 
P_FLAGS		= ${P_DEFINES} ${IFLAGS} ${CFLAGS} -g -static

INC_FILES	= reflash.h

MOD_NAME	= reflash-mod
MODULE		= ${MOD_NAME}.o
MOD_FILE := ${MOD_NAME}.${LINUX_KERNEL_VERSION}.o
M_SRCS		= ${MOD_NAME}.c
xM_OBJS  := ${M_SRCS}
xM_OBJS	:= $(subst .cxx,.mod_o,$(xM_OBJS))
xM_OBJS	:= $(subst .c,.mod_o,$(xM_OBJS))
xM_OBJS	:= $(subst .s,.mod_o,$(xM_OBJS))
xM_OBJS	:= $(subst .S,.mod_o,$(xM_OBJS))
M_OBJS	= $(xM_OBJS)

PROGRAMS	= reflash
P_SRCS		= ${PROGRAMS:=.c} map.c symtab.c
xP_OBJS  := ${P_SRCS}
xP_OBJS	:= $(subst .cxx,.prg_o,$(xP_OBJS))
xP_OBJS	:= $(subst .c,.prg_o,$(xP_OBJS))
xP_OBJS	:= $(subst .s,.prg_o,$(xP_OBJS))
xP_OBJS	:= $(subst .S,.prg_o,$(xP_OBJS))
P_OBJS	= $(xP_OBJS) $(mak_DC_OBJ)

LIBS	= \
	-L../dplib/ipaq \
	-ldp

%.prg_o: %.c
	${CC} ${P_FLAGS} -c -o $@ $<

%.mod_o: %.c  ${INC_FILES}
	${CC} $(M_FLAGS) -c -o $@ $<

all:	mod ${PROGRAMS}

prog:
	echo ${P_OBJS}

#	${LD} -o $@ ${P_OBJS} ${LIBS}	
${PROGRAMS}: ${P_OBJS}
	$(MK_DATE_CODE)
	${CC} -o $@ ${P_FLAGS} ${P_OBJS} ${LIBS}	


#	${CC} $(M_FLAGS) $*.c -c -o $@
.PHONY: mod
#
#
mod: 	${MOD_FILE}

${MOD_FILE}: ${M_OBJS}
	${LD} -o ${MOD_FILE} -i ${M_OBJS}

reflash-test:
	cc -o reflash-test ${P_SRCS} ${P_FLAGS} ${LIBS} generated_date_code.c

DIST_LIST = \
	$(wildcard ${MOD_NAME}.[0-9]*) \
	${PROGRAMS} \
	reflash-prep.sh \
	rewince.sh \
	rewince-z.sh \
	rewince.ref \
	rewince-z.ref \
	reflash-upgrade.sh \
	reflash-defs.h \
	wrdir-def.h \
	reflash-utils.sh \
	INSTALL \
	README.reflash \
	README.reflash.sh \
	relnotes.txt

DIST = reflash-${VERSION}.tgz
dist:	all dist_tar

dist_tar:
	tar cvfz ${DIST} ${DIST_LIST}

IPKG_ROOT := ./ipkg
IPKG_BASE := ./ipkg/reflash
IPKG_BIN  := ${IPKG_BASE}/bin
IPKG_DEB  := ${IPKG_BASE}/DEBIAN
IPKG_CONTROL := ipkg.control
IPKG_REL  := ${IPKG_ROOT}/rel-dir
IPKG_BUILD := ../../../familiar/dist/ipkg/util/ipkg-build

ipkg:	all
	rm -rf ${IPKG_ROOT}
	mkdir -p ${IPKG_BIN} ${IPKG_BIN} ${IPKG_DEB} ${IPKG_REL}
	cp ${IPKG_CONTROL} ${IPKG_DEB}/control
	cp ${DIST_LIST} ${IPKG_BIN}
	cd ${IPKG_ROOT}; ${IPKG_BUILD} reflash rel-dir
	cp ${IPKG_REL}/*.ipk .

tagrel:
	cvs tag ${CVS_VERSION_TAG}

clean:
	/bin/rm -f *.o *~ core .depend log ${EXES} ${PROGRAMS} *.ipk
	/bin/rm -f *.mod_o *.prg_o
	/bin/rm -rf ipkg

depend .depend dep: ${M_SRCS} ${P_SRCS}
	$(CC) $(M_DEFINES) $(IFLAGS) -M $(M_SRCS) > .depend
	$(CC) ${P_DEFINES} ${IFLAGS} -M $(P_SRCS) >> .depend

ifeq (.depend,$(wildcard .depend))
include .depend
endif

mak_DC_FILE = generated_date_code
mak_DC_H_FILE = $(mak_DC_FILE).h
mak_DC_C_FILE = $(mak_DC_FILE).c
mak_DC_OBJ = $(mak_DC_FILE).o
DATE_CODE_VAR := _reflash_date_code
DATE_CODE_DEF := REFLASH_DATE_CODE
MK_DATE_CODE = $(MAKE) mk_date_code_
mk_date_code_:
	rm -f $(mak_DC_C_FILE)
	rm -f $(mak_DC_H_FILE)
	echo "/*" > $(mak_DC_H_FILE)
	echo " * Generated file.  DO NOT EDIT." >> $(mak_DC_H_FILE)
	echo " * Well, you can if you want to, but, why?" >> $(mak_DC_H_FILE)
	echo " */" >> $(mak_DC_H_FILE)
	echo "#define $(DATE_CODE_DEF) \"`date`\"" >> $(mak_DC_H_FILE)
	echo "/*" > $(mak_DC_C_FILE)
	echo " * Generated file.  DO NOT EDIT." >> $(mak_DC_C_FILE)
	echo " * Well, you can if you want to, but, why?" >> $(mak_DC_C_FILE)
	echo " */" >> $(mak_DC_C_FILE)
	echo "#include \"$(mak_DC_H_FILE)\"" >> $(mak_DC_C_FILE)
	echo "char $(DATE_CODE_VAR)[]=$(DATE_CODE_DEF);" >> $(mak_DC_C_FILE)
	$(CC) -c -o $(mak_DC_OBJ) $(mak_DC_C_FILE)

blah:
	echo "MOD_FILE>${MOD_FILE}<"
	echo "M_OBJS>${M_OBJS}<"
