# case settings
# p2p case
P2P_DIR = P2P
P2P_TRACE_DIR = p2p_trace

NPB_DIR = NPB3.4.2/NPB3.4-MPI
# cg case
CG_TRACE_DIR = cg_trace


# log
TIME := $(shell date "+%Y-%m-%d_%H-%M-%S")
LOG_DIR = logs/${TIME}
LOG = ${LOG_DIR}/.marker

# scorep settings
export OMP_NUM_THREADS = 1
export SCOREP_ENABLE_TRACING = true
export SCOREP_ENABLE_PROFILING = false
export SCOREP_ENABLE_UNWINDING = true
export SCOREP_TOTAL_MEMORY = 256M
# scalasca settings
export SCAN_ANALYZE_OPTS = "--time-correct"

all: p2p_run cg_run

# create log dir
${LOG}:
	mkdir -p ${LOG_DIR}
	touch ${LOG}

# p2p case
${P2P_DIR}/p2p: ${P2P_DIR}/p2p.c
	scorep mpicc -O2 -o $@ $^
${P2P_TRACE_DIR}/traces.otf2: ${P2P_DIR}/p2p
	SCOREP_EXPERIMENT_DIRECTORY=${P2P_TRACE_DIR} \
	srun -p ja -n 2 -N 1 $<
p2p_run: ${P2P_TRACE_DIR}/traces.otf2 ${LOG}
	srun -p ja -n 2 -N 1 scout.mpi $< 2>&1 | tee -a ${LOG_DIR}/p2p_scout.log
	cp ${P2P_TRACE_DIR}/trace.stat ${LOG_DIR}/p2p_scout.stat


# cg case
${NPB_DIR}/bin/cg.B.x: 
	cd ${NPB_DIR}; make cg CLASS=B
${CG_TRACE_DIR}/traces.otf2: ${NPB_DIR}/bin/cg.B.x 
	SCOREP_EXPERIMENT_DIRECTORY=${CG_TRACE_DIR} \
	srun -p ja -n 2 -N 1 $< 
cg_run: ${CG_TRACE_DIR}/traces.otf2 ${LOG}
	srun -p ja -n 2 -N 1 scout.mpi $< 2>&1 | tee -a ${LOG_DIR}/cg_scout.log
	cp ${CG_TRACE_DIR}/trace.stat ${LOG_DIR}/cg_scout.stat



# clean all except log
clean: clean_trace
	rm ${P2P_DIR}/p2p || true
	cd ${NPB_DIR}; make clean
	rm ${NPB_DIR}/bin/* || true

clean_all: clean clean_log

clean_trace:
	rm -r ${P2P_TRACE_DIR}/ || true
	rm -r ${CG_TRACE_DIR}/ || true
	rm -r *_trace-*/ || true
	rm experiment_data.txt || true

clean_log:
	rm -r logs/ || true