CC_EXEC = gcc
OPT_LEVEL = 3

include makefile.version
-include ~/.R/DBPZ_debug_makefile

CCFLAGS = -mtune=core2 -O${OPT_LEVEL} -DMAKE_FOR_EXON  -D MAKE_STANDALONE -D SUBREAD_VERSION=\"${SUBREAD_VERSION}\"  -D_FILE_OFFSET_BITS=64 ${WARNING_LEVEL} -D __MINGW32__
LDFLAGS = ${STATIC_MAKE} -pthread -lz -O${OPT_LEVEL} -DMAKE_FOR_EXON -D MAKE_STANDALONE -lm
CC = ${CC_EXEC}  ${CCFLAGS}  -fmessage-length=0  -ggdb 


ALL_LIBS= core core-junction core-indel sambam-file sublog gene-algorithms hashtable input-files sorted-hashtable gene-value-index exon-algorithms HelperFunctions interval_merge long-hashtable core-bigtable seek-zlib input-blc
ALL_OBJECTS=$(addsuffix .o, ${ALL_LIBS})
ALL_H=$(addsuffix .h, ${ALL_LIBS})
ALL_C=$(addsuffix .c, ${ALL_LIBS})

all: $(ALL_OBJECTS) genRandomReads detectionCall sublong repair txUnique featureCounts removeDup exactSNP subread-buildindex subindel  subread-align subjunc qualityScores subread-fullscan propmapped flattenGTF # samMappedBases mergeVCF  testZlib
	mkdir -p ../bin/utilities
	mv longread-one/LRM longread-one/sublong
	mv longread-one/sublong subread-align subjunc featureCounts  subindel exactSNP subread-buildindex ../bin/
	mv detectionCall genRandomReads repair propmapped qualityScores removeDup subread-fullscan txUnique flattenGTF ../bin/utilities
	@echo
	@echo "###########################################################"
	@echo "#                                                         #"
	@echo "#  Installation successfully completed.                   #"
	@echo "#                                                         #"
	@echo "#  Generated executables were copied to directory ../bin/ #"
	@echo "#                                                         #"
	@echo "###########################################################"
	@echo

$(ALL_OBJECTS): $(ALL_C) $(ALL_H)
	$(CC) -o $@ -c $(subst .o,.c,$@)
	
sublong: longread-one/longread-mapping.c  ${ALL_OBJECTS}
	echo "MINGW32 = -D __MINGW32__" > longread-one/make.version
	rm -f longread-one/*.o
	cd longread-one && $(MAKE)

genRandomReads: gen_rand_reads.c ${ALL_OBJECTS}
	${CC} -o genRandomReads gen_rand_reads.c ${ALL_OBJECTS} ${LDFLAGS}

flattenGTF: flattenAnnotations.c ${ALL_OBJECTS}
	${CC} -o flattenGTF flattenAnnotations.c  ${ALL_OBJECTS} ${LDFLAGS}

detectionCall: detection-calls.c	 ${ALL_OBJECTS}
	${CC} -o detectionCall detection-calls.c  ${ALL_OBJECTS} ${LDFLAGS}

repair: read-repair.c	 ${ALL_OBJECTS}
	${CC} -o repair read-repair.c  ${ALL_OBJECTS} ${LDFLAGS}

txUnique: tx-unique.c tx-unique.h	 ${ALL_OBJECTS}
	${CC} -o txUnique tx-unique.c  ${ALL_OBJECTS} ${LDFLAGS}

globalReassembly: global-reassembly.c ${ALL_OBJECTS}
	${CC} -o globalReassembly  global-reassembly.c ${ALL_OBJECTS} ${LDFLAGS}

propmapped: propmapped.c ${ALL_OBJECTS}
	${CC} -o propmapped propmapped.c ${ALL_OBJECTS} ${LDFLAGS}

exactSNP: SNPCalling.c SNPCalling.h  ${ALL_OBJECTS}
	${CC}  -o exactSNP SNPCalling.c  ${ALL_OBJECTS} ${LDFLAGS}

subread-buildindex: index-builder.c subread.h ${ALL_OBJECTS}
	${CC}  -o subread-buildindex  index-builder.c ${ALL_OBJECTS} ${LDFLAGS}

removeDup: removeDupReads.c removeDupReads.h subread.h ${ALL_OBJECTS}
	${CC} -o  removeDup removeDupReads.c  ${ALL_OBJECTS} ${LDFLAGS}

subindel: SUBindel.c core.h subread.h  ${ALL_OBJECTS}
	${CC} -o subindel SUBindel.c ${ALL_OBJECTS} ${LDFLAGS}

featureCounts: readSummary.c subread.h  ${ALL_OBJECTS}
	${CC} -o featureCounts readSummary.c ${ALL_OBJECTS} ${LDFLAGS}

subread-align: core-interface-aligner.c  ${ALL_OBJECTS}
	${CC} -o subread-align core-interface-aligner.c  ${ALL_OBJECTS} ${LDFLAGS} 

subjunc: core-interface-subjunc.c  ${ALL_OBJECTS}
	${CC} -o subjunc core-interface-subjunc.c  ${ALL_OBJECTS} ${LDFLAGS} 

subtools: subtools.c ${ALL_OBJECTS}
	${CC} -o subtools subtools.c ${ALL_OBJECTS} ${LDFLAGS} 

qualityScores: qualityScores.c ${ALL_OBJECTS}
	${CC} -o qualityScores qualityScores.c  ${ALL_OBJECTS}  ${LDFLAGS}

subread-fullscan: fullscan.c  ${ALL_OBJECTS}
	${CC} -o subread-fullscan fullscan.c  ${ALL_OBJECTS}  ${LDFLAGS}

clean:
	rm -f core featureCounts exactSNP removeDup subread-buildindex ${ALL_OBJECTS}
