1PORTNAME=	openblas
2DISTVERSIONPREFIX=	v
3DISTVERSION=	0.3.25
4PORTEPOCH=	2
5CATEGORIES=	math
6MASTER_SITES=	NL/lapack/timing/:lapack_tmg
7DISTFILES=	large.tgz:lapack_tmg \
8		timing.tgz:lapack_tmg
9DIST_SUBDIR=	openblas
10
11MAINTAINER=	ports@MidnightBSD.org
12COMMENT=	Optimized BLAS library based on GotoBLAS2
13WWW=		https://github.com/OpenMathLib/OpenBLAS
14
15LICENSE=	bsd3
16LICENSE_FILE=	${WRKSRC}/LICENSE
17
18FAKE_OPTS=	trueprefix
19
20USES=		compiler:c11 cpe fortran gmake perl5 pkgconfig
21
22USE_GITHUB=	yes
23GH_ACCOUNT=	OpenMathLib
24GH_PROJECT=	OpenBLAS
25GH_TAGNAME=	5e1a429
26LARGE_FILE=	large.tgz
27TIMING_FILE=	timing.tgz
28CPE_VENDOR=	openblas_project
29
30USE_LDCONFIG=	yes
31USE_PERL5=	build
32
33OPENBLAS_SVER=	0
34TEST_TARGET=	tests
35
36PLIST_SUB+=	PORTVERSION=${PORTVERSION}
37
38OPTIONS_DEFINE=			DYNAMIC_ARCH INTERFACE64 OPENMP
39OPTIONS_DEFAULT=		OPENMP
40OPTIONS_DEFINE_i386=		AVX AVX2
41OPTIONS_DEFINE_amd64=		AVX AVX2
42OPTIONS_RADIO=	${OPTIONS_RADIO_${ARCH}}
43OPTIONS_SUB=	yes
44
45.if defined(BATCH) || defined(PACKAGE_BUILDING)
46OPTIONS_DEFAULT_i386=	DYNAMIC_ARCH
47OPTIONS_DEFAULT_amd64=	DYNAMIC_ARCH
48.endif
49
50DYNAMIC_ARCH_DESC=	Support multiple CPU types on i386 and amd64
51INTERFACE64_DESC=	Use 8 byte integers on 64-bit architectures
52OPENMP_DESC=		Use OpenMP for threading
53AVX_DESC=		Support Advanced Vector Extensions (AVX)
54AVX2_DESC=		Support Advanced Vector Extensions 2 (AVX2)
55
56.include <bsd.mport.options.mk>
57
58MAXTHREADS?=	64
59
60.if ! ${PORT_OPTIONS:MDYNAMIC_ARCH} && ( ${ARCH} == "amd64" || ${ARCH} == "i386" )
61MANUAL_PACKAGE_BUILD=	Optimizes for the build machine.
62.endif
63
64.include <bsd.port.pre.mk>
65
66post-extract:
67	cd ${DISTDIR}/${DIST_SUBDIR} ; \
68	${CP} ${LARGE_FILE} ${TIMING_FILE} ${WRKSRC}
69
70post-patch:
71	@${ECHO_CMD} MAKE_NB_JOBS=-1 >> ${WRKSRC}/Makefile.rule
72	@${ECHO_CMD} NUM_THREADS=${MAXTHREADS} >> ${WRKSRC}/Makefile.rule
73	@${ECHO_CMD} USE_THREAD=1 >> ${WRKSRC}/Makefile.rule
74.if ! ${PORT_OPTIONS:MAVX}
75	@${ECHO_CMD} NO_AVX=1 >> ${WRKSRC}/Makefile.rule
76.endif
77.if ! ${PORT_OPTIONS:MAVX2}
78	@${ECHO_CMD} NO_AVX2=1 >> ${WRKSRC}/Makefile.rule
79.endif
80.if ${PORT_OPTIONS:MDYNAMIC_ARCH}
81	@${ECHO_CMD} DYNAMIC_ARCH=1 >> ${WRKSRC}/Makefile.rule
82	@${ECHO_CMD} DYNAMIC_OLDER=1 >> ${WRKSRC}/Makefile.rule
83.endif
84.if defined(TARGET_CPU_ARCH)
85	@${ECHO_CMD} TARGET=${TARGET_CPU_ARCH} >> ${WRKSRC}/Makefile.rule
86.endif
87.if ${PORT_OPTIONS:MINTERFACE64}
88	@${ECHO_CMD} INTERFACE64=1 >> ${WRKSRC}/Makefile.rule
89.endif
90.if ${PORT_OPTIONS:MOPENMP}
91	@${ECHO_CMD} USE_OPENMP=1 >> ${WRKSRC}/Makefile.rule
92.endif
93.if ${ARCH:M*64*} == ""
94	@${ECHO_CMD} BINARY=32 >> ${WRKSRC}/Makefile.rule
95.else
96	@${ECHO_CMD} BINARY=64 >> ${WRKSRC}/Makefile.rule
97.endif
98
99post-patch-OPENMP-on:
100	@${REINPLACE_CMD} -e "s+OPENBLAS_NUM_THREADS+OMP_NUM_THREADS+g" \
101		${WRKSRC}/test/Makefile \
102		${WRKSRC}/ctest/Makefile
103
104BENCHMARK_MAXTHREADS?=	${MAXTHREADS}
105.if ${PORT_OPTIONS:MOPENMP}
106BENCHMARK_THREADS_FLAG=	OMP_NUM_THREADS=${BENCHMARK_MAXTHREADS}
107.else
108BENCHMARK_THREADS_FLAG=	OPENBLAS_NUM_THREADS=${BENCHMARK_MAXTHREADS}
109.endif
110
111benchmark: build
112	cd ${WRKSRC} ; ${SETENV} ${MAKE_CMD} ${MAKE_ARGS} hpl
113	cd ${WRKSRC}/benchmark ; ${SETENV} ${BENCHMARK_THREADS_FLAG} ${MAKE_CMD} ${MAKE_ARGS}
114
115post-install-DYNAMIC_ARCH-off:
116	cd ${FAKE_DESTDIR}${PREFIX} && ls lib/libopenblas_*p-r${PORTVERSION}.* >> ${TMPPLIST}
117
118.include <bsd.port.post.mk>
119