2 # Makefile for bowtie, bowtie-build, bowtie-inspect
6 SEQAN_INC = -I $(SEQAN_DIR)
8 GCC_PREFIX = $(shell dirname `which gcc`)
10 CC = $(GCC_PREFIX)/gcc$(GCC_SUFFIX)
11 CPP = $(GCC_PREFIX)/g++$(GCC_SUFFIX)
13 HEADERS = $(wildcard *.h)
20 CFLAGS += $(EXTRA_CFLAGS)
21 CXXFLAGS += $(EXTRA_CXXFLAGS)
23 # Detect Cygwin or MinGW
25 ifneq (,$(findstring CYGWIN,$(shell uname)))
27 # POSIX memory-mapped files not currently supported on Windows
31 ifneq (,$(findstring MINGW,$(shell uname)))
33 # POSIX memory-mapped files not currently supported on Windows
40 ifneq (,$(findstring Darwin,$(shell uname)))
45 ifneq (,$(findstring Linux,$(shell uname)))
47 EXTRA_FLAGS += -Wl,--hash-style=both
55 ifeq (1,$(BOWTIE_SHARED_MEM))
56 SHMEM_DEF = -DBOWTIE_SHARED_MEM
61 ifeq (1,$(BOWTIE_PTHREADS))
62 PTHREAD_DEF = -DBOWTIE_PTHREADS
64 # pthreads for windows forces us to be specific about the library
65 PTHREAD_LIB = -L . -lpthreadGC2
66 PTHREAD_PKG = pthreadGC2.dll
68 # There's also -pthread, but that only seems to work on Linux
69 PTHREAD_LIB = -lpthread
74 PREF_DEF = -DPREFETCH_LOCALITY=$(PREFETCH_LOCALITY)
77 SEARCH_LIBS = $(PTHREAD_LIB)
80 OTHER_CPPS = ccnt_lut.cpp ref_read.cpp alphabet.c shmem.cpp \
82 SEARCH_CPPS = qual.cpp pat.cpp ebwt_search_util.cpp ref_aligner.cpp \
83 log.cpp hit_set.cpp refmap.cpp annot.cpp sam.cpp \
84 color.cpp color_dec.cpp hit.cpp
85 SEARCH_CPPS_MAIN = $(SEARCH_CPPS) bowtie_main.cpp
88 BUILD_CPPS_MAIN = $(BUILD_CPPS) bowtie_build_main.cpp
90 SEARCH_FRAGMENTS = $(wildcard search_*_phase*.c)
91 VERSION = $(shell cat VERSION)
93 # Convert BITS=?? to a -m flag
102 # Convert CHUD=1 to CHUD-related flags
108 CHUD_DEF = -F/System/Library/PrivateFrameworks -weak_framework CHUD -DCHUD_PROFILING
112 DEBUG_FLAGS = -O0 -g3 $(BITS_FLAG)
113 RELEASE_FLAGS = -O3 $(BITS_FLAG)
114 NOASSERT_FLAGS = -DNDEBUG
115 FILE_FLAGS = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
117 BIN_LIST = bowtie-build \
120 BIN_LIST_AUX = bowtie-build-debug \
124 GENERAL_LIST = $(wildcard scripts/*.sh) \
125 $(wildcard scripts/*.pl) \
126 $(wildcard indexes/e_coli*) \
127 $(wildcard genomes/NC_008253.fna) \
128 $(wildcard reads/e_coli_1000.*) \
129 $(wildcard reads/e_coli_1000_*) \
133 reads/e_coli_10000snp.fa \
134 reads/e_coli_10000snp.fq \
144 # This is helpful on Windows under MinGW/MSYS, where Make might go for
145 # the Windows FIND tool instead.
146 FIND=$(shell which find)
148 SRC_PKG_LIST = $(wildcard *.h) \
152 $(shell $(FIND) SeqAn-1.1 -name "*.h") \
153 $(shell $(FIND) SeqAn-1.1 -name "*.txt") \
154 doc/strip_markdown.pl \
158 BIN_PKG_LIST = $(GENERAL_LIST)
162 allall: $(BIN_LIST) $(BIN_LIST_AUX)
164 DEFS=-fno-strict-aliasing \
165 -DBOWTIE_VERSION="\"`cat VERSION`\"" \
166 -DBUILD_HOST="\"`hostname`\"" \
167 -DBUILD_TIME="\"`date`\"" \
168 -DCOMPILER_VERSION="\"`$(CXX) -v 2>&1 | tail -1`\"" \
177 cat $^ | md5sum | awk '{print $$1}' > .$@.md5
180 ALL_FLAGS=$(EXTRA_FLAGS) $(CFLAGS) $(CXXFLAGS)
181 DEBUG_DEFS = -DCOMPILER_OPTIONS="\"$(DEBUG_FLAGS) $(ALL_FLAGS)\""
182 RELEASE_DEFS = -DCOMPILER_OPTIONS="\"$(RELEASE_FLAGS) $(ALL_FLAGS)\""
185 # bowtie-build targets
188 bowtie-build: ebwt_build.cpp $(OTHER_CPPS) $(HEADERS)
190 $(CXX) $(RELEASE_FLAGS) $(RELEASE_DEFS) $(ALL_FLAGS) \
191 -DEBWT_BUILD_HASH=`cat .$@.md5` \
192 $(DEFS) $(NOASSERT_FLAGS) -Wall \
195 $(OTHER_CPPS) $(BUILD_CPPS_MAIN) \
196 $(LIBS) $(BUILD_LIBS)
198 bowtie-build_prof: ebwt_build.cpp $(OTHER_CPPS) $(HEADERS)
200 $(CXX) $(RELEASE_FLAGS) -pg -p -g3 $(RELEASE_DEFS) $(ALL_FLAGS) \
201 -DEBWT_BUILD_HASH=`cat .$@.md5` \
202 $(DEFS) $(NOASSERT_FLAGS) -Wall \
205 $(OTHER_CPPS) $(BUILD_CPPS_MAIN) \
206 $(LIBS) $(BUILD_LIBS)
208 bowtie-build-debug: ebwt_build.cpp $(OTHER_CPPS) $(HEADERS)
210 $(CXX) $(DEBUG_FLAGS) $(DEBUG_DEFS) $(ALL_FLAGS) \
211 -DEBWT_BUILD_HASH=`cat .$@.md5` \
215 $(OTHER_CPPS) $(BUILD_CPPS_MAIN) \
216 $(LIBS) $(BUILD_LIBS)
222 bowtie: ebwt_search.cpp $(SEARCH_CPPS) $(OTHER_CPPS) $(HEADERS) $(SEARCH_FRAGMENTS)
224 $(CXX) $(RELEASE_FLAGS) $(RELEASE_DEFS) $(ALL_FLAGS) \
225 -DEBWT_SEARCH_HASH=`cat .$@.md5` \
226 $(DEFS) $(NOASSERT_FLAGS) -Wall \
229 $(OTHER_CPPS) $(SEARCH_CPPS_MAIN) \
230 $(LIBS) $(SEARCH_LIBS)
232 bowtie_prof: ebwt_search.cpp $(SEARCH_CPPS) $(OTHER_CPPS) $(HEADERS) $(SEARCH_FRAGMENTS)
234 $(CXX) $(RELEASE_FLAGS) \
235 $(RELEASE_DEFS) -pg -p -g3 $(ALL_FLAGS) \
236 -DEBWT_SEARCH_HASH=`cat .$@.md5` \
237 $(DEFS) $(NOASSERT_FLAGS) -Wall \
240 $(OTHER_CPPS) $(SEARCH_CPPS_MAIN) \
241 $(LIBS) $(SEARCH_LIBS)
243 bowtie-debug: ebwt_search.cpp $(SEARCH_CPPS) $(OTHER_CPPS) $(HEADERS) $(SEARCH_FRAGMENTS)
245 $(CXX) $(DEBUG_FLAGS) \
246 $(DEBUG_DEFS) $(ALL_FLAGS) \
247 -DEBWT_SEARCH_HASH=`cat .$@.md5` \
251 $(OTHER_CPPS) $(SEARCH_CPPS_MAIN) \
252 $(LIBS) $(SEARCH_LIBS)
255 # bowtie-inspect targets
258 bowtie-inspect: bowtie_inspect.cpp $(HEADERS) $(OTHER_CPPS)
260 $(CXX) $(RELEASE_FLAGS) \
261 $(RELEASE_DEFS) $(ALL_FLAGS) \
262 -DEBWT_INSPECT_HASH=`cat .$@.md5` \
269 bowtie-inspect-debug: bowtie_inspect.cpp $(HEADERS) $(OTHER_CPPS)
271 $(CXX) $(DEBUG_FLAGS) \
272 $(DEBUG_DEFS) $(ALL_FLAGS) \
273 -DEBWT_INSPECT_HASH=`cat .$@.md5` \
280 chaincat: chaincat.cpp hit_set.h filebuf.h hit_set.cpp alphabet.h alphabet.c
281 $(CXX) $(DEBUG_FLAGS) $(DEBUG_DEFS) $(ALL_FLAGS) -Wall $(INC) -I . -o $@ $< hit_set.cpp alphabet.c
283 bowtie-src.zip: $(SRC_PKG_LIST)
284 chmod a+x scripts/*.sh scripts/*.pl
286 mkdir .src.tmp/bowtie-$(VERSION)
287 zip tmp.zip $(SRC_PKG_LIST)
288 mv tmp.zip .src.tmp/bowtie-$(VERSION)
289 cd .src.tmp/bowtie-$(VERSION) ; unzip tmp.zip ; rm -f tmp.zip
290 cd .src.tmp ; zip -r $@ bowtie-$(VERSION)
294 bowtie-bin.zip: $(BIN_PKG_LIST) $(BIN_LIST) $(BIN_LIST_AUX)
295 chmod a+x scripts/*.sh scripts/*.pl
298 mkdir .bin.tmp/bowtie-$(VERSION)
299 if [ -f bowtie.exe ] ; then \
300 zip tmp.zip $(BIN_PKG_LIST) $(addsuffix .exe,$(BIN_LIST) $(BIN_LIST_AUX)) ; \
302 zip tmp.zip $(BIN_PKG_LIST) $(BIN_LIST) $(BIN_LIST_AUX) ; \
304 mv tmp.zip .bin.tmp/bowtie-$(VERSION)
305 cd .bin.tmp/bowtie-$(VERSION) ; unzip tmp.zip ; rm -f tmp.zip
306 cd .bin.tmp ; zip -r $@ bowtie-$(VERSION)
311 doc: doc/manual.html MANUAL
313 doc/manual.html: MANUAL.markdown
314 echo "<h1>Table of Contents</h1>" > .tmp.head
315 pandoc -T "Bowtie Manual" -B .tmp.head \
316 --css style.css -o $@ \
317 --from markdown --to HTML \
318 --table-of-contents $^
320 MANUAL: MANUAL.markdown
321 perl doc/strip_markdown.pl < $^ > $@
325 rm -f $(BIN_LIST) $(BIN_LIST_AUX) \
327 $(addsuffix .exe,$(BIN_LIST) $(BIN_LIST_AUX) bowtie_prof) \
328 bowtie-src.zip bowtie-bin.zip