Mercurial > forge
annotate extra/NaN/src/Makefile @ 12679:a74726ba86d1 octave-forge
[nan-tb] support hardening flags (currenlty only for Linux)
author | schloegl |
---|---|
date | Thu, 20 Aug 2015 09:03:54 +0000 |
parents | 1bd0f6f40c56 |
children | d36d7d7c4b68 |
rev | line source |
---|---|
7802
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
1 #################################################### |
12679
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
2 # Copyright 2010,2011,2012,2015 Alois Schloegl |
7802
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
3 # This is part of the NaN-toolbox - a statistics and machine learning toolbox for data with and without missing values. |
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
4 # http://pub.ist.ac.at/~schloegl/matlab/NaN/ |
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
5 #################################################### |
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
6 |
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
7 ### modify directories according to your needs |
7993 | 8 |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
9 # Define non-default octave-version |
7993 | 10 # Octave - global install (e.g. from debian package) |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
11 # OCTAVE_VERSION= |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
12 # Better alternative: define an OCTAVE_VERSION bash variable (or in .bashrc or .profile) |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
13 # OCTAVE_VERSION=-3.6.3 |
7993 | 14 |
15 # Matlab configuration | |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
16 #MATLABDIR = /usr/local/MATLAB/R2010b |
7802
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
17 # comment the following line if you use MATLAB on 32-bit operating system |
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
18 MEX_OPTION += -largeArrayDims |
7993 | 19 |
7912 | 20 # Mingw crosscompiler: available at http://www.nongnu.org/mingw-cross-env/ |
12554
5fbbb9986f8e
omit -lgomp - its not necessary and causes problems n macosx
schloegl
parents:
12384
diff
changeset
|
21 CROSS = $(HOME)/src/mxe/usr/bin/i686-w64-mingw32.static- |
5fbbb9986f8e
omit -lgomp - its not necessary and causes problems n macosx
schloegl
parents:
12384
diff
changeset
|
22 CROSS64 = $(HOME)/src/mxe/usr/bin/x86_64-w64-mingw32.static- |
7899 | 23 # include directory for Win32-Matlab include |
8066 | 24 W32MAT_INC = $(HOME)/bin/win32/Matlab/R2010b/extern/include/ |
25 W64MAT_INC = $(HOME)/bin/win64/Matlab/R2010b/extern/include/ | |
7912 | 26 # path to GNUMEX libraries, available from here http://sourceforge.net/projects/gnumex/ |
8066 | 27 GNUMEX = $(HOME)/bin/win32/gnumex |
28 GNUMEX64 = $(HOME)/bin/win64/gnumex | |
29 # building gnumex64 was difficult, these hints were quite useful: | |
30 # http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTinZvxgC9ezp2P3UCX_a7TAUYuVsp2U40MQUV6qr%40mail.gmail.com&forum_name=gnumex-users | |
31 # Instead of building "mex shortpath.c" and "mex uigetpath.c", I used empty m-functions within argout=argin; | |
7802
03cd0c75b7ac
docu for ML72; highlight user-specific configuration in Makefile
schloegl
parents:
7376
diff
changeset
|
32 #################################################### |
12652 | 33 MKOCTFILE ?= mkoctfile$(OCTAVE_VERSION) |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
34 CC = gcc |
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
35 CXX = g++ |
12679
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
36 CFLAGS += -fopenmp -Wall -Wextra -Wconversion -O2 |
12652 | 37 OCTMEX = $(MKOCTFILE) --mex |
7912 | 38 RM = rm |
3901 | 39 |
12679
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
40 # Hardening: https://wiki.debian.org/HardeningWalkthrough#Handwritten_Makefiles |
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
41 #CFLAGS = `dpkg-buildflags --get CFLAGS` |
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
42 #CFLAGS += `dpkg-buildflags --get CPPFLAGS` |
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
43 #CFLAGS += `dpkg-buildflags --get LDFLAGS` |
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
44 CFLAGS += -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-z,relro |
a74726ba86d1
[nan-tb] support hardening flags (currenlty only for Linux)
schloegl
parents:
12652
diff
changeset
|
45 |
12652 | 46 ifneq ($(OS),Windows_NT) |
47 CFLAGS += -fPIC | |
48 endif | |
49 | |
12557 | 50 ifneq (Darwin,$(shell uname)) |
51 CFLAGS += -fopenmp | |
52 MEX_OPTION += -lgomp | |
53 endif | |
54 | |
12554
5fbbb9986f8e
omit -lgomp - its not necessary and causes problems n macosx
schloegl
parents:
12384
diff
changeset
|
55 MEX_OPTION += CC\#$(CXX) CXX\#$(CXX) CFLAGS\#"$(CFLAGS) " CXXFLAGS\#"$(CFLAGS) " |
7912 | 56 MATMEX = $(MATLABDIR)/bin/mex $(MEX_OPTION) |
6560 | 57 |
7899 | 58 PROGS = histo_mex.mex covm_mex.mex kth_element.mex sumskipnan_mex.mex str2array.mex train.mex svmtrain_mex.mex svmpredict_mex.mex xptopen.mex |
6547 | 59 |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
60 ### per default only the mex-files for octave are built |
8067 | 61 mex4o octave: $(PROGS) |
8068 | 62 |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
63 |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
64 ### Matlab configuration - search for a matlab directory if not defined above |
12572
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
65 ifeq (,$(MATLABDIR)) |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
66 ifneq (,$(shell ls -1 /usr/local/ |grep MATLAB)) |
12572
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
67 # use oldest, typically mex-files are compatible with newer Matlab versions |
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
68 MATLABDIR=/usr/local/MATLAB/$(shell ls -1rt /usr/local/MATLAB/ |grep "^R20*" |head -1) |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
69 endif |
8067 | 70 endif |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
71 |
12572
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
72 |
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
73 ### if MATLABDIR has been found or defined |
22658fcb51e9
[tsa][nan] fix handling of MATLABDIR variable in Makefile
schloegl
parents:
12557
diff
changeset
|
74 ifneq (,$(MATLABDIR)) |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
75 ifneq (,$(shell ls -1 $(MATLABDIR)/bin/mexext)) |
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
76 MEX_EXT=$(shell $(MATLABDIR)/bin/mexext) |
11098
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
77 mex4m matlab: $(patsubst %.mex, %.$(MEX_EXT), $(PROGS)) |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
78 endif |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
79 endif |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
80 |
4becffbdb0ea
fix for (presumbably a newer version of ) gnu make; Matlab: search for default installation directory
schloegl
parents:
10621
diff
changeset
|
81 |
7912 | 82 mexw32 win32: $(patsubst %.mex, %.mexw32, $(PROGS)) |
8066 | 83 mexw64 win64: $(patsubst %.mex, %.mexw64, $(PROGS)) |
8068 | 84 all: octave win32 win64 mex4m |
8066 | 85 |
86 clean: | |
87 -$(RM) *.o *.obj *.o64 core octave-core *.oct *~ *.mex* | |
3901 | 88 |
10621 | 89 #$(PROGS): Makefile |
8139
3fad4ff49e91
svmpredict_mex: remove command line output; some clean up
schloegl
parents:
8101
diff
changeset
|
90 |
7899 | 91 ######################################################### |
92 # Octave, MATLAB on Linux | |
93 ######################################################### | |
12582
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
94 svm%_mex.mex: svm%_mex.cpp svm.o svm_model_octave.o |
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
95 env CC=$(CXX) $(OCTMEX) "$<" svm.o svm_model_octave.o |
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
96 svm%_mex.$(MEX_EXT): svm%_mex.cpp svm.o svm_model_matlab.o |
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
97 $(MATMEX) "$<" svm.o svm_model_matlab.o |
12594
faae8e81f0ff
[nan] simplify Makefile - options of system libraries (libsvm liblinear) are not supported anymore
schloegl
parents:
12586
diff
changeset
|
98 %.$(MEX_EXT): %.cpp |
faae8e81f0ff
[nan] simplify Makefile - options of system libraries (libsvm liblinear) are not supported anymore
schloegl
parents:
12586
diff
changeset
|
99 $(MATMEX) "$<" |
6549 | 100 |
12582
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
101 svm_model_octave.o: svm_model_matlab.c |
12652 | 102 env CC=$(CC) $(MKOCTFILE) -o "$@" -c "$<" |
12582
664b99514b4a
[nan] fix Makefile - when running -j same target is compiled simultaneously causing errors
schloegl
parents:
12572
diff
changeset
|
103 svm_model_matlab.o: svm_model_matlab.c |
12594
faae8e81f0ff
[nan] simplify Makefile - options of system libraries (libsvm liblinear) are not supported anymore
schloegl
parents:
12586
diff
changeset
|
104 $(CC) $(CFLAGS) -I $(MATLABDIR)/extern/include -o "$@" -c "$<" |
12585
26be3bc7237c
[nan] support multi-threaded make; use liblinear and libsvm provided by target system
schloegl
parents:
12582
diff
changeset
|
105 svm.o: svm.cpp |
26be3bc7237c
[nan] support multi-threaded make; use liblinear and libsvm provided by target system
schloegl
parents:
12582
diff
changeset
|
106 $(CC) $(CFLAGS) -c svm.cpp |
6547 | 107 |
12585
26be3bc7237c
[nan] support multi-threaded make; use liblinear and libsvm provided by target system
schloegl
parents:
12582
diff
changeset
|
108 train.$(MEX_EXT) predict.$(MEX_EXT): train.c tron.o linear.o linear_model_matlab.c |
6563 | 109 $(CC) $(CFLAGS) -I $(MATLABDIR)/extern/include -c linear_model_matlab.c |
6588 | 110 $(MATMEX) -lblas train.c tron.o linear.o linear_model_matlab.o |
6563 | 111 #$(MATMEX) -lblas predict.c tron.o linear.o linear_model_matlab.o |
12585
26be3bc7237c
[nan] support multi-threaded make; use liblinear and libsvm provided by target system
schloegl
parents:
12582
diff
changeset
|
112 train.mex predict.mex: train.c tron.o linear.o linear_model_matlab.c |
8101
5dfc952387ba
workaround to avoid need for path to mex.h (INCOCTAVE)
schloegl
parents:
8068
diff
changeset
|
113 env CC=$(CXX) $(OCTMEX) -lblas train.c tron.o linear.o linear_model_matlab.c |
12585
26be3bc7237c
[nan] support multi-threaded make; use liblinear and libsvm provided by target system
schloegl
parents:
12582
diff
changeset
|
114 linear.o: linear.cpp |
6560 | 115 $(CXX) $(CFLAGS) -c linear.cpp |
116 tron.o: tron.cpp tron.h | |
117 $(CXX) $(CFLAGS) -c tron.cpp | |
118 | |
12586 | 119 %.oct: %.cc |
120 mkoctfile$(OCTAVE_VERSION) "$<" | |
121 | |
122 %.mex: %.cpp | |
123 $(OCTMEX) "$<" | |
6560 | 124 |
7899 | 125 ######################################################### |
126 # MATLAB/WIN32 | |
127 ######################################################### | |
128 %.obj: %.cpp | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
129 $(CROSS)$(CXX) -fopenmp -c -DMATLAB_MEX_FILE -x c++ -o "$@" -I$(W32MAT_INC) -O2 -DMX_COMPAT_32 "$<" |
7899 | 130 %.obj: %.c |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
131 $(CROSS)$(CXX) -fopenmp -c -DMATLAB_MEX_FILE -x c++ -o "$@" -I$(W32MAT_INC) -O2 -DMX_COMPAT_32 "$<" |
7899 | 132 |
133 train.mexw32 predict.mexw32: train.obj linear.obj linear_model_matlab.obj tron.obj | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
134 $(CROSS)$(CXX) -shared $(GNUMEX)/mex.def -o "$@" -L$(GNUMEX) -s "$<" linear_model_matlab.obj linear.obj tron.obj -llibmx -llibmex -llibmat -lcholmod -lblas |
7899 | 135 |
7912 | 136 svmpredict_mex.mexw32 : svmpredict_mex.obj svm.obj svm_model_matlab.obj |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
137 $(CROSS)$(CXX) -shared $(GNUMEX)/mex.def -o "$@" -L$(GNUMEX) -s "$<" svm_model_matlab.obj svm.obj -llibmx -llibmex -llibmat -lcholmod |
7899 | 138 svmtrain_mex.mexw32 : svmtrain_mex.obj svm.obj svm_model_matlab.obj |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
139 $(CROSS)$(CXX) -shared $(GNUMEX)/mex.def -o "$@" -L$(GNUMEX) -s "$<" svm_model_matlab.obj svm.obj -llibmx -llibmex -llibmat -lcholmod |
7899 | 140 |
7912 | 141 %.mexw32: %.obj |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
142 $(CROSS)$(CXX) -shared $(GNUMEX)/mex.def -o "$@" -L$(GNUMEX) -s "$<" -llibmx -llibmex -llibmat -lcholmod -lgomp -lpthread |
7899 | 143 |
144 | |
145 | |
8066 | 146 ######################################################### |
147 # MATLAB/WIN64 | |
148 ######################################################### | |
7899 | 149 |
8066 | 150 ## ToDO: fix OpenMP support: currently -fopenmp causes Matlab to crash |
151 %.o64: %.cpp | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
152 $(CROSS64)$(CXX) -c -DMATLAB_MEX_FILE -x c++ -o "$@" -I$(W64MAT_INC) -O2 "$<" |
8066 | 153 %.o64: %.c |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
154 $(CROSS64)$(CXX) -c -DMATLAB_MEX_FILE -x c++ -o "$@" -I$(W64MAT_INC) -O2 "$<" |
8066 | 155 |
156 train.mexw64 predict.mexw64: train.o64 linear.o64 linear_model_matlab.o64 tron.o64 | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
157 $(CROSS64)$(CXX) -shared $(GNUMEX64)/mex.def -o "$@" -L$(GNUMEX64) -s "$<" linear_model_matlab.o64 linear.o64 tron.o64 -llibmx -llibmex -llibmat -lcholmod -lblas |
8066 | 158 |
159 svmpredict_mex.mexw64 : svmpredict_mex.o64 svm.o64 svm_model_matlab.o64 | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
160 $(CROSS64)$(CXX) -shared $(GNUMEX64)/mex.def -o "$@" -L$(GNUMEX64) -s "$<" svm_model_matlab.o64 svm.o64 -llibmx -llibmex -llibmat -lcholmod |
8066 | 161 svmtrain_mex.mexw64 : svmtrain_mex.o64 svm.o64 svm_model_matlab.o64 |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
162 $(CROSS64)$(CXX) -shared $(GNUMEX64)/mex.def -o "$@" -L$(GNUMEX64) -s "$<" svm_model_matlab.o64 svm.o64 -llibmx -llibmex -llibmat -lcholmod |
8066 | 163 |
164 %.mexw64: %.o64 | |
12383
a06636a6401d
nan: avoid spurios error messages when no Matlab is installed
schloegl
parents:
11098
diff
changeset
|
165 $(CROSS64)$(CXX) -shared $(GNUMEX64)/mex.def -o "$@" -L$(GNUMEX64) -s "$<" -llibmx -llibmex -llibmat -lcholmod -lgomp -lpthread |
8066 | 166 |