#=======================================================================
# Makefile for files in /u/sy/beebe/src/benchmarks/java/
#
# [25-Jun-1998]
#=======================================================================
# Program definitions

PROGRAM		= CHANGE-THIS-VALUE
PROGLIB		= CHANGE-THIS-VALUE
VERSION		= 1.0

#=======================================================================
# Installation locations

prefix		= /usr/local
bindir		= $(prefix)/bin
catdir		= $(prefix)/man/cat$(manext)
libdir		= $(libtop)/$(PROGRAM)-$(VERSION)
libtop		= $(prefix)/$(PROGLIB)/
mandir		= $(prefix)/man/man$(manext)
manext		= 1
shrlibdir	= $(libtop)/$(PROGRAM)-$(VERSION)
shrlibtop	= $(prefix)/share/$(PROGLIB)/

#=======================================================================
# Macro definitions

AVERAGE		= $(AWK) 'BEGIN {min = 1.e38; max = -min} \
			{min = (($$2 < min) ? $$2 : min); \
			max = (($$2 > max) ? $$2 : max); \
			sum += $$2} \
			END {printf("Average Mflops/s: %.3f in %d trials: range = %.3f .. %.3f\n", \
			sum/NR, NR, min, max)}'

AWK		= awk

CHMOD		= chmod
CP		= /bin/cp -p
CP		= rcp -p

HTMLPRETTY	= html-pretty

JAVA		= java

JAVAC		= javac

JAVAG		= java_g

JAVADOC		= javadoc

JAVALD		= javald

LIBFILES	= /dev/null

LN		= ln

LS		= ls

MKDIR		= mkdir -p

RM		= /bin/rm -f

SHELL		= /bin/sh

SHRLIBFILES	= /dev/null

TEE		= tee

#=======================================================================
# Compiler flags and source files

JAVACFLAGS	=
JAVADOCFLAGS	=
JAVADOCS	= $(JAVASRCS:.java=.html)
JAVAEXES	= $(JAVASRCS:.java=)
JAVAFLAGS	=
JAVALDFLAGS	=
JAVAOBJS	= $(JAVASRCS:.java=.class)
JAVASRCS	= Linpack.java
JAVATOPDOCS	= AllNames.html packages.html tree.html

#=======================================================================
# Suffixes and extra rule

.SUFFIXES:	.html .csv .class .html .java

.csv.html:
	$(AWK) -f csv-to-html.awk $< | $(HTMLPRETTY) -g 3.2 >$@

.java.class:
	$(JAVAC) $(JAVACFLAGS) $<

.java.html:
	$(JAVADOC) $(JAVADOCFLAGS) $<

.java:
	$(JAVALD) $(JAVALDFLAGS) $*

#=======================================================================
# Targets:

all:	linpack-java-benchmark

linpack-java-benchmark:
	@echo Java with debugging and JIT compilation...
	@$(CP) Linpack.java /tmp ; \
	TOPDIR=$$PWD ; \
	cd /tmp ; \
	$(JAVAC) Linpack.java ; \
	for f in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; \
	do \
		$(JAVAG) Linpack ; \
	done | \
	tee $$TOPDIR/$@.debug-JIT.`hostname` | \
	$(AVERAGE)
	@-$(RM) /tmp/Linpack.class /tmp/Linpack.java
#
	@echo ""
	@echo Java with JIT compilation...
	@$(CP) Linpack.java /tmp ; \
	TOPDIR=$$PWD ; \
	cd /tmp ; \
	$(JAVAC) Linpack.java ; \
	for f in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; \
	do \
		$(JAVA) Linpack ; \
	done | \
	tee $$TOPDIR/$@.JIT.`hostname` | \
	$(AVERAGE)
	@-$(RM) /tmp/Linpack.class /tmp/Linpack.java
#
	@echo ""
	@echo Java with debugging and no JIT compilation...
	@$(CP) Linpack.java /tmp ; \
	TOPDIR=$$PWD ; \
	cd /tmp ; \
	$(JAVAC) Linpack.java ; \
	for f in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; \
	do \
		$(JAVAG) -Djava.compiler=none Linpack ; \
	done | \
	tee $$TOPDIR/$@.debug-no-JIT.`hostname` | \
	$(AVERAGE)
	@-$(RM) /tmp/Linpack.class /tmp/Linpack.java
#
	@echo ""
	@echo Java with no JIT compilation...
	@$(CP) Linpack.java /tmp ; \
	TOPDIR=$$PWD ; \
	cd /tmp ; \
	$(JAVAC) Linpack.java ; \
	for f in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; \
	do \
		$(JAVA) -Djava.compiler=none Linpack ; \
	done | \
	tee $$TOPDIR/$@.no-JIT.`hostname` | \
	$(AVERAGE)
	@-$(RM) /tmp/Linpack.class /tmp/Linpack.java

clean:
	-$(RM) $(JAVAOBJS)
	-$(RM) *.i
	-$(RM) *.o
	-$(RM) *~
	-$(RM) \#*
	-$(RM) a.out
	-$(RM) core

clobber:	distclean

distclean:	mostlyclean
	-$(RM) $(PROGRAM)
	-$(RM) $(JAVADOCS) $(JAVATOPDOCS)
	-$(RM) $(JAVAEXES)
docs:	$(JAVATOPDOCS)

install:	install-exe install-lib install-shrlib install-man install-show

install-exe:	uninstall-exe
	$(CP) $(PROGRAM) $(bindir)/$(PROGRAM)
	$(LN) $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION)
	$(CHMOD) 775 $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION)

install-lib:	uninstall-lib
##	$(MKDIR) $(libtop)
##	@if test -d $(libtop) ; then true ; else echo Cannot create $(libtop) ; exit 1 ; fi
##	$(MKDIR) $(libdir)
##	@if test -d $(libdir) ; then true ; else echo Cannot create $(libdir) ; exit 1 ; fi
##	$(CP) $(LIBFILES) $(libdir)/
##	$(CHMOD) -R 664 $(libdir)/

install-man:	uninstall-man
	$(CP) $(PROGRAM).man $(mandir)/$(PROGRAM).$(manext)
	$(CHMOD) 775 $(mandir)/$(PROGRAM).$(manext)

install-show:
	@echo ''
	@echo Installed files...
	@$(LS) -l $(bindir)/$(PROGRAM) $(bindir)/$(PROGRAM)-$(VERSION) \
		$(mandir)/$(PROGRAM).$(manext)
	@if test -d $(libdir) ; then $(LS) -lR $(libdir) ; fi
	@echo ''

install-shrlib:	uninstall-shrlib
##	$(MKDIR) $(shrlibtop)
##	@if test -d $(shrlibtop) ; then true ; else echo Cannot create $(shrlibtop) ; exit 1 ; fi
##	$(MKDIR) $(shrlibdir)
##	@if test -d $(shrlibdir) ; then true ; else echo Cannot create $(shrlibdir) ; exit 1 ; fi
##	$(CP) $(SHRLIBFILES) $(shrlibdir)/
##	$(CHMOD) -R 664 $(shrlibdir)/

$(JAVATOPDOCS): $(JAVASRCS)
	$(JAVADOC) $(JAVADOCFLAGS) $(JAVASRCS)

maintainer-clean:	distclean
	@echo "This command is intended for maintainers to use;"
	@echo "it deletes files that may require special tools to rebuild."
mostlyclean:	clean
programs:	$(JAVAOBJS) $(JAVAEXES)

uninstall:	uninstall-exe uninstall-lib install-shrlib uninstall-man

uninstall-exe:
	-$(RM) $(bindir)/$(PROGRAM)
	-$(RM) $(bindir)/$(PROGRAM)-$(VERSION)

uninstall-lib:
##	-$(RM) -r $(libdir)

uninstall-man:
	-$(RM) $(mandir)/$(PROGRAM).$(manext)
	-$(RM) $(catdir)/$(PROGRAM).$(manext)

uninstall-shrlib:
##	-$(RM) -r $(shrlibdir)

#=======================================================================
# File dependencies

#=======================================================================
