624b8729fc
Same as BSDMAKE variable. It is needed by some ports. Some ports needed fixes: - devel/rcs57: Regenerate configure with newer autoconf so it can deal with MAKE set to an absolute path. While here fix issues with (un)escaping double quotes. The warnings about this were in WRKSRC/src/conf.err. - lang/gnu-cobol: Patch configure.ac so the MAKE environment variable can contain an absolute path, and define MAKE before it is used in AM_INIT_AUTOMAKE. Remove post-patch patching of configure. It appears to have been fixed upstream. - math/unuran: Remove post-patch, fixed upstream. - net-mgmt/kismet: Fix post-patch. PR: 283534 Exp-run by: antoine
244 lines
8.1 KiB
Makefile
244 lines
8.1 KiB
Makefile
PORTNAME= atlas
|
|
PORTVERSION= 3.10.3
|
|
PORTREVISION= 2
|
|
PORTEPOCH= 1
|
|
CATEGORIES= math
|
|
MASTER_SITES= SF/math-${PORTNAME}/Stable/${PORTVERSION}
|
|
PKGNAMESUFFIX= -math
|
|
DISTNAME= ${PORTNAME}${PORTVERSION}
|
|
|
|
MAINTAINER= ports@FreeBSD.org
|
|
COMMENT= Automatically Tuned Linear Algebra Software (ATLAS)
|
|
WWW= https://math-atlas.sourceforge.net/
|
|
|
|
LICENSE= BSD3CLAUSE
|
|
|
|
BUILD_DEPENDS= ${NONEXISTENT}:math/lapack:checksum
|
|
|
|
USES= fortran gmake tar:bzip2
|
|
USE_GCC= yes
|
|
|
|
CONFLICTS= cblas
|
|
CONFLICTS_INSTALL= openblas # $PREFIX/include/cblas.h
|
|
MANUAL_PACKAGE_BUILD= Optimizes for the local machine.
|
|
|
|
OPTIONS_DEFINE= DOCS DATA ARCHDEF TSC WALL_TIMER
|
|
OPTIONS_DEFAULT= DATA
|
|
ARCHDEF_DESC= Use a specified architectural default
|
|
DATA_DESC= Install tuning data and logs from the build
|
|
TSC_DESC= If WALL_TIMER is enabled, use the TSC
|
|
WALL_TIMER_DESC= Use less robust timing with higher resolution
|
|
|
|
PORTSCOUT= limitw:1,even
|
|
WRKSRC= ${WRKDIR}/ATLAS
|
|
|
|
.include <bsd.port.options.mk>
|
|
|
|
#Increase ATLAS_MAXMALLOC if the atlas threaded libraries perform poorly on large problems:
|
|
# http://math-atlas.sourceforge.net/errata.html#MaxMalloc
|
|
ATLAS_MAXMALLOC?= 67108864
|
|
|
|
.if !empty(ARCH:M*64*)
|
|
POINTER?= 64
|
|
.else
|
|
POINTER?= 32
|
|
.endif
|
|
|
|
.if defined(MAINTAINER_MODE)
|
|
LIB_DEPENDS+= libblas.so:math/blas
|
|
.endif
|
|
|
|
.if ${PORT_OPTIONS:MDATA}
|
|
PORTDATA= *
|
|
.endif
|
|
PORTDOCS= *
|
|
|
|
.if ${PORT_OPTIONS:MARCHDEF}
|
|
. if defined(ARCHDEF)
|
|
. if ${ARCHDEF} == "NONE"
|
|
ARCHDEFFLAG= -Si archdef 0
|
|
. endif
|
|
. else
|
|
IGNORE= you have set WITH_ARCHDEF, but have not defined ARCHDEF
|
|
. endif
|
|
.endif
|
|
|
|
USE_LDCONFIG= yes
|
|
|
|
EXTRA_FLAGS?= ${PICFLAG} -Wl,-rpath=${_GCC_RUNTIME}
|
|
SHARED_FLAGS= ${PICFLAG} -DPIC
|
|
SHARED_LAPACK_WRKSRC= WRKSRC
|
|
STATIC_LAPACK_WRKSRC= WRKSRC
|
|
PICFLAG?= -fPIC
|
|
CFLAGS+= ${PICFLAG}
|
|
CONFIGURE_ENV+= PATH="${WRKDIR}/.bin:${PATH}"
|
|
MAKE_ENV+= MAKE=${GMAKE} PATH="${WRKDIR}/.bin:${PATH}"
|
|
BINARY_ALIAS= make=${GMAKE} gcc=${CC} gfortran=${FC} f77=${FC}
|
|
|
|
pre-everything::
|
|
@${CAT} ${FILESDIR}/tuning-message
|
|
|
|
pre-configure:
|
|
${REINPLACE_CMD} -e 's|$$(ARCH)|$$(ATLAS_ARCH)|g' \
|
|
${WRKSRC}/Make.top \
|
|
${WRKSRC}/makes/Make.bin \
|
|
${WRKSRC}/makes/Make.lib \
|
|
${WRKSRC}/makes/Make.sysinfo \
|
|
${WRKSRC}/CONFIG/src/Makefile \
|
|
${WRKSRC}/CONFIG/ARCHS/Makefile
|
|
${REINPLACE_CMD} -e "\|OS=ALL|{N; \
|
|
s|-mavx|-msse3|;s|'| ${EXTRA_FLAGS}'|4;}" \
|
|
${WRKSRC}/CONFIG/src/atlcomp.txt
|
|
${REINPLACE_CMD} -E -e \
|
|
"\|(#define ATL_MaxMalloc[[:blank:]]+)([[:digit:]]+)|s||\1${ATLAS_MAXMALLOC}|" \
|
|
${WRKSRC}/include/atlas_lvl3.h
|
|
${REINPLACE_CMD} -e 's|%%WRKBIN%%|${WRKDIR}/.bin|' \
|
|
${WRKSRC}/CONFIG/src/probe_comp.c
|
|
|
|
do-configure:
|
|
echo "PATH=${PATH} *****************************************"
|
|
if [ ${PORT_OPTIONS:MWALL_TIMER} ] ; then \
|
|
TIMEFLAG= ; \
|
|
if [ \( ${ARCH} = "i386" -o ${ARCH} = "amd64" \) -a ${PORT_OPTIONS:MTSC} ] ; then \
|
|
freq=`${SYSCTL} -ni machdep.tsc_freq` ; \
|
|
if [ "x$${freq}" != "x" ] ; then \
|
|
if [ $${freq} -gt 1000000 ] ; then \
|
|
MHZ=$$(($${freq}/1000000)) ; \
|
|
TIMEFLAG="-D c -DPentiumCPS=$${MHZ}" ; \
|
|
fi ; \
|
|
fi ; \
|
|
fi ; \
|
|
if [ "x$${TIMEFLAG}" = "x" ] ; then \
|
|
TIMEFLAG="-D c -DWALL" ; \
|
|
fi ; \
|
|
fi ; \
|
|
${ECHO_CMD} "TIMEFLAG = $${TIMEFLAG}" \
|
|
> ${WRKSRC}/saved_flags ; \
|
|
${ECHO_CMD} "Dummy configuration of ATLAS to obtain compiler flags:" ; \
|
|
${MKDIR} ${WRKSRC}/static ; cd ${WRKSRC}/static ; \
|
|
${SETENV} ${CONFIGURE_ENV} ../configure --cc="${CC}" --cflags="${CFLAGS}" \
|
|
--prefix="${PREFIX}" -v 2 $${TIMEFLAG} ${ARCHDEFFLAG} \
|
|
-Ss f77lib " " -Ss pmake "${MAKE} ${_MAKE_JOBS}" \
|
|
-Fa alg "${STATIC_FLAGS} " -b ${POINTER}
|
|
${SED} -ne "\|F77FLAGS =|p" ${WRKSRC}/static/Make.inc \
|
|
>> ${WRKSRC}/saved_flags
|
|
|
|
post-configure:
|
|
@${RM} -r ${WRKSRC}/static
|
|
|
|
do-build:
|
|
.for opt in shared static
|
|
@${ECHO_CMD} "Building the LAPACK archives with ${opt} ATLAS flags:"
|
|
F77FLAGS="`${MAKE} -f ${WRKSRC}/saved_flags -V F77FLAGS` ${EXTRA_FLAGS}" ; \
|
|
LW=`${MAKE} -C ${PORTSDIR}/math/lapack -V ${${opt:tu}_LAPACK_WRKSRC}` ; \
|
|
${MAKE} -C ${PORTSDIR}/math/lapack WITH=${opt:tu} clean patch ; \
|
|
${REINPLACE_CMD} -e 's|-O0|-O0 ${EXTRA_FLAGS}|' $${LW}/make.inc ; \
|
|
cd $${LW} ; ${SETENV} ${MAKE_ENV:NFFLAGS=*} EXTRAFLAGS="${${opt:tu}_FLAGS} ${PICFLAG} " \
|
|
FFLAGS="-pipe $${F77FLAGS}" ${MAKE_CMD} ${_MAKE_JOBS} ${MAKE_ARGS} \
|
|
ARCH="${AR}" lapacklib ; \
|
|
TIMEFLAG=`${MAKE} -f ${WRKSRC}/saved_flags -V TIMEFLAG` ; \
|
|
${MKDIR} ${WRKSRC}/${opt}/lib ; cd ${WRKSRC}/${opt} ; \
|
|
${MV} $${LW}/liblapack.a liblapack_${opt}.a ; \
|
|
${AR} -dv liblapack_${opt}.a lsame.o xerbla.o csrot.o zdrot.o ; \
|
|
${CP} liblapack_${opt}.a lib/liblapack.a ; \
|
|
${MAKE} -C ${PORTSDIR}/math/lapack clean ; \
|
|
${ECHO_CMD} "Configuring ${opt} ATLAS:" ; \
|
|
${SETENV} ${CONFIGURE_ENV} ../configure --cc="${CC}" --cflags="${CFLAGS}" \
|
|
--prefix="${PREFIX}" -v 2 $${TIMEFLAG} ${ARCHDEFFLAG} \
|
|
-Ss flapack "${WRKSRC}/${opt}/liblapack_${opt}.a" \
|
|
-Ss f77lib " " -Ss pmake "${MAKE_CMD} ${_MAKE_JOBS}" \
|
|
-Si lapackref 1 -D c -DATL_FULL_LAPACK \
|
|
-Fa alg "${${opt:tu}_FLAGS} " -b ${POINTER} ; \
|
|
if [ "x${WITH_ARCHDEF}" != "x" ] ; then \
|
|
if [ "x${ARCHDEF}" != "xNONE" ] ; then \
|
|
if [ -f ${ARCHDEF} ] ; then \
|
|
${CP} -f ${ARCHDEF} ${WRKSRC}/CONFIG/ARCHS/ ; \
|
|
elif [ ! -f ${WRKSRC}/CONFIG/ARCHS/${ARCHDEF} ] ; then \
|
|
${ECHO_CMD} \
|
|
"==> ${PKGNAME} : ARCHDEF \"${ARCHDEF}\" does not exist" ; \
|
|
exit 1 ; \
|
|
fi ; \
|
|
${REINPLACE_CMD} -E -e \
|
|
"\|[[:blank:]]*ARCH =|s|=.*|= ${ARCHDEF:T:S/.tgz$//}|" \
|
|
${WRKSRC}/${opt}/Make.inc ; \
|
|
fi ; \
|
|
fi ; \
|
|
${ECHO_CMD} "Building ${opt} ATLAS:" ; cd ${WRKSRC}/${opt} ; \
|
|
${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} all
|
|
.endfor
|
|
|
|
L1= ${FC} $${F77FLAGS} ${SHARED_FLAGS} ${LDFLAGS} -shared -Wl,-x \
|
|
-Wl,--whole-archive -Wl,-soname,
|
|
L2= -Wl,--no-whole-archive -Wl,--as-needed -lpthread
|
|
|
|
post-build:
|
|
.for opt in shared static
|
|
@${ECHO_CMD} "Timing ${opt} ATLAS:"
|
|
(cd ${WRKSRC}/${opt} ; ${SETENV} ${MAKE_ENV} \
|
|
${MAKE_CMD} ${MAKE_ARGS} time ; \
|
|
cd ARCHS ; ${SETENV} ${MAKE_ENV} \
|
|
${MAKE_CMD} ${MAKE_ARGS} ArchNew tarfile)
|
|
.endfor
|
|
@${ECHO_CMD} "Building ATLAS shared libraries:"
|
|
F77FLAGS="`${MAKE} -f ${WRKSRC}/saved_flags -V F77FLAGS` ${EXTRA_FLAGS}" ; \
|
|
cd ${WRKSRC}/shared/lib ; \
|
|
${L1}libatlas.so.2 -o libatlas.so.2 libatlas.a ${L2} ; \
|
|
${L1}libf77blas.so.2 -o libf77blas.so.2 libf77blas.a ${L2} libatlas.so.2 ; \
|
|
${L1}libptf77blas.so.2 -o libptf77blas.so.2 libptf77blas.a ${L2} libatlas.so.2 ; \
|
|
${L1}libcblas.so.2 -o libcblas.so.2 libcblas.a ${L2} libatlas.so.2 ; \
|
|
${L1}libptcblas.so.2 -o libptcblas.so.2 libptcblas.a ${L2} libatlas.so.2 ; \
|
|
${L1}libalapack.so.2 -o libalapack.so.2 liblapack.a ${L2} libatlas.so.2
|
|
|
|
.if defined(MAINTAINER_MODE)
|
|
STATIC_BLAS= ${LOCALBASE}/lib/libblas.a
|
|
SHARED_BLAS= -L${LOCALBASE}/lib -lblas
|
|
|
|
test: build
|
|
. for opt in shared static
|
|
@${ECHO_CMD} "Testing ${opt} ATLAS:"
|
|
@cd ${WRKSRC}/${opt} ; ${SETENV} ${MAKE_ENV} BLAS="${${opt:tu}_BLAS}" \
|
|
${MAKE_CMD} ${MAKE_ARGS} check ptcheck error_report
|
|
. endfor
|
|
.endif
|
|
|
|
do-install:
|
|
.for i in libatlas libcblas libf77blas liblapack libptcblas libptf77blas
|
|
${INSTALL_DATA} ${WRKSRC}/static/lib/${i}.a \
|
|
${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}.a
|
|
${INSTALL_DATA} ${WRKSRC}/shared/lib/${i}.a \
|
|
${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}_pic.a
|
|
${INSTALL_LIB} ${WRKSRC}/shared/lib/${i:S|lapack|alapack|}.so.2 \
|
|
${STAGEDIR}${PREFIX}/lib
|
|
${LN} -sf ${i:S|lapack|alapack|}.so.2 \
|
|
${STAGEDIR}${PREFIX}/lib/${i:S|lapack|alapack|}.so
|
|
.endfor
|
|
${INSTALL_DATA} ${WRKSRC}/include/cblas.h ${WRKSRC}/include/clapack.h \
|
|
${STAGEDIR}${PREFIX}/include
|
|
.for opt in shared static
|
|
@${MKDIR} ${STAGEDIR}${PREFIX}/include/atlas/${opt}
|
|
${INSTALL_DATA} ${WRKSRC}/${opt}/include/* \
|
|
${STAGEDIR}${PREFIX}/include/atlas/${opt}
|
|
. if ${PORT_OPTIONS:MDATA}
|
|
@${MKDIR} ${STAGEDIR}${DATADIR}/${opt}
|
|
(cd ${WRKSRC}/${opt}/bin; \
|
|
${COPYTREE_SHARE} INSTALL_LOG ${STAGEDIR}${DATADIR}/${opt})
|
|
(cd ${WRKSRC}/${opt}/ARCHS; \
|
|
${COPYTREE_SHARE} "*" ${STAGEDIR}${DATADIR}/${opt} \
|
|
"! -name Makefile -and ! -name *.tgz")
|
|
@${FIND} ${STAGEDIR}${DATADIR}/${opt} -type d -empty -delete
|
|
. endif
|
|
.endfor
|
|
.if ${PORT_OPTIONS:MDOCS}
|
|
@${MKDIR} ${STAGEDIR}${DOCSDIR}
|
|
${INSTALL_DATA} ${WRKSRC}/doc/* ${STAGEDIR}${DOCSDIR}
|
|
.endif
|
|
|
|
post-install:
|
|
.for d in shared static
|
|
. for f in xnegmm xnegmv xnegr1
|
|
${STRIP_CMD} ${STAGEDIR}${DATADIR}/${d}/${f}
|
|
. endfor
|
|
.endfor
|
|
|
|
.include <bsd.port.mk>
|