View | Details | Raw Unified | Return to bug 210337 | Differences between
and this patch

Collapse All | Expand All

(-)Mk/Uses/compiler.mk (-1 / +10 lines)
Lines 1-245 Link Here
1
# $FreeBSD$
1
# $FreeBSD$
2
#
2
#
3
# Allows to determine the compiler being used
3
# Allows to determine the compiler being used
4
#
4
#
5
# Feature:	compiler
5
# Feature:	compiler
6
# Usage:	USES=compiler or USES=compiler:ARGS
6
# Usage:	USES=compiler or USES=compiler:ARGS
7
# Valid ARGS:	env (default, implicit) c++0x c++11-lib c++11-lang c11 openmp nestedfct features
7
# Valid ARGS:	env (default, implicit) c++0x c++11-lib c++11-lang c11 openmp nestedfct features
8
#
8
#
9
# c++0x:	The port needs a compiler understanding C++0X
9
# c++0x:	The port needs a compiler understanding C++0X
10
# c++11-lang:	The port needs a compiler understanding C++11
10
# c++11-lang:	The port needs a compiler understanding C++11
11
# c++14-lang:	The port needs a compiler understanding C++14
11
# c++14-lang:	The port needs a compiler understanding C++14
12
# gcc-c++11-lib:The port needs g++ compiler with a C++11 library
12
# gcc-c++11-lib:The port needs g++ compiler with a C++11 library
13
# c++11-lib:	The port needs a compiler understanding C++11 and with a C++11 ready standard library
13
# c++11-lib:	The port needs a compiler understanding C++11 and with a C++11 ready standard library
14
# c11:		The port needs a compiler understanding C11
14
# c11:		The port needs a compiler understanding C11
15
# openmp:	The port needs a compiler understanding openmp
15
# openmp:	The port needs a compiler understanding openmp
16
# nestedfct:	The port needs a compiler understanding nested functions
16
# nestedfct:	The port needs a compiler understanding nested functions
17
# features:	The port will determine the features supported by the default compiler
17
# features:	The port will determine the features supported by the default compiler
18
#
18
#
19
# Variable to test after <bsd.port.pre.mk>
19
# Variable to test after <bsd.port.pre.mk>
20
#
20
#
21
# COMPILER_TYPE:	can be gcc or clang
21
# COMPILER_TYPE:	can be gcc or clang
22
# ALT_COMPILER_TYPE:	can be gcc or clang depending on COMPILER_TYPE, only set if the base system has 2 compilers
22
# ALT_COMPILER_TYPE:	can be gcc or clang depending on COMPILER_TYPE, only set if the base system has 2 compilers
23
# COMPILER_VERSION:	first 2 digits of the version: 33 for clang 3.3.*, 47 for gcc 4.7.*
23
# COMPILER_VERSION:	first 2 digits of the version: 33 for clang 3.3.*, 47 for gcc 4.7.*
24
# ALT_COMPILER_VERSION:	first 2 digits of the version: 33 for clang 3.3.*, 47 for gcc 4.7.* of the ALT_COMPILER_TYPE
24
# ALT_COMPILER_VERSION:	first 2 digits of the version: 33 for clang 3.3.*, 47 for gcc 4.7.* of the ALT_COMPILER_TYPE
25
#
25
#
26
# COMPILER_FEATURES:	the list of features supported by the compiler includes the standard C++ library.
26
# COMPILER_FEATURES:	the list of features supported by the compiler includes the standard C++ library.
27
# CHOSEN_COMPILER_TYPE:	can be gcc or clang (type of compiler chosen by the framework)
27
# CHOSEN_COMPILER_TYPE:	can be gcc or clang (type of compiler chosen by the framework)
28
#
28
#
29
# MAINTAINER: portmgr@FreeBSD.org
29
# MAINTAINER: portmgr@FreeBSD.org
30
30
31
.if !defined(_INCLUDE_USES_COMPILER_MK)
31
.if !defined(_INCLUDE_USES_COMPILER_MK)
32
_INCLUDE_USES_COMPILER_MK=	yes
32
_INCLUDE_USES_COMPILER_MK=	yes
33
33
34
.if empty(compiler_ARGS)
34
.if empty(compiler_ARGS)
35
compiler_ARGS=	env
35
compiler_ARGS=	env
36
.endif
36
.endif
37
37
38
VALID_ARGS=	c++11-lib c++11-lang c++14-lang c11 features openmp env nestedfct c++0x gcc-c++11-lib
38
VALID_ARGS=	c++11-lib c++11-lang c++14-lang c11 features openmp env nestedfct c++0x gcc-c++11-lib
39
39
40
.if ${compiler_ARGS} == gcc-c++11-lib
40
.if ${compiler_ARGS} == gcc-c++11-lib
41
_COMPILER_ARGS+=	features gcc-c++11-lib
41
_COMPILER_ARGS+=	features gcc-c++11-lib
42
.elif ${compiler_ARGS} == c++11-lib
42
.elif ${compiler_ARGS} == c++11-lib
43
_COMPILER_ARGS+=	features c++11-lib
43
_COMPILER_ARGS+=	features c++11-lib
44
.elif ${compiler_ARGS} == c++0x
44
.elif ${compiler_ARGS} == c++0x
45
_COMPILER_ARGS+=	features c++0x
45
_COMPILER_ARGS+=	features c++0x
46
.elif ${compiler_ARGS} == c++11-lang
46
.elif ${compiler_ARGS} == c++11-lang
47
_COMPILER_ARGS+=	features c++11-lang
47
_COMPILER_ARGS+=	features c++11-lang
48
.elif ${compiler_ARGS} == c++14-lang
48
.elif ${compiler_ARGS} == c++14-lang
49
_COMPILER_ARGS+=	features c++14-lang
49
_COMPILER_ARGS+=	features c++14-lang
50
.elif ${compiler_ARGS} == c11
50
.elif ${compiler_ARGS} == c11
51
_COMPILER_ARGS+=	features c11
51
_COMPILER_ARGS+=	features c11
52
.elif ${compiler_ARGS} == features
52
.elif ${compiler_ARGS} == features
53
_COMPILER_ARGS+=	features
53
_COMPILER_ARGS+=	features
54
.elif ${compiler_ARGS} == env
54
.elif ${compiler_ARGS} == env
55
_COMPILER_ARGS+=	env
55
_COMPILER_ARGS+=	env
56
.elif ${compiler_ARGS} == openmp
56
.elif ${compiler_ARGS} == openmp
57
_COMPILER_ARGS+=	env openmp
57
_COMPILER_ARGS+=	env openmp
58
.elif ${compiler_ARGS} == nestedfct
58
.elif ${compiler_ARGS} == nestedfct
59
_COMPILER_ARGS+=	env nestedfct
59
_COMPILER_ARGS+=	env nestedfct
60
.else
60
.else
61
IGNORE=	Invalid argument "${compiler_ARGS}", valid arguments are: ${VALID_ARGS}
61
IGNORE=	Invalid argument "${compiler_ARGS}", valid arguments are: ${VALID_ARGS}
62
_COMPILER_ARGS=	#
62
_COMPILER_ARGS=	#
63
.endif
63
.endif
64
64
65
.if ${_COMPILER_ARGS:Mc++*} || ${_COMPILER_ARGS:Mc11}
65
.if ${_COMPILER_ARGS:Mc++*} || ${_COMPILER_ARGS:Mc11}
66
_COMPILER_ARGS+=	features
66
_COMPILER_ARGS+=	features
67
.endif
67
.endif
68
68
69
_CCVERSION!=	${CC} --version
69
_CCVERSION!=	${CC} --version
70
COMPILER_VERSION=	${_CCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
70
COMPILER_VERSION=	${_CCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
71
.if ${_CCVERSION:Mclang}
71
.if ${_CCVERSION:Mclang}
72
COMPILER_TYPE=	clang
72
COMPILER_TYPE=	clang
73
.else
73
.else
74
COMPILER_TYPE=	gcc
74
COMPILER_TYPE=	gcc
75
.endif
75
.endif
76
76
77
ALT_COMPILER_VERSION=	0
77
ALT_COMPILER_VERSION=	0
78
ALT_COMPILER_TYPE=	none
78
ALT_COMPILER_TYPE=	none
79
_ALTCCVERSION=	
79
_ALTCCVERSION=	
80
.if ${COMPILER_TYPE} == gcc && exists(/usr/bin/clang)
80
.if ${COMPILER_TYPE} == gcc && exists(/usr/bin/clang)
81
.if ${ARCH} == amd64 || ${ARCH} == i386 # clang often non-default for a reason
81
.if ${ARCH} == amd64 || ${ARCH} == i386 # clang often non-default for a reason
82
_ALTCCVERSION!=	/usr/bin/clang --version
82
_ALTCCVERSION!=	/usr/bin/clang --version
83
.endif
83
.endif
84
.elif ${COMPILER_TYPE} == clang && exists(/usr/bin/gcc)
84
.elif ${COMPILER_TYPE} == clang && exists(/usr/bin/gcc)
85
_ALTCCVERSION!=	/usr/bin/gcc --version
85
_ALTCCVERSION!=	/usr/bin/gcc --version
86
.endif
86
.endif
87
87
88
ALT_COMPILER_VERSION=	${_ALTCCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
88
ALT_COMPILER_VERSION=	${_ALTCCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
89
.if ${_ALTCCVERSION:Mclang}
89
.if ${_ALTCCVERSION:Mclang}
90
ALT_COMPILER_TYPE=	clang
90
ALT_COMPILER_TYPE=	clang
91
.elif !empty(_ALTCCVERSION)
91
.elif !empty(_ALTCCVERSION)
92
ALT_COMPILER_TYPE=	gcc
92
ALT_COMPILER_TYPE=	gcc
93
.endif
93
.endif
94
94
95
CHOSEN_COMPILER_TYPE=	${COMPILER_TYPE}
95
CHOSEN_COMPILER_TYPE=	${COMPILER_TYPE}
96
96
97
.if ${_COMPILER_ARGS:Mopenmp}
97
.if ${_COMPILER_ARGS:Mopenmp}
98
.if ${COMPILER_TYPE} == clang
98
.if ${COMPILER_TYPE} == clang
99
USE_GCC=	yes
99
.if ${ARCH} == amd64
100
.include	"${USESDIR}/localbase.mk"
101
.if ${COMPILER_VERSION} < 38
102
CFLAGS+=	-D_OPENMP
103
.endif
104
LDFLAGS+=	-lomp -lm
105
LIB_DEPENDS+=	libomp.so.0:devel/openmp
106
.else
107
USE_GCC=		yes
100
CHOSEN_COMPILER_TYPE=	gcc
108
CHOSEN_COMPILER_TYPE=	gcc
109
.endif
101
.endif
110
.endif
102
.endif
111
.endif
103
112
104
.if ${_COMPILER_ARGS:Mnestedfct}
113
.if ${_COMPILER_ARGS:Mnestedfct}
105
.if ${COMPILER_TYPE} == clang
114
.if ${COMPILER_TYPE} == clang
106
USE_GCC=	any
115
USE_GCC=	any
107
CHOSEN_COMPILER_TYPE=	gcc
116
CHOSEN_COMPILER_TYPE=	gcc
108
.endif
117
.endif
109
.endif
118
.endif
110
119
111
.if ${_COMPILER_ARGS:Mfeatures}
120
.if ${_COMPILER_ARGS:Mfeatures}
112
_CXXINTERNAL!=	${CXX} -\#\#\# /dev/null 2>&1
121
_CXXINTERNAL!=	${CXX} -\#\#\# /dev/null 2>&1
113
.if ${_CXXINTERNAL:M\"-lc++\"}
122
.if ${_CXXINTERNAL:M\"-lc++\"}
114
COMPILER_FEATURES=	libc++
123
COMPILER_FEATURES=	libc++
115
.else
124
.else
116
COMPILER_FEATURES=	libstdc++
125
COMPILER_FEATURES=	libstdc++
117
.endif
126
.endif
118
127
119
CSTD=	c89 c99 c11 gnu89 gnu99 gnu11
128
CSTD=	c89 c99 c11 gnu89 gnu99 gnu11
120
CXXSTD=	c++98 c++0x c++11 c++14 gnu++98 gnu++11
129
CXXSTD=	c++98 c++0x c++11 c++14 gnu++98 gnu++11
121
130
122
.for std in ${CSTD} ${CXXSTD}
131
.for std in ${CSTD} ${CXXSTD}
123
_LANG=c
132
_LANG=c
124
.if ${CXXSTD:M${std}}
133
.if ${CXXSTD:M${std}}
125
_LANG=c++
134
_LANG=c++
126
.endif
135
.endif
127
OUTPUT_${std}!=	echo | ${CC} -std=${std} -c -x ${_LANG} /dev/null -o /dev/null 2>&1; echo
136
OUTPUT_${std}!=	echo | ${CC} -std=${std} -c -x ${_LANG} /dev/null -o /dev/null 2>&1; echo
128
.if !${OUTPUT_${std}:M*error*}
137
.if !${OUTPUT_${std}:M*error*}
129
COMPILER_FEATURES+=	${std}
138
COMPILER_FEATURES+=	${std}
130
.endif
139
.endif
131
.endfor
140
.endfor
132
.endif
141
.endif
133
142
134
.if ${_COMPILER_ARGS:Mc++11-lib}
143
.if ${_COMPILER_ARGS:Mc++11-lib}
135
.if !${COMPILER_FEATURES:Mc++11}
144
.if !${COMPILER_FEATURES:Mc++11}
136
USE_GCC=	yes
145
USE_GCC=	yes
137
CHOSEN_COMPILER_TYPE=	gcc
146
CHOSEN_COMPILER_TYPE=	gcc
138
.elif ${COMPILER_TYPE} == clang && ${COMPILER_FEATURES:Mlibstdc++}
147
.elif ${COMPILER_TYPE} == clang && ${COMPILER_FEATURES:Mlibstdc++}
139
USE_GCC=	yes
148
USE_GCC=	yes
140
CHOSEN_COMPILER_TYPE=	gcc
149
CHOSEN_COMPILER_TYPE=	gcc
141
.endif
150
.endif
142
.endif
151
.endif
143
152
144
.if ${_COMPILER_ARGS:Mc++14-lang}
153
.if ${_COMPILER_ARGS:Mc++14-lang}
145
.if !${COMPILER_FEATURES:Mc++14}
154
.if !${COMPILER_FEATURES:Mc++14}
146
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
155
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
147
USE_GCC=	5+
156
USE_GCC=	5+
148
CHOSEN_COMPILER_TYPE=	gcc
157
CHOSEN_COMPILER_TYPE=	gcc
149
.elif (${COMPILER_TYPE} == clang && ${COMPILER_VERSION} < 35) || ${COMPILER_TYPE} == gcc
158
.elif (${COMPILER_TYPE} == clang && ${COMPILER_VERSION} < 35) || ${COMPILER_TYPE} == gcc
150
.if ${ALT_COMPILER_TYPE} == clang && ${ALT_COMPILER_VERSION} >= 35
159
.if ${ALT_COMPILER_TYPE} == clang && ${ALT_COMPILER_VERSION} >= 35
151
CPP=	clang-cpp
160
CPP=	clang-cpp
152
CC=	clang
161
CC=	clang
153
CXX=	clang++
162
CXX=	clang++
154
CHOSEN_COMPILER_TYPE=	clang
163
CHOSEN_COMPILER_TYPE=	clang
155
.else
164
.else
156
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang40:devel/llvm40
165
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang40:devel/llvm40
157
CPP=	${LOCALBASE}/bin/clang-cpp40
166
CPP=	${LOCALBASE}/bin/clang-cpp40
158
CC=	${LOCALBASE}/bin/clang40
167
CC=	${LOCALBASE}/bin/clang40
159
CXX=	${LOCALBASE}/bin/clang++40
168
CXX=	${LOCALBASE}/bin/clang++40
160
CHOSEN_COMPILER_TYPE=	clang
169
CHOSEN_COMPILER_TYPE=	clang
161
.endif
170
.endif
162
.endif
171
.endif
163
.endif
172
.endif
164
.endif
173
.endif
165
174
166
.if ${_COMPILER_ARGS:Mc++11-lang}
175
.if ${_COMPILER_ARGS:Mc++11-lang}
167
.if !${COMPILER_FEATURES:Mc++11}
176
.if !${COMPILER_FEATURES:Mc++11}
168
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
177
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
169
USE_GCC=	yes
178
USE_GCC=	yes
170
CHOSEN_COMPILER_TYPE=	gcc
179
CHOSEN_COMPILER_TYPE=	gcc
171
.elif ${COMPILER_TYPE} == gcc
180
.elif ${COMPILER_TYPE} == gcc
172
.if ${ALT_COMPILER_TYPE} == clang
181
.if ${ALT_COMPILER_TYPE} == clang
173
CPP=	clang-cpp
182
CPP=	clang-cpp
174
CC=	clang
183
CC=	clang
175
CXX=	clang++
184
CXX=	clang++
176
CHOSEN_COMPILER_TYPE=	clang
185
CHOSEN_COMPILER_TYPE=	clang
177
.else
186
.else
178
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
187
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
179
CPP=	${LOCALBASE}/bin/clang-cpp34
188
CPP=	${LOCALBASE}/bin/clang-cpp34
180
CC=	${LOCALBASE}/bin/clang34
189
CC=	${LOCALBASE}/bin/clang34
181
CXX=	${LOCALBASE}/bin/clang++34
190
CXX=	${LOCALBASE}/bin/clang++34
182
CHOSEN_COMPILER_TYPE=	clang
191
CHOSEN_COMPILER_TYPE=	clang
183
.endif
192
.endif
184
.endif
193
.endif
185
.endif
194
.endif
186
.endif
195
.endif
187
196
188
.if ${_COMPILER_ARGS:Mc++0x}
197
.if ${_COMPILER_ARGS:Mc++0x}
189
.if !${COMPILER_FEATURES:Mc++0x}
198
.if !${COMPILER_FEATURES:Mc++0x}
190
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
199
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
191
USE_GCC=	yes
200
USE_GCC=	yes
192
CHOSEN_COMPILER_TYPE=	gcc
201
CHOSEN_COMPILER_TYPE=	gcc
193
.elif ${COMPILER_TYPE} == gcc
202
.elif ${COMPILER_TYPE} == gcc
194
.if ${ALT_COMPILER_TYPE} == clang
203
.if ${ALT_COMPILER_TYPE} == clang
195
CPP=	clang-cpp
204
CPP=	clang-cpp
196
CC=	clang
205
CC=	clang
197
CXX=	clang++
206
CXX=	clang++
198
CHOSEN_COMPILER_TYPE=	clang
207
CHOSEN_COMPILER_TYPE=	clang
199
.else
208
.else
200
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
209
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
201
CHOSEN_COMPILER_TYPE=	clang
210
CHOSEN_COMPILER_TYPE=	clang
202
CPP=	${LOCALBASE}/bin/clang-cpp34
211
CPP=	${LOCALBASE}/bin/clang-cpp34
203
CC=	${LOCALBASE}/bin/clang34
212
CC=	${LOCALBASE}/bin/clang34
204
CXX=	${LOCALBASE}/bin/clang++34
213
CXX=	${LOCALBASE}/bin/clang++34
205
.endif
214
.endif
206
.endif
215
.endif
207
.endif
216
.endif
208
.endif
217
.endif
209
218
210
.if ${_COMPILER_ARGS:Mc11}
219
.if ${_COMPILER_ARGS:Mc11}
211
.if !${COMPILER_FEATURES:Mc11}
220
.if !${COMPILER_FEATURES:Mc11}
212
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
221
.if (defined(FAVORITE_COMPILER) && ${FAVORITE_COMPILER} == gcc) || (${ARCH} != amd64 && ${ARCH} != i386) # clang not always supported on Tier-2
213
USE_GCC=	yes
222
USE_GCC=	yes
214
CHOSEN_COMPILER_TYPE=	gcc
223
CHOSEN_COMPILER_TYPE=	gcc
215
.elif ${COMPILER_TYPE} == gcc
224
.elif ${COMPILER_TYPE} == gcc
216
.if ${ALT_COMPILER_TYPE} == clang
225
.if ${ALT_COMPILER_TYPE} == clang
217
CPP=	clang-cpp
226
CPP=	clang-cpp
218
CC=	clang
227
CC=	clang
219
CXX=	clang++
228
CXX=	clang++
220
CHOSEN_COMPILER_TYPE=	clang
229
CHOSEN_COMPILER_TYPE=	clang
221
.else
230
.else
222
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
231
BUILD_DEPENDS+=	${LOCALBASE}/bin/clang34:lang/clang34
223
CHOSEN_COMPILER_TYPE=	clang
232
CHOSEN_COMPILER_TYPE=	clang
224
CPP=	${LOCALBASE}/bin/clang-cpp34
233
CPP=	${LOCALBASE}/bin/clang-cpp34
225
CC=	${LOCALBASE}/bin/clang34
234
CC=	${LOCALBASE}/bin/clang34
226
CXX=	${LOCALBASE}/bin/clang++34
235
CXX=	${LOCALBASE}/bin/clang++34
227
.endif
236
.endif
228
.endif
237
.endif
229
.endif
238
.endif
230
.endif
239
.endif
231
240
232
.if ${_COMPILER_ARGS:Mgcc-c++11-lib}
241
.if ${_COMPILER_ARGS:Mgcc-c++11-lib}
233
USE_GCC=	yes
242
USE_GCC=	yes
234
CHOSEN_COMPILER_TYPE=	gcc
243
CHOSEN_COMPILER_TYPE=	gcc
235
.if ${COMPILER_FEATURES:Mlibc++}
244
.if ${COMPILER_FEATURES:Mlibc++}
236
CXXFLAGS+=	-nostdinc++ -isystem /usr/include/c++/v1
245
CXXFLAGS+=	-nostdinc++ -isystem /usr/include/c++/v1
237
LDFLAGS+=	-L${WRKDIR}
246
LDFLAGS+=	-L${WRKDIR}
238
247
239
_USES_configure+=	200:gcc-libc++-configure
248
_USES_configure+=	200:gcc-libc++-configure
240
gcc-libc++-configure:
249
gcc-libc++-configure:
241
	@${LN} -fs /usr/lib/libc++.so ${WRKDIR}/libstdc++.so
250
	@${LN} -fs /usr/lib/libc++.so ${WRKDIR}/libstdc++.so
242
.endif
251
.endif
243
.endif
252
.endif
244
253
245
.endif
254
.endif
(-)math/openblas/Makefile (+1 lines)
Lines 1-162 Link Here
1
# Created by: Eijiro Shibusawa <ej-sib@ice.uec.ac.jp>
1
# Created by: Eijiro Shibusawa <ej-sib@ice.uec.ac.jp>
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	openblas
4
PORTNAME=	openblas
5
PORTVERSION=	0.2.19
5
PORTVERSION=	0.2.19
6
PORTREVISION=	1
6
PORTREVISION=	1
7
DISTVERSIONPREFIX=	v
7
DISTVERSIONPREFIX=	v
8
PORTEPOCH=	1
8
PORTEPOCH=	1
9
CATEGORIES=	math
9
CATEGORIES=	math
10
MASTER_SITES=	NL/lapack/timing/:lapack_tmg
10
MASTER_SITES=	NL/lapack/timing/:lapack_tmg
11
DISTFILES=	large.tgz:lapack_tmg timing.tgz:lapack_tmg
11
DISTFILES=	large.tgz:lapack_tmg timing.tgz:lapack_tmg
12
DIST_SUBDIR=	openblas
12
DIST_SUBDIR=	openblas
13
13
14
MAINTAINER=	phd_kimberlite@yahoo.co.jp
14
MAINTAINER=	phd_kimberlite@yahoo.co.jp
15
COMMENT=	Optimized BLAS library based on GotoBLAS2
15
COMMENT=	Optimized BLAS library based on GotoBLAS2
16
16
17
LICENSE=	BSD3CLAUSE
17
LICENSE=	BSD3CLAUSE
18
LICENSE_FILE=	${WRKSRC}/LICENSE
18
LICENSE_FILE=	${WRKSRC}/LICENSE
19
19
20
USE_GITHUB=	yes
20
USE_GITHUB=	yes
21
GH_ACCOUNT=	xianyi
21
GH_ACCOUNT=	xianyi
22
GH_PROJECT=	OpenBLAS
22
GH_PROJECT=	OpenBLAS
23
LARGE_FILE=	large.tgz
23
LARGE_FILE=	large.tgz
24
TIMING_FILE=	timing.tgz
24
TIMING_FILE=	timing.tgz
25
25
26
USES=		fortran gmake perl5
26
USES=		fortran gmake perl5
27
USE_LDCONFIG=	yes
27
USE_LDCONFIG=	yes
28
USE_PERL5=	build
28
USE_PERL5=	build
29
29
30
OPENBLAS_SUFX=	r${PORTVERSION}
30
OPENBLAS_SUFX=	r${PORTVERSION}
31
OPENBLAS_LIBS=	libopenblas libopenblasp
31
OPENBLAS_LIBS=	libopenblas libopenblasp
32
OPENBLAS_SVER=	0
32
OPENBLAS_SVER=	0
33
OPENBLAS_FILES=	${OPENBLAS_LIBS:S|$|.so|} ${OPENBLAS_LIBS:S|$|.so.${OPENBLAS_SVER}|} ${OPENBLAS_LIBS:S|$|.a|}
33
OPENBLAS_FILES=	${OPENBLAS_LIBS:S|$|.so|} ${OPENBLAS_LIBS:S|$|.so.${OPENBLAS_SVER}|} ${OPENBLAS_LIBS:S|$|.a|}
34
PLIST_FILES=	${OPENBLAS_FILES:S|^|lib/|}
34
PLIST_FILES=	${OPENBLAS_FILES:S|^|lib/|}
35
35
36
OPTIONS_DEFINE=		DYNAMIC_ARCH INTERFACE64 OPENMP AVX AVX2
36
OPTIONS_DEFINE=		DYNAMIC_ARCH INTERFACE64 OPENMP AVX AVX2
37
37
38
DYNAMIC_ARCH_DESC=	Support multiple CPU types on i386 and amd64
38
DYNAMIC_ARCH_DESC=	Support multiple CPU types on i386 and amd64
39
INTERFACE64_DESC=	Use 8 byte integers on 64-bit architectures
39
INTERFACE64_DESC=	Use 8 byte integers on 64-bit architectures
40
OPENMP_DESC=		Use OpenMP for threading
40
OPENMP_DESC=		Use OpenMP for threading
41
AVX_DESC=		Support Advanced Vector Extensions (AVX)
41
AVX_DESC=		Support Advanced Vector Extensions (AVX)
42
AVX2_DESC=		Support Advanced Vector Extensions 2 (AVX2)
42
AVX2_DESC=		Support Advanced Vector Extensions 2 (AVX2)
43
43
44
.if defined(BATCH) || defined(PACKAGE_BUILDING)
44
.if defined(BATCH) || defined(PACKAGE_BUILDING)
45
OPTIONS_DEFAULT=	DYNAMIC_ARCH
45
OPTIONS_DEFAULT=	DYNAMIC_ARCH
46
.endif
46
.endif
47
47
48
.include <bsd.port.options.mk>
48
.include <bsd.port.options.mk>
49
49
50
.if defined(TARGET_CPU_ARCH)
50
.if defined(TARGET_CPU_ARCH)
51
BUILDFLAGS+=	TARGET=${TARGET_CPU_ARCH}
51
BUILDFLAGS+=	TARGET=${TARGET_CPU_ARCH}
52
.endif
52
.endif
53
53
54
MAXTHREADS?=	8
54
MAXTHREADS?=	8
55
BUILDFLAGS_THREAD+=	NUM_THREADS=${MAXTHREADS} USE_THREAD=1
55
BUILDFLAGS_THREAD+=	NUM_THREADS=${MAXTHREADS} USE_THREAD=1
56
56
57
.if ${ARCH:M*64} == ""
57
.if ${ARCH:M*64} == ""
58
BUILDFLAGS+=	BINARY32=1
58
BUILDFLAGS+=	BINARY32=1
59
.else
59
.else
60
BUILDFLAGS+=	BINARY64=1
60
BUILDFLAGS+=	BINARY64=1
61
.endif
61
.endif
62
62
63
.if ! ( ${PORT_OPTIONS:MDYNAMIC_ARCH} && ( ${ARCH} == "amd64" || ${ARCH} == "i386" ) )
63
.if ! ( ${PORT_OPTIONS:MDYNAMIC_ARCH} && ( ${ARCH} == "amd64" || ${ARCH} == "i386" ) )
64
MANUAL_PACKAGE_BUILD=	Optimizes for the build machine.
64
MANUAL_PACKAGE_BUILD=	Optimizes for the build machine.
65
.endif
65
.endif
66
66
67
.if ${PORT_OPTIONS:MDYNAMIC_ARCH}
67
.if ${PORT_OPTIONS:MDYNAMIC_ARCH}
68
BUILDFLAGS+=	DYNAMIC_ARCH=1
68
BUILDFLAGS+=	DYNAMIC_ARCH=1
69
.endif
69
.endif
70
70
71
.if ${PORT_OPTIONS:MINTERFACE64}
71
.if ${PORT_OPTIONS:MINTERFACE64}
72
BUILDFLAGS+=	INTERFACE64=1
72
BUILDFLAGS+=	INTERFACE64=1
73
.endif
73
.endif
74
74
75
.if ${PORT_OPTIONS:MOPENMP}
75
.if ${PORT_OPTIONS:MOPENMP}
76
USE_GCC=	yes
76
USES+=		compiler:openmp
77
USES+=		compiler:openmp
77
BUILDFLAGS_THREAD+=	USE_OPENMP=1
78
BUILDFLAGS_THREAD+=	USE_OPENMP=1
78
.endif
79
.endif
79
80
80
.if ! ${PORT_OPTIONS:MAVX}
81
.if ! ${PORT_OPTIONS:MAVX}
81
BUILDFLAGS+=	NO_AVX=1
82
BUILDFLAGS+=	NO_AVX=1
82
.endif
83
.endif
83
84
84
.if ! ${PORT_OPTIONS:MAVX2}
85
.if ! ${PORT_OPTIONS:MAVX2}
85
BUILDFLAGS+=	NO_AVX2=1
86
BUILDFLAGS+=	NO_AVX2=1
86
.endif
87
.endif
87
88
88
post-extract:
89
post-extract:
89
	cd ${DISTDIR}/${DIST_SUBDIR} ; \
90
	cd ${DISTDIR}/${DIST_SUBDIR} ; \
90
	${CP} ${LARGE_FILE} ${TIMING_FILE} ${WRKSRC}
91
	${CP} ${LARGE_FILE} ${TIMING_FILE} ${WRKSRC}
91
	${MKDIR} ${WRKDIR}/lib
92
	${MKDIR} ${WRKDIR}/lib
92
93
93
post-patch:
94
post-patch:
94
	${REINPLACE_CMD} -e "s+%%FIND%%+${FIND}+" \
95
	${REINPLACE_CMD} -e "s+%%FIND%%+${FIND}+" \
95
	-e "s+%%XARGS%%+${XARGS}+" \
96
	-e "s+%%XARGS%%+${XARGS}+" \
96
	-e "s+%%REINPLACE_CMD%%+${REINPLACE_CMD}+" \
97
	-e "s+%%REINPLACE_CMD%%+${REINPLACE_CMD}+" \
97
		${WRKSRC}/Makefile
98
		${WRKSRC}/Makefile
98
	${REINPLACE_CMD} -e "s+%%FC%%+${FC}+" -e "s+%%CC%%+${CC}+" \
99
	${REINPLACE_CMD} -e "s+%%FC%%+${FC}+" -e "s+%%CC%%+${CC}+" \
99
		${WRKSRC}/Makefile.rule
100
		${WRKSRC}/Makefile.rule
100
	${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \
101
	${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \
101
		${WRKSRC}/Makefile.rule \
102
		${WRKSRC}/Makefile.rule \
102
		${WRKSRC}/Makefile.tail \
103
		${WRKSRC}/Makefile.tail \
103
		${WRKSRC}/driver/level3/Makefile \
104
		${WRKSRC}/driver/level3/Makefile \
104
		${WRKSRC}/driver/others/Makefile \
105
		${WRKSRC}/driver/others/Makefile \
105
		${WRKSRC}/exports/Makefile \
106
		${WRKSRC}/exports/Makefile \
106
		${WRKSRC}/interface/Makefile \
107
		${WRKSRC}/interface/Makefile \
107
		${WRKSRC}/kernel/Makefile \
108
		${WRKSRC}/kernel/Makefile \
108
		${WRKSRC}/kernel/Makefile.L3 \
109
		${WRKSRC}/kernel/Makefile.L3 \
109
		${WRKSRC}/lapack/laswp/Makefile \
110
		${WRKSRC}/lapack/laswp/Makefile \
110
		${WRKSRC}/lapack-netlib/SRC/Makefile \
111
		${WRKSRC}/lapack-netlib/SRC/Makefile \
111
		${WRKSRC}/lapack-netlib/SRC/VARIANTS/Makefile \
112
		${WRKSRC}/lapack-netlib/SRC/VARIANTS/Makefile \
112
		${WRKSRC}/lapack-netlib/TESTING/MATGEN/Makefile \
113
		${WRKSRC}/lapack-netlib/TESTING/MATGEN/Makefile \
113
		${WRKSRC}/lapack-netlib/LAPACKE/src/Makefile \
114
		${WRKSRC}/lapack-netlib/LAPACKE/src/Makefile \
114
		${WRKSRC}/lapack-netlib/LAPACKE/utils/Makefile \
115
		${WRKSRC}/lapack-netlib/LAPACKE/utils/Makefile \
115
		${WRKSRC}/reference/Makefile
116
		${WRKSRC}/reference/Makefile
116
	${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \
117
	${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \
117
	-e 's+%%LDFLAGS%%+${LDFLAGS}+' \
118
	-e 's+%%LDFLAGS%%+${LDFLAGS}+' \
118
	-e 's+%%LOCALBASE%%+${LOCALBASE}+' \
119
	-e 's+%%LOCALBASE%%+${LOCALBASE}+' \
119
	-e 's+%%FIND%%+${FIND}+' \
120
	-e 's+%%FIND%%+${FIND}+' \
120
	-e 's+%%XARGS%%+${XARGS}+' \
121
	-e 's+%%XARGS%%+${XARGS}+' \
121
	-e 's+%%REINPLACE_CMD%%+${REINPLACE_CMD}+' \
122
	-e 's+%%REINPLACE_CMD%%+${REINPLACE_CMD}+' \
122
	-e 's+$${CROSS_SUFFIX}+${LOCALBASE}/bin/+' \
123
	-e 's+$${CROSS_SUFFIX}+${LOCALBASE}/bin/+' \
123
	-e '/Clang.*OpenMP/g' \
124
	-e '/Clang.*OpenMP/g' \
124
		${WRKSRC}/Makefile.system
125
		${WRKSRC}/Makefile.system
125
.if ${PORT_OPTIONS:MOPENMP}
126
.if ${PORT_OPTIONS:MOPENMP}
126
	${REINPLACE_CMD} -e "s+OPENBLAS_NUM_THREADS+OMP_NUM_THREADS+g" \
127
	${REINPLACE_CMD} -e "s+OPENBLAS_NUM_THREADS+OMP_NUM_THREADS+g" \
127
		${WRKSRC}/test/Makefile \
128
		${WRKSRC}/test/Makefile \
128
		${WRKSRC}/ctest/Makefile
129
		${WRKSRC}/ctest/Makefile
129
.endif
130
.endif
130
131
131
do-build:
132
do-build:
132
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=1 USE_THREAD=0 \
133
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=1 USE_THREAD=0 \
133
	${MAKE_CMD} ${MAKE_ARGS}
134
	${MAKE_CMD} ${MAKE_ARGS}
134
	${CP} ${WRKSRC}/libopenblas-${OPENBLAS_SUFX}.a ${WRKDIR}/lib/libopenblas.a
135
	${CP} ${WRKSRC}/libopenblas-${OPENBLAS_SUFX}.a ${WRKDIR}/lib/libopenblas.a
135
	${CP} ${WRKSRC}/libopenblas-${OPENBLAS_SUFX}.so ${WRKDIR}/lib/libopenblas.so.${OPENBLAS_SVER}
136
	${CP} ${WRKSRC}/libopenblas-${OPENBLAS_SUFX}.so ${WRKDIR}/lib/libopenblas.so.${OPENBLAS_SVER}
136
	cd ${WRKSRC} ; ${MAKE_CMD} ${MAKE_ARGS} clean
137
	cd ${WRKSRC} ; ${MAKE_CMD} ${MAKE_ARGS} clean
137
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} ${BUILDFLAGS_THREAD} \
138
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} ${BUILDFLAGS_THREAD} \
138
	${MAKE_CMD} ${MAKE_ARGS}
139
	${MAKE_CMD} ${MAKE_ARGS}
139
	${CP} ${WRKSRC}/libopenblasp-${OPENBLAS_SUFX}.a ${WRKDIR}/lib/libopenblasp.a
140
	${CP} ${WRKSRC}/libopenblasp-${OPENBLAS_SUFX}.a ${WRKDIR}/lib/libopenblasp.a
140
	${CP} ${WRKSRC}/libopenblasp-${OPENBLAS_SUFX}.so ${WRKDIR}/lib/libopenblasp.so.${OPENBLAS_SVER}
141
	${CP} ${WRKSRC}/libopenblasp-${OPENBLAS_SUFX}.so ${WRKDIR}/lib/libopenblasp.so.${OPENBLAS_SVER}
141
142
142
BENCHMARK_MAXTHREADS?=	${MAXTHREADS}
143
BENCHMARK_MAXTHREADS?=	${MAXTHREADS}
143
.if ${PORT_OPTIONS:MOPENMP}
144
.if ${PORT_OPTIONS:MOPENMP}
144
BENCHMARK_THREADS_FLAG=		OMP_NUM_THREADS=${BENCHMARK_MAXTHREADS}
145
BENCHMARK_THREADS_FLAG=		OMP_NUM_THREADS=${BENCHMARK_MAXTHREADS}
145
.else
146
.else
146
BENCHMARK_THREADS_FLAG=		OPENBLAS_NUM_THREADS=${BENCHMARK_MAXTHREADS}
147
BENCHMARK_THREADS_FLAG=		OPENBLAS_NUM_THREADS=${BENCHMARK_MAXTHREADS}
147
.endif
148
.endif
148
149
149
benchmark: build
150
benchmark: build
150
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=${MAXTHREADS} \
151
	cd ${WRKSRC} ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=${MAXTHREADS} \
151
	USE_THREAD=1 ${MAKE_CMD} ${MAKE_ARGS} hpl
152
	USE_THREAD=1 ${MAKE_CMD} ${MAKE_ARGS} hpl
152
	cd ${WRKSRC}/benchmark ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=${MAXTHREADS} \
153
	cd ${WRKSRC}/benchmark ; ${SETENV} ${BUILDFLAGS} NUM_THREADS=${MAXTHREADS} \
153
	USE_THREAD=1 ${BENCHMARK_THREADS_FLAG} ${MAKE_CMD} ${MAKE_ARGS}
154
	USE_THREAD=1 ${BENCHMARK_THREADS_FLAG} ${MAKE_CMD} ${MAKE_ARGS}
154
155
155
do-install:
156
do-install:
156
.for L in ${OPENBLAS_LIBS}
157
.for L in ${OPENBLAS_LIBS}
157
	${INSTALL_DATA} ${WRKDIR}/lib/${L}.a ${STAGEDIR}${PREFIX}/lib
158
	${INSTALL_DATA} ${WRKDIR}/lib/${L}.a ${STAGEDIR}${PREFIX}/lib
158
	${INSTALL_LIB} ${WRKDIR}/lib/${L}.so.${OPENBLAS_SVER} ${STAGEDIR}${PREFIX}/lib
159
	${INSTALL_LIB} ${WRKDIR}/lib/${L}.so.${OPENBLAS_SVER} ${STAGEDIR}${PREFIX}/lib
159
	${LN} -sf ${L}.so.${OPENBLAS_SVER} ${STAGEDIR}${PREFIX}/lib/${L}.so
160
	${LN} -sf ${L}.so.${OPENBLAS_SVER} ${STAGEDIR}${PREFIX}/lib/${L}.so
160
.endfor
161
.endfor
161
162
162
.include <bsd.port.mk>
163
.include <bsd.port.mk>

Return to bug 210337