# older GCC needs -std=c99
GCCDEVEL= -std=c99 # -Wformat-overflow=1 # -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable
MAINSOURCES=i2c.c icode.c ast.c mktuple.c genvar.c pass1-flat.c pathopen.c
UTILSOURCES=flex.c stringpool.c  impsup-signals.c 
HEADERS=i2c.h flex.h impsig.h  imptoc.h  perms.h  stringpool.h  tables.h
SOURCES=${MAINSOURCES} ${UTILSOURCES}
VALGRINDOPTS=-fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize-undefined-trap-on-error -fsanitize=float-cast-overflow -fno-sanitize-recover=all -fstack-protector

all:    i2c banner idec i77 uncomment-imp
	echo All up to date

# on x86_64 need to add -m32 otherwise i2c fails at runtime
# yet for some reason the same is not needed on an aarch64 raspberry pi 5.
# test below tries to compile with -m32 but if that option is not recognised
# it then compiles normally.  This ought to work one way or another with all
# the systems I'm aware of.
i2c:    ${SOURCES} ${HEADERS} Makefile
	arm-linux-gnueabihf-gcc -Wall ${GCCDEVEL} -g -static -o i2c ${SOURCES} || gcc -m32 -Wall ${GCCDEVEL} -g -static -o i2c ${SOURCES} || gcc -Wall ${GCCDEVEL} -g -static -o i2c ${SOURCES}

i77:    i77.c Makefile
	cc -g -o i77 i77.c

idec:   idec.c Makefile
	gcc ${VALGRINDOPTS} -g -o idec idec.c

banner: banner.c Makefile
	gcc -o banner banner.c

uncomment-imp: uncomment-imp.c Makefile
	gcc -o uncomment-imp uncomment-imp.c

install:
	echo "if this fails try: sudo make install"
	mkdir -p /usr/local/include/i2c/perms /usr/local/lib/i2c /usr/local/bin
	ln -s `pwd`/perms.inc /usr/local/include/i2c/perms.inc
	ln -s `pwd`/perms.h /usr/local/include/i2c/perms.h
	ln -s `pwd`/perms.c /usr/local/include/i2c/perms.c
	ln -s `pwd`/perms.o /usr/local/lib/i2c/perms.o
	ln -s `pwd`/i2c /usr/local/bin/i2c
	ln -s `pwd`/i77 /usr/local/bin/i77
	ln -s `pwd`/idec /usr/local/bin/idec
	ln -s `pwd`/uncomment-imp /usr/local/bin/uncomment-imp
	# i77 also needs 'gtcpp' which is built in /home/gtoal/src/unicode/mcpp
	# with binaries currently in /home/gtoal/bin/gtcpp and /home/gtoal/bin/gtcpp__FILE__

clean:
	rm -f i77 i2c uncomment-imp idec banner perms.o perms-m32.o

upload:
	rm -f i2c.zip
	rm -f regression*/*~ regression*/#*# dhrystone/*~ dhrystone/*.icd dhrystone/*.lis dhrystone/*.o
	bash -c '( pushd perms ; make clean ; popd ; )'
	zip -r i2c.zip REGRESSION*.sh regression*/ perms/ dhrystone/ i2c.c ast.c mktuple.c icode.c pass1-flat.c genvar.c Makefile perms.h perms.inc perms.c tables.h flex.c stringpool.c flex.h i2c.h stringpool.h README.txt README-I2C-MANUAL.txt imptoc.h impsig.h impsup-signals.c banner.c idec.c idec.c i77.c uncomment-imp.c pathopen.c make-dhry.sh INSTALL.sh
	scp i2c.zip gtoal@gtoal.com:gtoal.com/history.dcs.ed.ac.uk/archive/languages/imp77-tmp/gtoal/
	ssh gtoal@gtoal.com '( cd gtoal.com/history.dcs.ed.ac.uk/archive/languages/imp77-tmp/gtoal ; unzip -o i2c.zip ; )'
	cd perms
	make
	cd ..
