forked from slra/slra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
executable file
·119 lines (93 loc) · 4.3 KB
/
makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# makefile: SLRA makefile
CC = gcc -g -fPIC -static -Wno-write-strings
CCPP = g++ -g -fPIC -Wno-write-strings
F77 = gcc -g -fPIC -static
INC_FLAGS = -I./$(SLRA_CPP_DIR) -I/Users/usevichk/software/gsl
OPT_FLAGS = -O2 # -pg
OCTAVE_MEX = mkoctfile --mex -v -DBUILD_MEX_OCTAVE
MEX = mex -v -largeArrayDims
MEXWIN = mex.bat -v -largeArrayDims -DBUILD_MEX_WINDOWS
SLRA_OBJ_FILES=$(shell cat SLRAOBJ.txt)
SLRA_SRC_FILES=$(SLRA_OBJ_FILES:%o=%cpp)
SLRA_CPP_DIR = cpp
MEX_SRC_FILES = mex/slra_mex_obj.cpp mex/slra_mex_utils.cpp
BUILD_MODE=BUILD_DEFAULT
# Windows-specific defines (for compilation with Mingw64)
MINGWPATH=c:/Rtools/gcc-4.6.3
MATLABROOT=c:/Progra~1/MATLAB/R2013a
WIN_LIBS= -L$(MATLABROOT)/bin/win64 -L$(MATLABROOT)/extern/lib/win64/microsoft -lmex -lmx -lmwlapack -lmwblas -leng
WIN_GSL_LIBS=mex/libgsl.a mex/libgslcblas.a
WINMEX=$(MINGWPATH)/bin/g++ -m64 -shared mex/mex.def -DMATLAB_MEX_FILE -DBUILD_MEX_WINDOWS -I$(MATLABROOT)/extern/include -Wno-write-strings
# Mac-specific defines (the paths need to be updated before compilation)
MACMEXAPP = /Applications/MATLAB_R2014a.app/bin/mex
MAC_GSL_INCLUDE=/Users/usevichk/software/gsl
MAC_GSL_LIBS=mex/libgsl.a mex/libgslcblas.a
MACMEX = $(MACMEXAPP) -v -largeArrayDims -I$(MAC_GSL_INCLUDE)
# Main targets
matlab: clean $(MEX_SRC_FILES)
$(MEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) \
-lgsl -lgslcblas -lmwlapack -lmwblas -output slra_mex_obj
matlab-win: $(MEX_SRC_FILES)
$(WINMEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) $(WIN_GSL_LIBS) \
$(WIN_LIBS) -o slra_mex_obj.mexw64
matlab-mac: clean $(MEX_SRC_FILES)
$(MACMEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) $(MAC_GSL_LIBS) \
-lmwlapack -lmwblas -output slra_mex_obj
octave: clean $(MEX_SRC_FILES)
$(OCTAVE_MEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) \
-lgsl -lgslcblas -o slra_mex_obj.mex
R: BUILD_MODE=BUILD_R_PACKAGE
R:
mkdir -p Rslra/src/$(SLRA_CPP_DIR)
rm -r -f Rslra/*/*.o Rslra/*/*.so
cp $(SLRA_CPP_DIR)/*.cpp Rslra/src/$(SLRA_CPP_DIR)
cp $(SLRA_CPP_DIR)/*.h Rslra/src/$(SLRA_CPP_DIR)
cp SLRAOBJ.txt Rslra/src/SLRAOBJ.txt
R CMD check Rslra
R CMD build Rslra
R CMD INSTALL Rslra
## Targets for advanced users
testc : clean test_c/test.o $(SLRA_OBJ_FILES)
$(CCPP) $(INC_FLAGS) $(OPT_FLAGS) -o test_c/test test_c/test.o \
$(SLRA_OBJ_FILES) -lgsl -lgslcblas -llapack -latlas -lblas -lm -lrt
testc-mac: clean test_c/test.o $(SLRA_OBJ_FILES)
$(CCPP) $(INC_FLAGS) $(OPT_FLAGS) -o test_c/test test_c/test.o \
$(SLRA_OBJ_FILES) $(MAC_GSL_LIBS) -llapack -lblas -lm
# Targets with SLICOT
SLICOT_SRC_FILES = SLICOT/MA02FD.f SLICOT/MB02CU.f \
SLICOT/MB02CV.f SLICOT/MB02GD.f
SLICOT_OBJ_FILES = MA02FD.o MB02CU.o MB02CV.o MB02GD.o
octave-slicot: SLICOT.a $(MEX_SRC_FILES)
$(OCTAVE_MEX) $(INC_FLAGS) -DUSE_SLICOT $(MEX_SRC_FILES) \
$(SLRA_SRC_FILES) -lgsl -lgslcblas -llapack -lblas -o slra.mex
matlab-slicot: BUILD_MODE=MEX_MATLAB
matlab-slicot: $(MEX_SRC_FILES) SLICOT.a
$(MEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) SLICOT.a \
-lgsl -lgslcblas -llapack -lblas -o slra_mex_obj
testc-slicot : BUILD_MODE=USE_SLICOT
testc-slicot : test_c/test.o $(SLRA_OBJ_FILES) SLICOT.a
$(CCPP) $(INC_FLAGS) $(OPT_FLAGS) -DUSE_SLICOT -o test_c/test test_c/test.o \
$(SLRA_OBJ_FILES) SLICOT.a -lgsl -lcblas -llapack \
-latlas -lblas -lm -lgfortran -lrt
# Advanced targets for static compilation
mex-static : SLICOT.a $(MEX_SRC_FILES)
$(MEX) $(INC_FLAGS) $(MEX_SRC_FILES) $(SLRA_SRC_FILES) \
/usr/lib/libgsl.a /usr/lib/atlas-base/libcblas.a \
/usr/lib/atlas-base/atlas/liblapack.a \
/usr/lib/atlas-base/atlas/libblas.a -lgfortran -o slra_mex_obj
mex-slicot-static : SLICOT.a $(MEX_SRC_FILES)
$(MEX) $(INC_FLAGS) -DUSE_SLICOT $(MEX_SRC_FILES) $(SLRA_SRC_FILES) \
SLICOT.a /usr/lib/libgsl.a /usr/lib/atlas-base/libcblas.a \
/usr/lib/atlas-base/atlas/liblapack.a \
/usr/lib/atlas-base/atlas/libblas.a -lgfortran -o slra_mex_obj
testcomp : clean test_comp/test.o $(SLRA_OBJ_FILES)
$(CCPP) $(INC_FLAGS) $(OPT_FLAGS) -o test_comp/test test_comp/test.o \
$(SLRA_OBJ_FILES) -lgsl -lcblas -llapack -latlas -lblas -lm
# Targets for parts of the package
%.o : %.cpp
$(CCPP) -D$(BUILD_MODE) $(INC_FLAGS) $(OPT_FLAGS) -c $< -o $@
SLICOT.a : $(SLICOT_SRC_FILES)
$(F77) $(INC_FLAGS) $(OPT_FLAGS) -c $(SLICOT_SRC_FILES)
ar -r SLICOT.a $(SLICOT_OBJ_FILES)
clean :
rm -f -r */*.o *.o *.a