INCLUDES = -I${PREFIX}/include
LIBS = -L${PREFIX}/lib

HTSLIB_INFO := $(shell cd htslib; make -B --always-make CC=$(CC) CFLAGS="$(CFLAGS)" LDFLAGS="$(LIBS)"; make CC=$(CC) CFLAGS="$(CFLAGS)" LDFLAGS="$(LIBS)" prefix=../htslib_aim install)

AVX2_INFO := $(shell grep avx2 /proc/cpuinfo 1>/dev/null 2>&1; echo $$?)
AVX2 =1

ifeq ($(AVX2_INFO),1)
$(warning "CPU does not support AVX2...")
CFLAGS = -w -c -msse4.2 -mpopcnt -fomit-frame-pointer -Winline -O3 -lz -I htslib_aim/include -L htslib_aim/lib -lhtsBitMapperBS -lbz2 -llzma
LDFLAGS = -lm -lz -lpthread -O3 -mpopcnt -msse4.2 -lz -w -I htslib_aim/include -L htslib_aim -lhtsBitMapperBS -lbz2 -llzma
else
$(warning "CPU can support AVX2...")
#CFLAGS = -w -c -mavx2 -mpopcnt -fomit-frame-pointer -Winline -O3 -D __AVX2__ -I htslib_aim/include -L htslib_aim/lib -lhtsBitMapperBS -lbz2 -llzma
#LDFLAGS = -lm -lz -lpthread -O3 -mpopcnt -mavx2 -lz -w -D __AVX2__ -I htslib_aim/include -L htslib_aim/lib -lhtsBitMapperBS -lbz2 -llzma
CFLAGS = -w -c -mavx2 -mpopcnt -fomit-frame-pointer -Winline -O3 -D __AVX2__ -I htslib_aim/include -lbz2 -llzma
LDFLAGS = -lm -lz -lpthread -O3 -mpopcnt -mavx2 -lz -w -D __AVX2__ -I htslib_aim/include -lbz2 -llzma
endif

SOURCES = saca-k.cpp bwt.cpp Bitmapper_main.cpp Process_CommandLines.cpp Auxiliary.cpp Index.cpp Schema.cpp Process_sam_out.cpp Process_Reads.cpp Ref_Genome.cpp Levenshtein_Cal.cpp SAM_queue.cpp bam_prase.cpp ksw.cpp
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = bitmapperBS

.PHONY: all

.ONESHELL:
all: $(SOURCES) $(EXECUTABLE) psascan FORCE

$(EXECUTABLE): $(SOURCES) FORCE
	$(CXX) $(SOURCES) $(INCLUDES) -o $@ htslib_aim/lib/libhts.a $(LIBS) $(LDFLAGS)

psascan:
	cd pSAscan-0.1.0/src
	$(CXX) $(CXXFLAGS) -o ../../psascan -I$(PREFIX)/include -L$(PREFIX)/lib -ldivsufsort ./psascan_src/utils.cpp main.cpp -ldivsufsort -ldivsufsort64 -fopenmp

.c.o: FORCE
	$(CC) $(CFLAGS) $(INCLUDES) $< -o $@ 
clean:
	rm -f *.o *~ \#* bitmapper_BS

PHONY   +=FORCE
FORCE:

.PHONY: $(PHONY)
