1# Useful directories
2
3THISCODEDIR := .
4GCLDIR := ./gclib
5# Directory where libz.a can be found
6ZDIR := ../zlib
7# Directories to search for header files
8SEARCHDIRS := -I${ZDIR} -I${THISCODEDIR} -I${GCLDIR}
9
10
11SYSTYPE :=     $(shell uname)
12
13
14MACHTYPE :=     $(shell uname -m)
15ifeq ($(MACHTYPE), i686)
16    MARCH = -march=i686
17else
18    MARCH =
19endif
20
21# Use the correct compiler (CXX, not CC) and respect the environment
22# by using ?=
23CXX	?= g++
24
25BASEFLAGS  = -Wall ${SEARCHDIRS} $(MARCH) -DENABLE_COMPRESSION=0 -D_FILE_OFFSET_BITS=64 \
26-D_LARGEFILE_SOURCE -fno-exceptions -fno-rtti -fno-strict-aliasing \
27-D_REENTRANT
28
29
30ifeq ($(findstring debug,$(MAKECMDGOALS)),)
31  DBGFLAGS = -O2 -DNDEBUG
32  LDFLAGS =
33else
34  DBGFLAGS = -g -DDEBUG
35  LDFLAGS = -g
36endif
37
38ifeq ($(findstring nommap,$(MAKECMDGOALS)),)
39  CXXFLAGS = $(DBGFLAGS) $(BASEFLAGS)
40else
41  CXXFLAGS = $(DBGFLAGS) $(BASEFLAGS) -DNO_MMAP
42endif
43
44%.o : %.c
45	${CXX} ${CXXFLAGS} -c $< -o $@
46
47%.o : %.cc
48	${CXX} ${CXXFLAGS} -c $< -o $@
49
50%.o : %.C
51	${CXX} ${CXXFLAGS} -c $< -o $@
52
53%.o : %.cpp
54	${CXX} ${CXXFLAGS} -c $< -o $@
55
56%.o : %.cxx
57	${CXX} ${CXXFLAGS} -c $< -o $@
58
59# C/C++ linker
60
61LINKER	:= ${CXX}
62LDFLAGS	= -lz
63#if ENABLE_COMPRESSION is not needed,
64# LDFLAGS =
65
66.PHONY : all
67all:    cdbfasta cdbyank
68debug:  all
69nommap: all
70cdbfasta:  ./cdbfasta.o ./gcdbz.o $(LIBS) ${GCLDIR}/gcdb.o ${GCLDIR}/GBase.o ${GCLDIR}/GStr.o ${GCLDIR}/GArgs.o
71	${LINKER} -o $@ ${filter-out %.a %.so, $^} $(LDFLAGS)
72
73cdbyank :  ./cdbyank.o ./gcdbz.o ${GCLDIR}/gcdb.o ${GCLDIR}/GBase.o ${GCLDIR}/GStr.o ${GCLDIR}/GArgs.o
74	${LINKER} -o $@ ${filter-out %.a %.so, $^} $(LDFLAGS)
75
76# target for removing all object files
77
78.PHONY : tidy
79tidy::
80	@${RM} core cdbfasta cdbyank *.o ${GCLDIR}/gcdb.o ${GCLDIR}/GBase.o ${GCLDIR}/GStr.o ${GCLDIR}/GArgs.o
81
82# target for removing all object files
83
84.PHONY : clean
85clean:: tidy
86	@${RM} core cdbfasta cdbyank *.o ${GCLDIR}/gcdb.o ${GCLDIR}/GBase.o ${GCLDIR}/GStr.o ${GCLDIR}/GArgs.o
87
88
89