1#Makefile
2
3# Supported platforms
4#       Unix / Linux               	LNX
5#       Mac                        	MAC
6# Compilation options
7#       link to LAPACK              WITH_LAPACK
8#       32-bit binary        		FORCE_32BIT
9#       dynamic compilation    		FORCE_DYNAMIC
10
11# Set this variable to either LNX or MAC
12SYS = LNX
13# Leave blank after "=" to disable; put "= 1" to enable
14# Disable WITH_LAPACK option can slow computation speed significantly and is not recommended
15# Disable WITH_ARPACK option only disable -apprx option in the software
16WITH_LAPACK = 1
17FORCE_32BIT =
18FORCE_DYNAMIC =
19DIST_NAME = gemma-0.97.1
20
21# --------------------------------------------------------------------
22# Edit below this line with caution
23# --------------------------------------------------------------------
24
25BIN_DIR  = ./bin
26
27SRC_DIR  = ./src
28
29CPP = g++
30
31CPPFLAGS = -O3 -std=gnu++11 -I./eigen
32
33LIBS = /software/gsl-1.16-el7-x86_64/lib/libgslcblas.a \
34       /software/gsl-1.16-el7-x86_64/lib/libgsl.a \
35       -pthread -lz
36
37# ifdef FORCE_DYNAMIC
38# LIBS = -lgsl -lgslcblas -lblas -pthread -lz
39# else
40# LIBS = -lgsl -lgslcblas -pthread -lz
41# endif
42
43OUTPUT = $(BIN_DIR)/gemma
44
45SOURCES = $(SRC_DIR)/main.cpp
46
47HDR =
48
49# Detailed libary paths, D for dynamic and S for static
50LIBS_LNX_D_LAPACK = -llapack
51LIBS_MAC_D_LAPACK = -framework Veclib
52LIBS_LNX_S_LAPACK = /software/atlas-3.10.3-el7-x86_64/lib/liblapack.a \
53   /software/atlas-3.10.3-el7-x86_64/lib/libcblas.a \
54   /software/atlas-3.10.3-el7-x86_64/lib/libf77blas.a \
55   /software/atlas-3.10.3-el7-x86_64/lib/libatlas.a -lgfortran \
56   -Wl,--allow-multiple-definition
57
58SOURCES += $(SRC_DIR)/param.cpp $(SRC_DIR)/gemma.cpp $(SRC_DIR)/io.cpp $(SRC_DIR)/lm.cpp $(SRC_DIR)/lmm.cpp $(SRC_DIR)/vc.cpp $(SRC_DIR)/mvlmm.cpp $(SRC_DIR)/bslmm.cpp $(SRC_DIR)/prdt.cpp $(SRC_DIR)/mathfunc.cpp $(SRC_DIR)/gzstream.cpp $(SRC_DIR)/eigenlib.cpp $(SRC_DIR)/ldr.cpp $(SRC_DIR)/bslmmdap.cpp $(SRC_DIR)/logistic.cpp $(SRC_DIR)/varcov.cpp
59HDR += $(SRC_DIR)/param.h $(SRC_DIR)/gemma.h $(SRC_DIR)/io.h $(SRC_DIR)/lm.h $(SRC_DIR)/lmm.h $(SRC_DIR)/vc.h $(SRC_DIR)/mvlmm.h $(SRC_DIR)/bslmm.h $(SRC_DIR)/prdt.h $(SRC_DIR)/mathfunc.h $(SRC_DIR)/gzstream.h $(SRC_DIR)/eigenlib.h
60
61ifdef WITH_LAPACK
62  OBJS += $(SRC_DIR)/lapack.o
63  CPPFLAGS += -DWITH_LAPACK
64ifeq ($(SYS), MAC)
65  LIBS += $(LIBS_MAC_D_LAPACK)
66else
67ifdef FORCE_DYNAMIC
68  LIBS += $(LIBS_LNX_D_LAPACK)
69else
70  LIBS += $(LIBS_LNX_S_LAPACK)
71endif
72endif
73  SOURCES += $(SRC_DIR)/lapack.cpp
74  HDR += $(SRC_DIR)/lapack.h
75endif
76
77ifdef FORCE_32BIT
78  CPPFLAGS += -m32
79else
80  CPPFLAGS += -m64
81endif
82
83# all
84OBJS = $(SOURCES:.cpp=.o)
85
86all: $(OUTPUT)
87
88$(OUTPUT): $(OBJS)
89	$(CPP) $(CPPFLAGS) $(OBJS) $(LIBS) -o $(OUTPUT)
90
91$(OBJS) : $(HDR)
92
93.cpp.o:
94	$(CPP) $(CPPFLAGS) $(HEADERS) -c $*.cpp -o $*.o
95.SUFFIXES : .cpp .c .o $(SUFFIXES)
96
97
98clean:
99	rm -rf ${SRC_DIR}/*.o ${SRC_DIR}/*~ *~ $(OUTPUT)
100
101DIST_COMMON = COPYING.txt README.txt Makefile
102DIST_SUBDIRS = src doc example bin
103
104tar:
105	mkdir -p ./$(DIST_NAME)
106	cp $(DIST_COMMON) ./$(DIST_NAME)/
107	cp -r $(DIST_SUBDIRS) ./$(DIST_NAME)/
108	tar cvzf $(DIST_NAME).tar.gz ./$(DIST_NAME)/
109	rm -r ./$(DIST_NAME)
110
111