1# user may define the whole sets of flags 2# LDFLAGS 3# CPPFLAGS 4# CXXFLAGS 5# CFLAGS 6 7# or these user-set flags that will be added to standard flags 8LDFLAGSextra ?= 9CXXFLAGSextra ?= 10 11# user may define the compiler 12CXX ?= g++ 13 14# user may set to '' and sed "htslib/htslib/*.h" to <htslib/*.h> 15# if they don't want the bundled htslib 16HTSLIB ?= htslib 17 18# pre-defined flags 19LDFLAGS_shared := -pthread -Lhtslib -Bstatic -lhts -Bdynamic -lz 20LDFLAGS_static := -static -static-libgcc -pthread -Lhtslib -lhts -lz 21LDFLAGS_Mac :=-pthread -lz htslib/libhts.a 22LDFLAGS_Mac_static :=-pthread -lz -static-libgcc htslib/libhts.a 23LDFLAGS_gdb := $(LDFLAGS_shared) 24 25# --iso-8601 is not portable 26DATE_FMT = -Iseconds 27ifdef SOURCE_DATE_EPOCH 28 BUILD_DATE ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "$(DATE_FMT)" 2>/dev/null || date -u "$(DATE_FMT)") 29else 30 BUILD_DATE ?= $(shell date "$(DATE_FMT)") 31endif 32 33BUILD_PLACE ?= $(HOSTNAME):$(shell pwd) 34 35COMPTIMEPLACE := -D'COMPILATION_TIME_PLACE="$(BUILD_DATE) $(BUILD_PLACE)"' 36 37# Defaults, can be overridden by make arguments or environment 38CXXFLAGS ?= -pipe -Wall -Wextra -O3 39CFLAGS ?= -pipe -Wall -Wextra -O3 40CXXFLAGS_SIMD ?= -mavx2 41 42# Unconditionally set essential flags and optimization options 43CXXFLAGS_common := -std=c++11 -fopenmp $(COMPTIMEPLACE) 44CXXFLAGS_main := $(CXXFLAGS_common) 45CXXFLAGS_gdb := -O0 -g3 $(CXXFLAGS_common) 46 47########################################################################################################## 48OBJECTS = SoloFeature_collapseUMI_Graph.o SoloFeature_collapseUMIall_multiMappers.o ParametersClip_initialize.o ClipMate_clip.o ClipCR4.o opal/opal.o ClipMate_clipChunk.o ClipMate_initialize.o \ 49 SoloFeature_loadRawMatrix.o SoloFeature_emptyDrops_CR.o soloInputFeatureUMI.o SoloFeature_countSmartSeq.o SoloFeature_redistributeReadsByCB.o \ 50 SoloFeature_quantTranscript.o SoloFeature_sumThreads.o SoloFeature_countVelocyto.o SoloFeature_countCBgeneUMI.o \ 51 Transcriptome_classifyAlign.o SoloFeature_cellFiltering.o \ 52 SoloFeature_statsOutput.o bamSortByCoordinate.o SoloBarcode.o \ 53 ParametersSolo.o SoloRead.o SoloRead_record.o \ 54 SoloReadBarcode.o SoloReadBarcode_getCBandUMI.o SoloBarcode_extractBarcode.o \ 55 SoloReadFeature.o SoloReadFeature_record.o SoloReadFeature_inputRecords.o \ 56 Solo.o SoloFeature.o SoloFeature_outputResults.o SoloFeature_processRecords.o SoloFeature_addBAMtags.o \ 57 ReadAlign_transformGenome.o Genome_transformGenome.o Transcript_convertGenomeCigar.o \ 58 twoPassRunPass1.o samHeaders.o Genome_genomeLoad.o Genome_genomeOutLoad.o Transcript_transformGenome.o ReadAlign_outputSpliceGraphSAM.o \ 59 ReadAlign_mapOneReadSpliceGraph.o SpliceGraph.o SpliceGraph_swScoreSpliced.o SpliceGraph_swTraceBack.o \ 60 SpliceGraph_findSuperTr.o sjAlignSplit.o \ 61 GTF.o GTF_transcriptGeneSJ.o GTF_superTranscript.o SuperTranscriptome.o \ 62 ReadAlign_outputAlignments.o \ 63 ReadAlign.o STAR.o \ 64 SharedMemory.o PackedArray.o SuffixArrayFuns.o Parameters.o Parameters_samAttributes.o InOutStreams.o SequenceFuns.o Genome.o ParametersGenome.o Stats.o \ 65 Transcript.o Transcript_alignScore.o Transcript_generateCigarP.o Chain.o \ 66 Transcript_variationAdjust.o Variation.o ReadAlign_waspMap.o \ 67 ReadAlign_storeAligns.o ReadAlign_stitchPieces.o ReadAlign_multMapSelect.o ReadAlign_mapOneRead.o readLoad.o \ 68 ReadAlignChunk.o ReadAlignChunk_processChunks.o ReadAlignChunk_mapChunk.o \ 69 OutSJ.o outputSJ.o blocksOverlap.o ThreadControl.o sysRemoveDir.o \ 70 ReadAlign_maxMappableLength2strands.o binarySearch2.o\ 71 ReadAlign_outputTranscriptSAM.o ReadAlign_outputTranscriptSJ.o ReadAlign_outputTranscriptCIGARp.o ReadAlign_calcCIGAR.cpp \ 72 ReadAlign_createExtendWindowsWithAlign.o ReadAlign_assignAlignToWindow.o ReadAlign_oneRead.o \ 73 ReadAlign_stitchWindowSeeds.o \ 74 ReadAlign_peOverlapMergeMap.o ReadAlign_mappedFilter.o \ 75 ParametersChimeric_initialize.o ReadAlign_chimericDetection.o ReadAlign_chimericDetectionOld.o ReadAlign_chimericDetectionOldOutput.o\ 76 ChimericDetection.o ChimericDetection_chimericDetectionMult.o ReadAlign_chimericDetectionPEmerged.o \ 77 stitchWindowAligns.o extendAlign.o stitchAlignToTranscript.o \ 78 ChimericSegment.cpp ChimericAlign.cpp ChimericAlign_chimericJunctionOutput.o ChimericAlign_chimericBAMoutput.o ChimericAlign_chimericStitching.o \ 79 Genome_genomeGenerate.o genomeParametersWrite.o genomeScanFastaFiles.o genomeSAindex.o \ 80 Genome_insertSequences.o insertSeqSA.o funCompareUintAndSuffixes.o funCompareUintAndSuffixesMemcmp.o \ 81 TimeFunctions.o ErrorWarning.o streamFuns.o stringSubstituteAll.o \ 82 Transcriptome.o Transcriptome_quantAlign.o Transcriptome_geneFullAlignOverlap.o \ 83 ReadAlign_quantTranscriptome.o Quantifications.o Transcriptome_geneCountsAddAlign.o \ 84 sjdbLoadFromFiles.o sjdbLoadFromStream.o sjdbPrepare.o sjdbBuildIndex.o sjdbInsertJunctions.o mapThreadsSpawn.o \ 85 Parameters_readFilesInit.o Parameters_openReadsFiles.cpp Parameters_closeReadsFiles.cpp Parameters_readSAMheader.o \ 86 bam_cat.o serviceFuns.o GlobalVariables.cpp \ 87 BAMoutput.o BAMfunctions.o ReadAlign_alignBAM.o BAMbinSortByCoordinate.o signalFromBAM.o bamRemoveDuplicates.o BAMbinSortUnmapped.o 88 89SOURCES := $(wildcard *.cpp) $(wildcard *.c) 90 91 92%.o : %.cpp 93 $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< 94 95%.o : %.c 96 $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< 97 98all: cleanCompileInfo STAR$(SFX) 99 100opal/opal.o : opal/opal.cpp opal/opal.h 101 cd opal && \ 102 $(CXX) -c -I./ -std=c++11 $(CPPFLAGS) $(CXXFLAGS) $(CXXFLAGSextra) $(CXXFLAGS_SIMD) opal.cpp 103 104.PHONY: clean 105clean: 106 'rm' -f *.o opal/opal.o STAR STARstatic STARlong Depend.list parametersDefault.xxd 107 108.PHONY: CLEAN 109CLEAN: clean 110 $(MAKE) -C $(HTSLIB) clean 111 112 113.PHONY: clean_solo 114clean_solo: 115 'rm' -f Solo*.o 116 117.PHONY: cleanCompileInfo 118cleanCompileInfo: 119 'rm' -f STAR.o Parameters.o 120 121ifneq ($(MAKECMDGOALS),clean) 122ifneq ($(MAKECMDGOALS),CLEAN) 123ifneq ($(MAKECMDGOALS),CLEAN) 124ifneq ($(MAKECMDGOALS),clean_solo) 125ifneq ($(MAKECMDGOALS),STARforMac) 126ifneq ($(MAKECMDGOALS),STARforMacGDB) 127Depend.list: $(SOURCES) parametersDefault.xxd $(HTSLIB) 128 echo $(SOURCES) 129 'rm' -f ./Depend.list 130 $(CXX) $(CXXFLAGS) $(CXXFLAGS_common) -MM $^ >> Depend.list 131include Depend.list 132endif 133endif 134endif 135endif 136endif 137endif 138 139htslib : htslib/libhts.a 140 141htslib/libhts.a : 142 $(MAKE) -C htslib lib-static 143 144parametersDefault.xxd: parametersDefault 145 xxd -i parametersDefault > parametersDefault.xxd 146 147STAR$(SFX) : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) $(CXXFLAGS) 148STAR$(SFX) : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_shared) $(LDFLAGS) 149STAR$(SFX) : Depend.list parametersDefault.xxd $(OBJECTS) 150 $(CXX) -o STAR$(SFX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 151 152STARstatic$(SFX) : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) $(CXXFLAGS) 153STARstatic$(SFX) : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_static) $(LDFLAGS) 154STARstatic$(SFX) : Depend.list parametersDefault.xxd $(OBJECTS) 155 $(CXX) -o STAR$(SFX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 156 157STARlong$(SFX) : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) -D'COMPILE_FOR_LONG_READS' $(CXXFLAGS) 158STARlong$(SFX) : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_shared) $(LDFLAGS) 159STARlong$(SFX) : Depend.list parametersDefault.xxd $(OBJECTS) 160 $(CXX) -o STARlong$(SFX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 161 162STARlongStatic$(SFX) : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) -D'COMPILE_FOR_LONG_READS' $(CXXFLAGS) 163STARlongStatic$(SFX) : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_static) $(LDFLAGS) 164STARlongStatic$(SFX) : Depend.list parametersDefault.xxd $(OBJECTS) 165 $(CXX) -o STARlong$(SFX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 166 167 168 169POSIXSHARED : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) -DPOSIX_SHARED_MEM $(CXXFLAGS) 170POSIXSHARED : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_shared) $(LDFLAGS) 171POSIXSHARED : Depend.list parametersDefault.xxd $(OBJECTS) 172 $(CXX) -o STAR$(SFX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 173 174gdb : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_gdb) $(CXXFLAGS) 175gdb : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_gdb) $(LDFLAGS) 176gdb : Depend.list parametersDefault.xxd $(OBJECTS) 177 $(CXX) -o STAR $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 178 179gdb-long : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_gdb) -D'COMPILE_FOR_LONG_READS' $(CXXFLAGS) 180gdb-long : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_gdb) $(LDFLAGS) 181gdb-long : Depend.list parametersDefault.xxd $(OBJECTS) 182 $(CXX) -o STARlong $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 183 184STARforMacStatic : CXXFLAGS := $(CXXFLAGSextra) $(CXXFLAGS_main) -D'COMPILE_FOR_MAC' $(CXXFLAGS) 185STARforMacStatic : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_Mac_static) $(LDFLAGS) 186STARforMacStatic : Depend.list parametersDefault.xxd $(OBJECTS) 187 $(CXX) -o STAR $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 188 189STARlongForMacStatic : CXXFLAGS := -D'COMPILE_FOR_LONG_READS' $(CXXFLAGSextra) $(CXXFLAGS_main) -D'COMPILE_FOR_MAC' $(CXXFLAGS) 190STARlongForMacStatic : LDFLAGS := $(LDFLAGSextra) $(LDFLAGS_Mac_static) $(LDFLAGS) 191STARlongForMacStatic : Depend.list parametersDefault.xxd $(OBJECTS) 192 $(CXX) -o STARlong $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) 193