@@ -2,11 +2,20 @@ BAM := ./samtools-0.1.18
22# path to the directory where the samtools package was built (in place)
33# so libbam.a and *.h files MUST be in here
44
5- GDIR :=./gclib
5+ GDIR :=./gclib
66
7- INCDIRS := -I. -I${GDIR} -I${BAM}
7+ INCDIRS := -I. -I${GDIR} -I${BAM}
88
9- CC := g++
9+ CC := g++
10+
11+ BASEFLAGS := -Wall -Wextra ${INCDIRS} -fsigned-char -D_FILE_OFFSET_BITS=64 \
12+ -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-exceptions -fno-rtti
13+
14+ LINKER := g++
15+
16+ LDFLAGS := -g -L${BAM} $(LDFLAGS )
17+
18+ LIBS := -lbam -lz
1019
1120ifneq (,$(findstring nothreads,$(MAKECMDGOALS ) ) )
1221 NOTHREADS =1
@@ -17,37 +26,27 @@ ifneq (,$(findstring mingw,$(shell ${CC} -dumpmachine)))
1726 WINDOWS =1
1827endif
1928
20- LFLAGS =
2129# MinGW32 GCC 4.5 link problem fix
2230# ifdef WINDOWS
2331ifneq (,$(findstring 4.5.,$(shell g++ -dumpversion) ) )
24- LFLAGS += -static-libstdc++ -static-libgcc
32+ STATIC_CLIB =1
2533endif
2634# endif
2735
2836# Misc. system commands
29- # ifdef WINDOWS
30- RM = del /Q
31- # else
32- RM = rm -f
33- # endif
37+ ifdef WINDOWS
38+ RM = del /Q
39+ else
40+ RM = rm -f
41+ endif
3442
3543# File endings
3644ifdef WINDOWS
37- EXE = .exe
45+ EXE = .exe
3846else
39- EXE =
47+ EXE =
4048endif
4149
42- BASEFLAGS := -Wall -Wextra ${INCDIRS} -fsigned-char -D_FILE_OFFSET_BITS=64 \
43- -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-exceptions -fno-rtti
44-
45- # C/C++ linker
46-
47- LINKER := g++
48-
49- LIBS := -lbam -lz
50-
5150# Non-windows systems need pthread
5251ifndef WINDOWS
5352 ifndef NOTHREADS
@@ -59,19 +58,16 @@ ifdef NOTHREADS
5958 BASEFLAGS += -DNOTHREADS
6059endif
6160
62- # ##----- generic build rule
63-
6461# ifneq (,$(findstring release,$(MAKECMDGOALS)))
62+
6563ifneq (,$(filter % release % static, $(MAKECMDGOALS ) ) )
6664 # -- release build
67- CFLAGS := -O3 -DNDEBUG -g $(BASEFLAGS )
68- LDFLAGS := -g -L${BAM} ${LFLAGS}
69- ifneq (,$(findstring static,$(MAKECMDGOALS)))
70- LDFLAGS += -static-libstdc++ -static-libgcc
71- endif
65+ RELEASE_BUILD =1
66+ CFLAGS := -DNDEBUG -g $(BASEFLAGS ) $(CFLAGS ) -O3
7267else
7368 ifneq (,$(filter %memcheck %memdebug, $(MAKECMDGOALS)))
74- # make memcheck : use the statically linked address sanitizer in gcc 4.9.x
69+ # use sanitizer in gcc 4.9+
70+ MEMCHECK_BUILD =1
7571 GCCVER49 := $(shell expr `g++ -dumpversion | cut -f1,2 -d.` \>= 4.9)
7672 ifeq "$(GCCVER49)" "0"
7773 $(error gcc version 4.9 or greater is required for this build target)
8480 # CFLAGS += -fcheck-pointer-bounds -mmpx
8581 endif
8682 CFLAGS := -g -DDEBUG -D_DEBUG -DGDEBUG -fno-common -fstack-protector $(CFLAGS )
87- LDFLAGS := -g -L${BAM}
8883 LIBS := -lasan -lubsan -ldl $(LIBS )
8984 else
90- ifneq (,$(filter %memtrace %memusage %memuse, $(MAKECMDGOALS)))
91- BASEFLAGS += -DGMEMTRACE
92- GMEMTRACE =1
93- endif
94- # just plain debug build
95- CFLAGS := -g -DDEBUG -D_DEBUG -DGDEBUG $(BASEFLAGS )
96- LDFLAGS := -g -L${BAM}
85+ ifeq (,$(findstring clean,$(MAKECMDGOALS)))
86+ # just plain debug build
87+ DEBUG_BUILD =1
88+ CFLAGS := -g -DDEBUG -D_DEBUG -DGDEBUG $(BASEFLAGS )
89+ endif
9790 endif
9891endif
9992
100- % .o : % .cpp
101- ${CC} ${CFLAGS} -c $< -o $@
93+ ifdef RELEASE_BUILD
94+ ifneq (,$(findstring static, $(MAKECMDGOALS)))
95+ STATIC_CLIB =1
96+ endif
97+ endif
98+
99+ ifdef STATIC_CLIB
100+ LDFLAGS += -static-libstdc++ -static-libgcc
101+ endif
102+
103+ ifdef DEBUG_BUILD
104+ $(warning Building DEBUG version [much slower], use 'make release' for a fast, optimized program.)
105+ DBG_WARN =@echo
106+ DBG_WARN+ ='WARNING: built DEBUG version [much slower], use "make release" for a fast, optimized program.'
107+ endif
108+
102109
103110OBJS := ${GDIR}/GBase.o ${GDIR}/GArgs.o ${GDIR}/GStr.o ${GDIR}/GBam.o \
104111 ${GDIR}/gdna.o ${GDIR}/codons.o ${GDIR}/GFaSeqGet.o ${GDIR}/gff.o
105112
106- ifdef GMEMTRACE
107- OBJS += ${GDIR}/proc_mem.o
113+
114+ ifneq (,$(filter % memtrace % memusage % memuse, $(MAKECMDGOALS ) ) )
115+ CFLAGS += -DGMEMTRACE
116+ OBJS += ${GDIR}/proc_mem.o
108117endif
109118
110119ifndef NOTHREADS
111120 OBJS += ${GDIR}/GThreads.o
112121endif
113122
123+
124+ % .o : % .cpp
125+ ${CC} ${CFLAGS} -c $< -o $@
126+
114127OBJS += rlink.o tablemaker.o tmerge.o
115-
128+
116129all release static debug : stringtie${EXE}
117130memcheck memdebug : stringtie${EXE}
118131memuse memusage memtrace : stringtie${EXE}
@@ -127,6 +140,8 @@ ${BAM}/libbam.a:
127140 cd ${BAM} && make lib
128141stringtie : ${BAM}/libbam.a $(OBJS ) stringtie.o
129142 ${LINKER} ${LDFLAGS} -o $@ ${filter-out % .a % .so, $^} ${LIBS}
143+ @echo
144+ ${DBG_WARN}
130145
131146.PHONY : clean cleanall cleanAll allclean
132147
0 commit comments