1 2 3PORTNAME= atlas 4PORTVERSION= 3.10.3 5PORTREVISION= 2 6PORTEPOCH= 1 7CATEGORIES= math 8MASTER_SITES= SF/math-${PORTNAME}/Stable/${PORTVERSION} 9PKGNAMESUFFIX= -math 10DISTNAME= ${PORTNAME}${PORTVERSION} 11 12MAINTAINER= ports@MidnightBSD.org 13COMMENT= Automatically Tuned Linear Algebra Software (ATLAS) 14 15LICENSE= bsd3 16 17BUILD_DEPENDS= ${NONEXISTENT}:math/lapack:checksum 18 19USES= fortran gmake tar:bzip2 20USE_GCC= yes 21 22CONFLICTS= cblas-[0-9]* 23MANUAL_PACKAGE_BUILD= Optimizes for the local machine. 24 25OPTIONS_DEFINE= DOCS DATA ARCHDEF TSC WALL_TIMER 26OPTIONS_DEFAULT= DATA 27ARCHDEF_DESC= Use a specified architectural default 28DATA_DESC= Install tuning data and logs from the build 29TSC_DESC= If WALL_TIMER is enabled, use the TSC 30WALL_TIMER_DESC= Use less robust timing with higher resolution 31 32PORTSCOUT= limitw:1,even 33WRKSRC= ${WRKDIR}/ATLAS 34 35.include <bsd.mport.options.mk> 36 37#Increase ATLAS_MAXMALLOC if the atlas threaded libraries perform poorly on large problems: 38# http://math-atlas.sourceforge.net/errata.html#MaxMalloc 39ATLAS_MAXMALLOC?= 67108864 40 41.if !empty(ARCH:M*64*) 42POINTER?= 64 43.else 44POINTER?= 32 45.endif 46 47.if defined(MAINTAINER_MODE) 48LIB_DEPENDS+= libblas.so:math/blas 49.endif 50 51.if ${PORT_OPTIONS:MDATA} 52PORTDATA= * 53.endif 54PORTDOCS= * 55 56.if ${PORT_OPTIONS:MARCHDEF} 57. if defined(ARCHDEF) 58. if ${ARCHDEF} == "NONE" 59ARCHDEFFLAG= -Si archdef 0 60. endif 61. else 62IGNORE= you have set WITH_ARCHDEF, but have not defined ARCHDEF 63. endif 64.endif 65 66USE_LDCONFIG= yes 67 68EXTRA_FLAGS?= ${PICFLAG} -Wl,-rpath=${_GCC_RUNTIME} 69SHARED_FLAGS= ${PICFLAG} -DPIC 70SHARED_LAPACK_WRKSRC= WRKSRC 71STATIC_LAPACK_WRKSRC= WRKSRC 72PICFLAG?= -fPIC 73CFLAGS+= ${PICFLAG} 74CONFIGURE_ENV+= PATH="${WRKDIR}/.bin:${PATH}" 75MAKE_ENV+= MAKE=${GMAKE} PATH="${WRKDIR}/.bin:${PATH}" 76BINARY_ALIAS= make=${GMAKE} gcc=${CC} gfortran=${FC} f77=${FC} 77 78pre-everything:: 79 @${CAT} ${FILESDIR}/tuning-message 80 81pre-configure: 82 ${REINPLACE_CMD} -e 's|$$(ARCH)|$$(ATLAS_ARCH)|g' \ 83 ${WRKSRC}/Make.top \ 84 ${WRKSRC}/makes/Make.bin \ 85 ${WRKSRC}/makes/Make.lib \ 86 ${WRKSRC}/makes/Make.sysinfo \ 87 ${WRKSRC}/CONFIG/src/Makefile \ 88 ${WRKSRC}/CONFIG/ARCHS/Makefile 89 ${REINPLACE_CMD} -e "\|OS=ALL|{N; \ 90 s|-mavx|-msse3|;s|'| ${EXTRA_FLAGS}'|4;}" \ 91 ${WRKSRC}/CONFIG/src/atlcomp.txt 92 ${REINPLACE_CMD} -E -e \ 93 "\|(#define ATL_MaxMalloc[[:blank:]]+)([[:digit:]]+)|s||\1${ATLAS_MAXMALLOC}|" \ 94 ${WRKSRC}/include/atlas_lvl3.h 95 ${REINPLACE_CMD} -e 's|%%WRKBIN%%|${WRKDIR}/.bin|' \ 96 ${WRKSRC}/CONFIG/src/probe_comp.c 97 98do-configure: 99 if [ ${PORT_OPTIONS:MWALL_TIMER} ] ; then \ 100 TIMEFLAG= ; \ 101 if [ \( ${ARCH} = "i386" -o ${ARCH} = "amd64" \) -a ${PORT_OPTIONS:MTSC} ] ; then \ 102 freq=`${SYSCTL} -ni machdep.tsc_freq` ; \ 103 if [ "x$${freq}" != "x" ] ; then \ 104 if [ $${freq} -gt 1000000 ] ; then \ 105 MHZ=$$(($${freq}/1000000)) ; \ 106 TIMEFLAG="-D c -DPentiumCPS=$${MHZ}" ; \ 107 fi ; \ 108 fi ; \ 109 fi ; \ 110 if [ "x$${TIMEFLAG}" = "x" ] ; then \ 111 TIMEFLAG="-D c -DWALL" ; \ 112 fi ; \ 113 fi ; \ 114 ${ECHO_CMD} "TIMEFLAG = $${TIMEFLAG}" \ 115 > ${WRKSRC}/saved_flags ; \ 116 ${ECHO_CMD} "Dummy configuration of ATLAS to obtain compiler flags:" ; \ 117 ${MKDIR} ${WRKSRC}/static ; cd ${WRKSRC}/static ; \ 118 ${SETENV} ${CONFIGURE_ENV} ../configure --cc="${CC}" --cflags="${CFLAGS}" \ 119 --prefix="${PREFIX}" -v 2 $${TIMEFLAG} ${ARCHDEFFLAG} \ 120 -Ss f77lib " " -Ss pmake "${MAKE} ${_MAKE_JOBS}" \ 121 -Fa alg "${STATIC_FLAGS} " -b ${POINTER} 122 ${SED} -ne "\|F77FLAGS =|p" ${WRKSRC}/static/Make.inc \ 123 >> ${WRKSRC}/saved_flags 124 125post-configure: 126 @${RM} -r ${WRKSRC}/static 127 128do-build: 129.for opt in shared static 130 @${ECHO_CMD} "Building the LAPACK archives with ${opt} ATLAS flags:" 131 F77FLAGS="`${MAKE} -f ${WRKSRC}/saved_flags -V F77FLAGS` ${EXTRA_FLAGS}" ; \ 132 LW=`${MAKE} -C ${PORTSDIR}/math/lapack -V ${${opt:tu}_LAPACK_WRKSRC}` ; \ 133 ${MAKE} -C ${PORTSDIR}/math/lapack WITH=${opt:tu} clean patch ; \ 134 ${REINPLACE_CMD} -e 's|-O0|-O0 ${EXTRA_FLAGS}|' $${LW}/make.inc ; \ 135 cd $${LW} ; ${SETENV} ${MAKE_ENV:NFFLAGS=*} EXTRAFLAGS="${${opt:tu}_FLAGS} ${PICFLAG} " \ 136 FFLAGS="-pipe $${F77FLAGS}" ${MAKE_CMD} ${_MAKE_JOBS} ${MAKE_ARGS} \ 137 ARCH="${AR}" lapacklib ; \ 138 TIMEFLAG=`${MAKE} -f ${WRKSRC}/saved_flags -V TIMEFLAG` ; \ 139 ${MKDIR} ${WRKSRC}/${opt}/lib ; cd ${WRKSRC}/${opt} ; \ 140 ${MV} $${LW}/liblapack.a liblapack_${opt}.a ; \ 141 ${AR} -dv liblapack_${opt}.a lsame.o xerbla.o csrot.o zdrot.o ; \ 142 ${CP} liblapack_${opt}.a lib/liblapack.a ; \ 143 ${MAKE} -C ${PORTSDIR}/math/lapack clean ; \ 144 ${ECHO_CMD} "Configuring ${opt} ATLAS:" ; \ 145 ${SETENV} ${CONFIGURE_ENV} ../configure --cc="${CC}" --cflags="${CFLAGS}" \ 146 --prefix="${PREFIX}" -v 2 $${TIMEFLAG} ${ARCHDEFFLAG} \ 147 -Ss flapack "${WRKSRC}/${opt}/liblapack_${opt}.a" \ 148 -Ss f77lib " " -Ss pmake "${MAKE_CMD} ${_MAKE_JOBS}" \ 149 -Si lapackref 1 -D c -DATL_FULL_LAPACK \ 150 -Fa alg "${${opt:tu}_FLAGS} " -b ${POINTER} ; \ 151 if [ "x${WITH_ARCHDEF}" != "x" ] ; then \ 152 if [ "x${ARCHDEF}" != "xNONE" ] ; then \ 153 if [ -f ${ARCHDEF} ] ; then \ 154 ${CP} -f ${ARCHDEF} ${WRKSRC}/CONFIG/ARCHS/ ; \ 155 elif [ ! -f ${WRKSRC}/CONFIG/ARCHS/${ARCHDEF} ] ; then \ 156 ${ECHO_CMD} \ 157 "==> ${PKGNAME} : ARCHDEF \"${ARCHDEF}\" does not exist" ; \ 158 exit 1 ; \ 159 fi ; \ 160 ${REINPLACE_CMD} -E -e \ 161 "\|[[:blank:]]*ARCH =|s|=.*|= ${ARCHDEF:T:S/.tgz$//}|" \ 162 ${WRKSRC}/${opt}/Make.inc ; \ 163 fi ; \ 164 fi ; \ 165 ${ECHO_CMD} "Building ${opt} ATLAS:" ; cd ${WRKSRC}/${opt} ; \ 166 ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} all 167.endfor 168 169L1= ${FC} $${F77FLAGS} ${SHARED_FLAGS} ${LDFLAGS} -shared -Wl,-x \ 170 -Wl,--whole-archive -Wl,-soname, 171L2= -Wl,--no-whole-archive -Wl,--as-needed -lpthread 172 173post-build: 174.for opt in shared static 175 @${ECHO_CMD} "Timing ${opt} ATLAS:" 176 (cd ${WRKSRC}/${opt} ; ${SETENV} ${MAKE_ENV} \ 177 ${MAKE_CMD} ${MAKE_ARGS} time ; \ 178 cd ARCHS ; ${SETENV} ${MAKE_ENV} \ 179 ${MAKE_CMD} ${MAKE_ARGS} ArchNew tarfile) 180.endfor 181 @${ECHO_CMD} "Building ATLAS shared libraries:" 182 F77FLAGS="`${MAKE} -f ${WRKSRC}/saved_flags -V F77FLAGS` ${EXTRA_FLAGS}" ; \ 183 cd ${WRKSRC}/shared/lib ; \ 184 ${L1}libatlas.so.2 -o libatlas.so.2 libatlas.a ${L2} ; \ 185 ${L1}libf77blas.so.2 -o libf77blas.so.2 libf77blas.a ${L2} libatlas.so.2 ; \ 186 ${L1}libptf77blas.so.2 -o libptf77blas.so.2 libptf77blas.a ${L2} libatlas.so.2 ; \ 187 ${L1}libcblas.so.2 -o libcblas.so.2 libcblas.a ${L2} libatlas.so.2 ; \ 188 ${L1}libptcblas.so.2 -o libptcblas.so.2 libptcblas.a ${L2} libatlas.so.2 ; \ 189 ${L1}libalapack.so.2 -o libalapack.so.2 liblapack.a ${L2} libatlas.so.2 190 191.if defined(MAINTAINER_MODE) 192STATIC_BLAS= ${LOCALBASE}/lib/libblas.a 193SHARED_BLAS= -L${LOCALBASE}/lib -lblas 194 195test: build 196. for opt in shared static 197 @${ECHO_CMD} "Testing ${opt} ATLAS:" 198 @cd ${WRKSRC}/${opt} ; ${SETENV} ${MAKE_ENV} BLAS="${${opt:tu}_BLAS}" \ 199 ${MAKE_CMD} ${MAKE_ARGS} check ptcheck error_report 200. endfor 201.endif 202 203do-install: 204.for i in libatlas libcblas libf77blas liblapack libptcblas libptf77blas 205 ${INSTALL_DATA} ${WRKSRC}/static/lib/${i}.a \ 206 ${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}.a 207 ${INSTALL_DATA} ${WRKSRC}/shared/lib/${i}.a \ 208 ${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}_pic.a 209 ${INSTALL_LIB} ${WRKSRC}/shared/lib/${i:S|lapack|alapack|}.so.2 \ 210 ${STAGEDIR}${PREFIX}/lib 211 ${LN} -sf ${i:S|lapack|alapack|}.so.2 \ 212 ${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}.so 213.endfor 214 ${INSTALL_DATA} ${WRKSRC}/include/cblas.h ${WRKSRC}/include/clapack.h \ 215 ${STAGEDIR}${PREFIX}/include 216.for opt in shared static 217 @${MKDIR} ${STAGEDIR}${PREFIX}/include/atlas/${opt} 218 ${INSTALL_DATA} ${WRKSRC}/${opt}/include/* \ 219 ${STAGEDIR}${PREFIX}/include/atlas/${opt} 220. if ${PORT_OPTIONS:MDATA} 221 @${MKDIR} ${STAGEDIR}${DATADIR}/${opt} 222 (cd ${WRKSRC}/${opt}/bin; \ 223 ${COPYTREE_SHARE} INSTALL_LOG ${STAGEDIR}${DATADIR}/${opt}) 224 (cd ${WRKSRC}/${opt}/ARCHS; \ 225 ${COPYTREE_SHARE} "*" ${STAGEDIR}${DATADIR}/${opt} \ 226 "! -name Makefile -and ! -name *.tgz") 227 @${FIND} ${STAGEDIR}${DATADIR}/${opt} -type d -empty -delete 228. endif 229.endfor 230.if ${PORT_OPTIONS:MDOCS} 231 @${MKDIR} ${STAGEDIR}${DOCSDIR} 232 ${INSTALL_DATA} ${WRKSRC}/doc/* ${STAGEDIR}${DOCSDIR} 233.endif 234 235post-install: 236.for d in shared static 237. for f in xnegmm xnegmv xnegr1 238 ${STRIP_CMD} ${STAGEDIR}${DATADIR}/${d}/${f} 239. endfor 240.endfor 241 242.include <bsd.port.mk> 243