
#CC=/usr/local/new/bin/g++
CC=g++

O=-O3 -g0 -Wall -fomit-frame-pointer -Wno-write-strings -Wno-invalid-offsetof \
  -Wno-parentheses -fwrapv -fno-delete-null-pointer-checks -fno-strict-aliasing \
  --unsigned-char -fexpensive-optimizations


help:
	@echo
	@echo "       === Sieve benchmark" $$( cat VERSION | tr '"' '\n' | head -2 | tail -1 ) "==="
	@echo
	@echo "make targets:"
	@echo "   sieve           C version of the code"
	@echo "   hpsieve         C version of the code for HP-UX aCC compiler"
	@echo "   asm_sieve       x86asm assembly version"
	@echo "   asm64_sieve     AMD64asm assembly version"
	@echo "   gcc_amiga_sieve For Amiga using gcc compiler"
	@echo "   asm68k_sieve    Assembly version for Amiga"
	@echo "   fastsieve       C version with FAST_VERSION macro"
	@echo "                   defined -- NOT FOR BENCHMARKING!"
	@echo "                   (see sieve.h for explanation)"
	@echo "   webserver       converts results to web/*.json and runs"
	@echo "                   web server for the result browser there"
	@echo "   clean"
	@echo "read KEY_to_FILES for more information"

webserver: web/benchmark_data.json
	python3 web/server.py

web/benchmark_data.json: RESULTS
	python3 web/process_benchmarks.py 

sieve: sieve.cc sieve.h
	$(CC) $(O) -o sieve sieve.cc

hpsieve: sieve.cc sieve.h
	aCC -ext +noeh -fast +O4 +Odataprefetch +Oloop_block \
            +Oloop_transform +Opipeline +Oprocelim +Oregionsched \
            +Oregreassoc +Ostatic_prediction  -o sieve sieve.cc
# +Oinfo

asm_sieve: sieve.cc fast_sieve.o sieve.h
	$(CC) -DASSEMBLY $(O) -o asm_sieve fast_sieve.o sieve.cc


asm64_sieve: sieve.cc fast_sieve-64.o sieve.h
	$(CC) -DASSEMBLY $(O) -o asm64_sieve fast_sieve-64.o sieve.cc

gcc_amiga_sieve: sieve.cc sieve.h
	$(CC) -m68030 -O3 -g0 -fomit-frame-pointer --unsigned-char -fexpensive-optimizations -o gcc_amiga_sieve sieve.cc

asm68k_sieve: sieve.cc fast_68k.o sieve.h
	$(CC) -m68000 -DASSEMBLY -O3 -g0 -fomit-frame-pointer --unsigned-char -fexpensive-optimizations -o asm68k_sieve fast_68k.o sieve.cc 


fast_sieve.o: fast_sieve.S
	nasm -Xgnu -f elf32 -Ox  -l LST32.s fast_sieve.S -o fast_sieve.o

fast_sieve-64.o: fast_sieve-64.S
	nasm -Xgnu -f elf64 -Ox  -l LST64.s fast_sieve-64.S -o fast_sieve-64.o

fast_68k.o: fast_68k.S
	as -alh=LST68k.s fast_68k.S -o fast_68k.o

asm: sieve.cc
	$(CC) -S -O3 -g0 -fomit-frame-pointer --unsigned-char -fexpensive-optimizations -o sieve.s sieve.cc

# -masm=intel

fastsieve: sieve.cc
	$(CC) -DFAST_VERSION $(O) -o fastsieve sieve.cc

clean:
	rm -f web/benchmark_data.json LST32.s LST64.s LST68k.s fast_68k.o asm68k_sieve asm_sieve asm64_sieve fast_sieve.o fast_sieve-64.o sieve sieve.s *.eps *.pdf RESULTS/*.eps RESULTS/*.pdf *.MAP *.BAK *~ *.map *.bak


distclean: clean


restore: distclean


