# Modify LINUX to indicate Linux v2.4.1 source directory:
LINUX=/usr/src/linux-2.4.1/src
# Modify GCCDIR to indicate mygcc installation directory:
MYGCC=../../..

# Nothing needs to be changed after this line.
GCC=$(MYGCC)/mygcc/0.1.0/bin/gcc
CPPOPTS=-D__KERNEL__ -I$(LINUX)/include  -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -mpreferred-stack-boundary=2 -march=i686

SOURCES=3c505.c 3c515.c aironet4500_card.c aironet4500_cs.c AM53C974.c	\
anode.c avm_cs.c binsert.c bluetooth.c bttv-driver.c bufs.c bulkmem.c	\
callc.c capi.c capidrv.c comx-proto-fr.c context.c cs.c defxx.c dgrs.c	\
dir.c dma.c ds.c epca.c file.c fops.c fore200e.c fsm.c ftl.c		\
g_NCR5380.c hosts.c i2c-parport.c i2o_core.c i810_bufs.c ide-probe.c	\
ide-tape.c inode.c intrep.c ioctl.c iphase.c irq.c ixj.c journal.c	\
lanstreamer.c ll_rw_blk.c lmc_proto.c matroxfb_crtc2.c microtek.c	\
misc.c mtdram.c namei.c NCR53c406a.c nfsfh.c olympic.c partition.c	\
pc_keyb.c proc.c qla1280.c qlogicfas.c qlogicfc.c qlogicisp.c		\
qnx_inode.c r128_bufs.c radeon_bufs.c raid5.c riocmd.c rio_linux.c	\
riotable.c rsrc_mgr.c sch_gred.c scsi_scan.c sd.c setup-res.c		\
sis_main.c skfddi.c slram.c smc9194.c smctr.c sr.c sunhme.c super.c	\
tms380tr.c ultrastor.c upcall.c util.c video1394.c videodev.c		\
wavelan_cs.c zatm.c

SOURCES_CHECK=$(SOURCES:.c=.i.c.check)

all: $(SOURCES_CHECK)

clean:
	rm -f *.i *.c *.check *.o *.gimple

super.i: $(LINUX)/fs/udf/super.c
	$(GCC) $(CPPOPTS) -E $(LINUX)/fs/udf/super.c >$@
super.i.c: super.i
	cat super.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=udf_load_partition -v from=static -v to=extern | \
	  chfun.awk -v fun=udf_load_logicalvol -v from=static -v to=extern \
	  >$@
%.i.c: %.i
	protect-multiline-strings.awk <$< >$@
%.c.check: %.c
	$(GCC) -O2 -fdump-tree-gimple -fno-inline --tree-check=mc.crc -c $< 2>&1 | \
	tee $@ | egrep "function|checking|via|reached"

fsm.i: $(LINUX)/drivers/isdn/hisax/fsm.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/isdn/hisax/fsm.c >$@
file.i: $(LINUX)/fs/udf/file.c
	gcc $(CPPOPTS) -E $(LINUX)/fs/udf/file.c >$@
dma.i: $(LINUX)/drivers/char/drm/dma.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/char/drm/dma.c >$@
fops.i: $(LINUX)/drivers/char/drm/fops.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/char/drm/fops.c >$@
i2c-parport.i: $(LINUX)/drivers/media/video/i2c-parport.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/media/video/i2c-parport.c >$@
context.i: $(LINUX)/drivers/char/drm/context.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/char/drm/context.c >$@
lmc_proto.i: $(LINUX)/drivers/net/wan/lmc/lmc_proto.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/net/wan/lmc/lmc_proto.c >$@

mtdram.i: $(LINUX)/drivers/mtd/mtdram.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -D CONFIG_MTDRAM_TOTAL_SIZE=64 -D CONFIG_MTDRAM_ERASE_SIZE=8 -E $(LINUX)/drivers/mtd/mtdram.c >$@
mtdram.i.c: mtdram.i
	cat mtdram.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=init_mtdram -v from=static -v to=extern \
	  >$@
radeon_bufs.i: $(LINUX)/drivers/char/drm/radeon_bufs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $(LINUX)/drivers/char/drm/radeon_bufs.c >$@
r128_bufs.i: $(LINUX)/drivers/char/drm/r128_bufs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
avm_cs.i: $(LINUX)/drivers/isdn/avmb1/avm_cs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
avm_cs.i.c: avm_cs.i
	cat avm_cs.i |  protect-multiline-strings.awk | \
	  chfun.awk -v fun=avmcs_attach -v from=static -v to=extern \
	  >$@
raid5.i: $(LINUX)/drivers/md/raid5.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
raid5.i.c: raid5.i
	cat raid5.i |  protect-multiline-strings.awk | \
	  chfun.awk -v fun=grow_buffers -v from=static -v to=extern | \
	  chfun.awk -v fun=__check_consistency -v from=static -v to=extern \
	  >$@
setup-res.i: $(LINUX)/drivers/pci/setup-res.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
hosts.i: $(LINUX)/drivers/scsi/hosts.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
aironet4500_card.i: $(LINUX)/drivers/net/aironet4500_card.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E -D CONFIG_AIRONET4500_PCI -D CONFIG_AIRONET4500_PNP -D CONFIG_AIRONET4500_ISA $< >$@
aironet4500_card.i.c: aironet4500_card.i
	cat aironet4500_card.i |  protect-multiline-strings.awk | \
	  chfun.awk -v fun=awc_pci_init -v from=static -v to=extern \
	  >$@
aironet4500_cs.i: $(LINUX)/drivers/net/pcmcia/aironet4500_cs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
aironet4500_cs.i.c: aironet4500_cs.i
	cat aironet4500_cs.i |  protect-multiline-strings.awk | \
	  chfun.awk -v fun=awc_attach -v from=static -v to=extern \
	  >$@
rsrc_mgr.i: $(LINUX)/drivers/pcmcia/rsrc_mgr.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E -D CONFIG_ISA $< >$@
olympic.i: $(LINUX)/drivers/net/tokenring/olympic.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
bulkmem.i: $(LINUX)/drivers/pcmcia/bulkmem.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
# Cannot compile even under src/:
#support.i: $(LINUX)/fs/ntfs/support.c
#	echo '#include "linux/types.h"' >$@.tmp.c
#	cat $< >>$@.tmp.c
#	gcc $(CPPOPTS) -D __FUNCTION__="" -E $@.tmp.c >>$@
# Compile gives warning under src/, so gcc doesnt analyze lec_send_packet():
#lec.i: $(LINUX)/net/atm/lec.c
#	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
#lec.i.c: lec.i
#	cat lec.i | protect-multiline-strings.awk | \
#	  chfun.awk -v fun=lec_send_packet -v from=static -v to=extern \
#	  >$@
inode.i: $(LINUX)/fs/bfs/inode.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
inode.i.c: inode.i
	cat inode.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=bfs_read_super -v from=static -v to=extern \
	  >$@
video1394.i: $(LINUX)/drivers/ieee1394/video1394.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
video1394.i.c: video1394.i
	cat video1394.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=alloc_dma_iso_ctx -v from=static -v to=extern \
	  >$@
qnx_inode.i: $(LINUX)/fs/qnx4/inode.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
qnx_inode.i.c: qnx_inode.i
	cat qnx_inode.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=qnx4_checkroot -v from=static -v to=extern \
	  >$@
videodev.i: $(LINUX)/drivers/media/video/videodev.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -D CONFIG_PROC_FS -D CONFIG_VIDEO_PROC_FS -E $< >$@
videodev.i.c: videodev.i
	cat videodev.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=videodev_proc_create_dev -v from=static -v to=extern \
	  >$@
ftl.i: $(LINUX)/drivers/mtd/ftl.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
ftl.i.c: ftl.i
	cat ftl.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=build_maps -v from=static -v to=extern \
	  >$@
ll_rw_blk.i: $(LINUX)/drivers/block/ll_rw_blk.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
ds.i: $(LINUX)/drivers/pcmcia/ds.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
microtek.i: $(LINUX)/drivers/usb/microtek.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
comx-proto-fr.i: $(LINUX)/drivers/net/wan/comx-proto-fr.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
NCR53c406a.i: $(LINUX)/drivers/scsi/NCR53c406a.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
3c515.i: $(LINUX)/drivers/net/3c515.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
ultrastor.i: $(LINUX)/drivers/scsi/ultrastor.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
qlogicfas.i: $(LINUX)/drivers/scsi/qlogicfas.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
riocmd.i: $(LINUX)/drivers/char/rio/riocmd.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
ide-probe.i: $(LINUX)/drivers/ide/ide-probe.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
ide-probe.i.c: ide-probe.i
	cat ide-probe.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=init_irq -v from=static -v to=extern \
	  >$@
# Ok except the kmalloc->deref thru intermediate NONTMP var:
upcall.i: $(LINUX)/fs/coda/upcall.c
	gcc $(CPPOPTS) -E $< >$@
qlogicfc.i: $(LINUX)/drivers/scsi/qlogicfc.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
namei.i: $(LINUX)/fs/udf/namei.c
	gcc $(CPPOPTS) -E $< >$@
riotable.i: $(LINUX)/drivers/char/rio/riotable.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
pc_keyb.i: $(LINUX)/drivers/char/pc_keyb.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
callc.i: $(LINUX)/drivers/isdn/hisax/callc.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
dgrs.i: $(LINUX)/drivers/net/dgrs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
dgrs.i.c: dgrs.i
	cat dgrs.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=dgrs_found_device -v from=static -v to=extern \
	  >$@
cs.i: $(LINUX)/drivers/pcmcia/cs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
iphase.i: $(LINUX)/drivers/atm/iphase.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
iphase.i.c: iphase.i
	cat iphase.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=ia_pkt_tx -v from=static -v to=extern \
	  >$@
smctr.i: $(LINUX)/drivers/net/tokenring/smctr.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E -DCONFIG_SMCTR $< >$@
wavelan_cs.i: $(LINUX)/drivers/net/pcmcia/wavelan_cs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
wavelan_cs.i.c: wavelan_cs.i
	cat wavelan_cs.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=wavelan_attach -v from=static -v to=extern \
	  >$@
ixj.i: $(LINUX)/drivers/telephony/ixj.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
i810_bufs.i: $(LINUX)/drivers/char/drm/i810_bufs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
bufs.i: $(LINUX)/drivers/char/drm/bufs.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
slram.i: $(LINUX)/drivers/mtd/slram.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
partition.i: $(LINUX)/fs/udf/partition.c
	gcc $(CPPOPTS) -E $< >$@
dir.i: $(LINUX)/fs/hpfs/dir.c
	gcc $(CPPOPTS) -E $< >$@
anode.i: $(LINUX)/fs/hpfs/anode.c
	gcc $(CPPOPTS) -E $< >$@
matroxfb_crtc2.i: $(LINUX)/drivers/video/matrox/matroxfb_crtc2.c
	gcc $(CPPOPTS) -E $< >$@
matroxfb_crtc2.i.c: matroxfb_crtc2.i
	cat matroxfb_crtc2.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=matroxfb_dh_regit -v from=static -v to=extern \
	  >$@
AM53C974.i: $(LINUX)/drivers/scsi/AM53C974.c
	gcc $(CPPOPTS) -E $< >$@
AM53C974.i.c: AM53C974.i
	cat AM53C974.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=AM53C974_init -v from=static -v to=extern \
	  >$@
sis_main.i: $(LINUX)/drivers/video/sis/sis_main.c
	gcc $(CPPOPTS) -E $< >$@
irq.i: $(LINUX)/arch/i386/kernel/irq.c
	gcc $(CPPOPTS) -E $< >$@
ioctl.i: $(LINUX)/drivers/char/drm/ioctl.c
	gcc $(CPPOPTS) -E -D __FUNCTION__="" $< >$@
nfsfh.i: $(LINUX)/fs/nfsd/nfsfh.c
	gcc $(CPPOPTS) -E $< >$@
i2o_core.i: $(LINUX)/drivers/i2o/i2o_core.c
	gcc $(CPPOPTS) -E $< >$@
journal.i: $(LINUX)/fs/reiserfs/journal.c
	gcc $(CPPOPTS) -E $< >$@
ide-tape.i: $(LINUX)/drivers/ide/ide-tape.c
	gcc $(CPPOPTS) -E $< >$@
# Cannot compile:
#amutils.i: $(LINUX)/drivers/acpi/interpreter/amutils.c
#	gcc $(CPPOPTS) -I/usr/src/linux-2.4.1/src/drivers/acpi/include -D_IA64 -D_LINUX -DACPI_USE_STANDARD_HEADERS -E $< >$@
proc.i: $(LINUX)/drivers/char/drm/proc.c
	gcc $(CPPOPTS) -E -D __FUNCTION__="" $< >$@
sch_gred.i: $(LINUX)/net/sched/sch_gred.c
	gcc $(CPPOPTS) -E -DCONFIG_NET_SCHED $< >$@
misc.i: $(LINUX)/fs/udf/misc.c
	gcc $(CPPOPTS) -E $< >$@
capi.i: $(LINUX)/drivers/isdn/avmb1/capi.c
	gcc $(CPPOPTS) -E -DCONFIG_ISDN_CAPI_MIDDLEWARE $< >$@
capi.i.c: capi.i
	cat capi.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=capi_write -v from=static -v to=extern | \
	  chfun.awk -v fun=capinc_raw_write -v from=static -v to=extern \
	  >$@
capidrv.i: $(LINUX)/drivers/isdn/avmb1/capidrv.c
	gcc $(CPPOPTS) -E $< >$@
capidrv.i.c: capidrv.i
	cat capidrv.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=if_readstat -v from=static -v to=extern | \
	  chfun.awk -v fun=if_sendbuf -v from=static -v to=extern \
	  >$@
epca.i: $(LINUX)/drivers/char/epca.c
	gcc $(CPPOPTS) -E $< >$@
qla1280.i: $(LINUX)/drivers/scsi/qla1280.c
	gcc $(CPPOPTS) -E $< >$@
defxx.i: $(LINUX)/drivers/net/defxx.c
	gcc $(CPPOPTS) -E $< >$@
defxx.i.c: defxx.i
	cat defxx.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=dfx_rcv_init -v from=static -v to=extern \
	  >$@
util.i: $(LINUX)/ipc/util.c
	gcc $(CPPOPTS) -E $< >$@
bttv-driver.i: $(LINUX)/drivers/media/video/bttv-driver.c
	gcc $(CPPOPTS) -E $< >$@
zatm.i: $(LINUX)/drivers/atm/zatm.c
	gcc $(CPPOPTS) -DCONFIG_ATM_ZATM_EXACT_TS -E $< >$@
g_NCR5380.i: $(LINUX)/drivers/scsi/g_NCR5380.c
	gcc $(CPPOPTS) -DCONFIG_SCSI_G_NCR5380_PORT -E $< >$@
fore200e.i: $(LINUX)/drivers/atm/fore200e.c
	gcc $(CPPOPTS) -DCONFIG_ATM_FORE200E_TX_RETRY=5 -E $< >$@
sunhme.i: $(LINUX)/drivers/net/sunhme.c
	gcc $(CPPOPTS) -E $< >$@
sunhme.i.c: sunhme.i
	cat sunhme.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=happy_meal_pci_init -v from=static -v to=extern \
	  >$@
skfddi.i: $(LINUX)/drivers/net/skfp/skfddi.c
	gcc $(CPPOPTS) -I$(LINUX)/drivers/net/skfp -DTAG_MODE -DPCI -E $< >$@
smc9194.i: $(LINUX)/drivers/net/smc9194.c
	gcc $(CPPOPTS) -E $< >$@
intrep.i: $(LINUX)/fs/jffs/intrep.c
	gcc $(CPPOPTS) -E $< >$@
intrep.i.c: intrep.i
	cat intrep.i | protect-multiline-strings.awk | \
	  chfun.awk -v fun=jffs_checksum_flash -v from="__u32" -v to="extern __u32" \
	  >$@
sr.i: $(LINUX)/drivers/scsi/sr.c
	gcc $(CPPOPTS) -E $< >$@
qlogicisp.i: $(LINUX)/drivers/scsi/qlogicisp.c
	gcc $(CPPOPTS) -E $< >$@
tms380tr.i: $(LINUX)/drivers/net/tokenring/tms380tr.c
	gcc $(CPPOPTS) -DCONFIG_TMS380TR -E $< >$@
3c505.i: $(LINUX)/drivers/net/3c505.c
	gcc $(CPPOPTS) -E $< >$@
scsi_scan.i: $(LINUX)/drivers/scsi/scsi_scan.c
	gcc $(CPPOPTS) -E $< >$@
lanstreamer.i: $(LINUX)/drivers/net/tokenring/lanstreamer.c
	gcc $(CPPOPTS) -E $< >$@
binsert.i: $(LINUX)/fs/hfs/binsert.c
	gcc $(CPPOPTS) -E $< >$@
rio_linux.i: $(LINUX)/drivers/char/rio/rio_linux.c
	gcc $(CPPOPTS) -D __FUNCTION__="" -E $< >$@
sd.i: $(LINUX)/drivers/scsi/sd.c
	gcc $(CPPOPTS) -E $< >$@
bluetooth.i: $(LINUX)/drivers/usb/bluetooth.c
	gcc $(CPPOPTS) -D __FUNCTION__="\"this_function\"" -E $< >$@
