#####################################################################
## cutSpace.	MakeFile: UTF-8
## Usage: make [-f makefile] [Target...]
#####################################################################
empty =
ifeq ("$(OS)", "Windows_NT")	# Set OS-dependent variables
  PS ?= ;
  FS ?= \$(empty)
##Please correct the Path ####
# JAVAHOME = \Java\jdk-18.0.1
  JAVAHOME = \Java\jdk-18.0.1.1
##############################
  JAVA =	$(JAVAHOME)\bin\java
  JAVAC =	$(JAVAHOME)\bin\javac
  GAWK =	bin\gawk
  DIFF =	FC
  isExist =	CMD /C 2>NUL DIR /B
  RM = 		CMD /C 2>NUL DEL /Q
  RMR = 	CMD /C 2>NUL 1>NUL DEL /S/Q
  RMDIR =	CMD /C 2>NUL RD /S/Q
else
  PS ?= :
  FS ?= /
  JAVAHOME = ~/Java/jdk-18
  JAVA =	java
  JAVAC =	javac
  GAWK =	gawk
  DIFF =	diff --strip-trailing-cr
  isExist =	ls 2>/dev/null
  RM = 		rm -f
  RMR = 	rm -f -r
  RMDIR =	rmdir
endif
# Environment variable
export JAVA_HOME = $(JAVAHOME)
#
# JAVAOPTS = -ea
# JITOPTS = -XX:+PrintCompilation
# JITOPTS = -XX:+CITime
# INLINE = -XX:MaxInlineSize=64
INLINE = -XX:MaxInlineSize=48
LIBJAR = $(JAVAOPTS) $(JITOPTS) -jar lib/benchTrim.jar
#
# Commands
JIT01 =	$(JAVA) $(LIBJAR)
JIT01X=	$(JAVA) $(INLINE) $(LIBJAR)
JIT02 =	$(JAVA) -XX:-TieredCompilation $(LIBJAR)
JIT02X=	$(JAVA) -XX:-TieredCompilation $(INLINE) $(LIBJAR)
JIT03 =	$(JAVA) -XX:CompileThreshold=10000 -XX:-TieredCompilation $(LIBJAR)
JIT03X=	$(JAVA) -XX:CompileThreshold=10000 -XX:-TieredCompilation $(INLINE) $(LIBJAR)

#	-XX:MaxInlineSize=35 (Byte)
##	https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/java.html#BABDDFII
#	-XX:+PrintCompilation	ログを出力
#	-XX:CompileThreshold=invocations
#		コンパイル前に解析対象メソッドの呼出しの数を設定します。
#		デフォルトで、サーバーJVMでは、JITコンパイラは10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。
#		階層化コンパイルが有効な場合、このオプションは無視されます。オプション-XX:+TieredCompilation を参照してください。
#	-XX:-TieredCompilation
#		階層化コンパイルの使用を無効にします。デフォルトでは、このオプションが有効になっています。(インタプリタかC2かの二択)

#	-XX:CICompilerCount=3
#	-XX:TieredStopAtLevel=n
    # level 0 - interpreter
    # level 1 - C1 with full optimization (no profiling)
    # level 2 - C1 with invocation and backedge counters
    # level 3 - C1 with full profiling (level 2 + MDO)
    # level 4 - C2
#	-Xcomp	いきなりコンパイルする
#	-Xint	インタプリタのみ

vpath %.java sample

%.class : %.java
	$(JAVAC) -encoding utf-8 -d . $?

all : info
clean :
	-$(RMR) tmp$(FS)*
	-$(if $(shell $(isExist) tmp$(FS)test*),@$(RMDIR) tmp$(FS)test,)
	-$(RM) *.class
	-$(RM) DEBUG*.html

##############################
## Please raise the priority and execute.
#	start /realtime cmd /c make bench1
bench1 :
	$(JIT01) -T="bench 1W" -warmup -cool=0 -ice=0 >JIT.log 2>STDERR.txt
bench1X :
	$(JIT01X) -T="bench 1X" >JIT.log 2>STDERR.txt

bench2 :
	$(JIT02) -T="bench 2" >JIT.log 2>STDERR.txt
bench2X :
	$(JIT02X) -T="bench 2X" >JIT.log 2>STDERR.txt

bench3 :
	$(JIT03) -T="bench 3" >JIT.log 2>STDERR.txt
bench3X :
	$(JIT03X) -T="bench 3X" >JIT.log 2>STDERR.txt
