CC = g++
#CC = clang++
CPPFLAGS = --std=c++11 -O2 -Isrc -Iinclude/miniselect
#CPPFLAGS = --std=c++11 -Wall 
OBJS_SIMULATION = experiments.o data.o IBOSS_algorithm.o NEW_algorithm.o UNIFORM_algorithm.o SRHT_algorithm.o SLEV_algorithm.o VDA_algorithm.o
OBJS_DATA_ANALYSIS = data_analysis.o data.o IBOSS_algorithm.o NEW_algorithm.o UNIFORM_algorithm.o SRHT_algorithm.o SLEV_algorithm.o VDA_algorithm.o

# run simulation
simulation : $(OBJS_SIMULATION)
	$(CC) $(CPPFLAGS) -o run_simulation $(OBJS_SIMULATION)
	rm -rf *.o
	./run_simulation

# run real data
data_analysis : $(OBJS_DATA_ANALYSIS)
	$(CC) $(CPPFLAGS) -o run_data_analysis $(OBJS_DATA_ANALYSIS)
	rm -rf *.o
	Rscript R/preprocess.R
	./run_data_analysis

experiments.o :
	$(CC) $(CPPFLAGS) -c src/experiments.cpp
data_analysis.o :
	$(CC) $(CPPFLAGS) -c src/data_analysis.cpp

data.o :
	$(CC) $(CPPFLAGS) -c src/data.cpp
IBOSS_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/IBOSS_algorithm.cpp
NEW_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/NEW_algorithm.cpp
UNIFORM_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/UNIFORM_algorithm.cpp
SRHT_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/SRHT_algorithm.cpp
SLEV_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/SLEV_algorithm.cpp
VDA_algorithm.o :
	$(CC) $(CPPFLAGS) -c src/VDA_algorithm.cpp

clean:
	rm -rf *.o
