1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-05 01:55:52 +00:00
freebsd-ports/math/atlas-devel/Makefile
Tijl Coosemans 251357dfa5 Fixup for USES=fortran conversion. These ports require USE_GCC=yes
because they depend on gcc specific optimisation flags.

While here use USES=tar:bzip2.

PR:		ports/187501
Submitted by:	Christoph Moench-Tegeder <cmt@burggraben.net>
2014-03-15 19:01:39 +00:00

266 lines
9.4 KiB
Makefile

# Created by: Nakata Maho <maho@FreeBSD.org>
# $FreeBSD$
PORTNAME= atlas
PORTVERSION= 3.9.11
PORTREVISION= 3
CATEGORIES= math
MASTER_SITES= SF/math-${PORTNAME}/Developer%20%28unstable%29/${PORTVERSION}
PKGNAMESUFFIX= -devel
DISTNAME= ${PORTNAME}${PORTVERSION}
MAINTAINER= bf@FreeBSD.org
COMMENT= Development version of math/atlas
IGNORE = : dependent ports have been altered to link with math/atlas -- please\
use that port instead of math/atlas-devel, while the latter is being revised
MANUAL_PACKAGE_BUILD= Optimizes for the local machine.
USES= fortran gmake tar:bzip2
USE_GCC= yes
WRKSRC= ${WRKDIR}/ATLAS
USE_LDCONFIG= yes
CONFLICTS= atlas-[0-9]* cblas-[0-9]*
NO_STAGE= yes
.include <bsd.port.pre.mk>
NOT_FOR_ARCHS= alpha
CCOMPILER= ${CC}
LIB_DEPENDS+= blas.2:${PORTSDIR}/math/blas
LIB_DEPENDS+= lapack.4:${PORTSDIR}/math/lapack
.if ${ARCH} == "sparc64"
PICFLAG?= -fPIC
.else
PICFLAG?= -fpic
.endif
.if ${ARCH} == "i386"
POINTER= 32
.endif
.if ${ARCH} == "amd64"
POINTER= 64
.endif
.if ${ARCH} == "sparc64"
POINTER= 64
.endif
.if (${OSVERSION} < 700000) && defined(WITH_GCC42KERNEL)
BUILD_DEPENDS+= gcc42:${PORTSDIR}/lang/gcc42
KERNELFLAG= -Ss kern gcc42
.else
KERNELFLAG= ""
.endif
.if defined(WITH_WALL_TIMER)
. if defined(MHZ) && ( ${ARCH} == "i386" || ${ARCH} == "amd64" )
TIMEFLAG= -D c -DPentiumCPS=${MHZ}
. else
TIMEFLAG= -D c -DWALL
. endif
.else
TIMEFLAG= ""
.endif
# only used for lapack sub-project
.if defined(WITH_OPTIMIZED_FLAGS)
.if defined(CPUTYPE)
FFLAGS+= -march=${CPUTYPE} -pipe -O2 -ffast-math
.else
FFLAGS+= -pipe -O2 -ffast-math
.endif
.endif
.if defined(WITH_STATICLIB)
PLIST_SUB+= WITH_STATICLIB=""
.else
PLIST_SUB+= WITH_STATICLIB="@comment "
.endif
post-extract:
@${ECHO_MSG} 'This port engages in a long, computationally-demanding tuning process.'
@${ECHO_MSG} 'Builds can take a day or more on older hardware, and temporarily occupy'
@${ECHO_MSG} 'several hundred megabytes of disk space. You are advised to disable'
@${ECHO_MSG} 'all forms of power management or CPU throttling (APM, ACPI, Intel'
@${ECHO_MSG} 'SpeedStep, AMD PowerNow, AMD Cool and Quiet, p4tcc, powerd, etc.)'
@${ECHO_MSG} 'that may change the disk I/O or CPU behavior during the build, and'
@${ECHO_MSG} 'to set operating parameters to static values at which you ultimately'
@${ECHO_MSG} 'intend to use the software. You should also avoid placing heavy loads'
@${ECHO_MSG} 'on the system during the build, and temporarily disable any automatons'
@${ECHO_MSG} 'that may do so. If you fail to follow these guidelines, you may prolong'
@${ECHO_MSG} 'the build, perhaps indefinitely, and you may obtain libraries with'
@${ECHO_MSG} 'sub-optimal performance.'
@${ECHO_MSG}
@${ECHO_MSG} 'Occasionally the autoconfiguration may fail for certain platforms, and'
@${ECHO_MSG} 'you may have to override the architecture, compiler flags, assembly'
@${ECHO_MSG} 'language dialect, or pointer bit-width by issuing additional configure'
@${ECHO_MSG} 'arguments. Consult the FAQ, installation guide, and errata page at'
@${ECHO_MSG} 'the project website for help if this is necessary, and notify the'
@${ECHO_MSG} 'port maintainer.'
@${ECHO_MSG}
@${ECHO_MSG} "This port purposely ignores the CC and CFLAGS settings"
@${ECHO_MSG} "Program and compiler flags are fine-tuned to the gcc 4.2.x"
@${ECHO_MSG} "compiler, although other gcc versions may be used; gcc 4.1.x"
@${ECHO_MSG} "is NOT recommended"
@${ECHO_MSG}
.if !defined(WITH_STATICLIB)
@${ECHO_MSG} "You can build static libraries with"
@${ECHO_MSG} "make -DWITH_STATICLIB"
@${ECHO_MSG}
.endif
.if !defined(WITH_WALL_TIMER)
@${ECHO_MSG} "If your machine will be solely dedicated to"
@${ECHO_MSG} "building atlas with gcc during the lengthy optimization"
@${ECHO_MSG} "process, and not subjected to other loads, you"
@${ECHO_MSG} "may enable the more accurate wall timer (instead of"
@${ECHO_MSG} "the default CPU-time timer) with make -DWITH_WALL_TIMER"
@${ECHO_MSG} "If, in addition, you are on i386 or amd64, you may set MHZ"
@${ECHO_MSG} "to your CPU clock frequency in MHz (rounded to the nearest"
@${ECHO_MSG} "integer value) in the build environment for cycle-to-time"
@${ECHO_MSG} "conversion"
@${ECHO_MSG}
.endif
.if (${OSVERSION} < 700000)
.if !defined(WITH_GCC42KERNEL)
@${ECHO_MSG} "If you don't want to make gcc 4.2.x your default compiler (CC),"
@${ECHO_MSG} "but you want to have ATLAS use it to compile all the kernel"
@${ECHO_MSG} "routines (this usually results in superior performance, and a"
@${ECHO_MSG} "slightly faster build), while compiling interface routines and"
@${ECHO_MSG} "doing any linking with gcc 3.x, make a hybrid build with"
@${ECHO_MSG} "make -DWITH_GCC42KERNEL"
@${ECHO_MSG}
.endif
.endif
pre-configure:
@${REINPLACE_CMD} -e "s|%%CC%%|${CCOMPILER}|g" \
-e "s|%%FC%%|${FC}|g" ${WRKSRC}/CONFIG/src/atlcomp.txt
@${REINPLACE_CMD} -e "s|%%PTHREAD_LIBS%%|${PTHREAD_LIBS}|g" \
-e "s|%%PTHREAD_CFLAGS%%|${PTHREAD_CFLAGS}|g" \
-e "s|%%LOCALBASE%%|${LOCALBASE}|g" \
${WRKSRC}/CONFIG/src/SpewMakeInc.c
do-configure:
#non-threaded
#dummy f77lib, it is not used.
${MKDIR} ${WRKSRC}/NON_THREADED ; cd ${WRKSRC}/NON_THREADED ; \
../configure -v 2 -t 0 ${TIMEFLAG} -b ${POINTER} -Si cputhrchk 0 ${KERNELFLAG} -Ss f77lib " "
${MKDIR} ${WRKSRC}/NON_THREADED_PIC ; cd ${WRKSRC}/NON_THREADED_PIC ; \
../configure -v 2 -t 0 -b ${POINTER} -Fa alg '${PICFLAG} -DPIC' ${TIMEFLAG} -Si cputhrchk 0 ${KERNELFLAG} -Ss f77lib " "
#threaded
#dummy f77lib, it is not used.
cd ${WRKSRC}; ${PATCH} < ${FILESDIR}/thread-patch
${MKDIR} ${WRKSRC}/THREADED ; cd ${WRKSRC}/THREADED ; \
../configure -v 2 -b ${POINTER} -Fa alg '${PTHREAD_CFLAGS} ' ${TIMEFLAG} -Si cputhrchk 0 ${KERNELFLAG} -Ss f77lib " "
${MKDIR} ${WRKSRC}/THREADED_PIC ; cd ${WRKSRC}/THREADED_PIC ; \
../configure -v 2 -b ${POINTER} -Fa alg '${PTHREAD_CFLAGS} ${PICFLAG} -DPIC' ${TIMEFLAG} -Si cputhrchk 0 ${KERNELFLAG} -Ss f77lib " "
do-build:
# make lapack
.if ! exists(${WRKDIR}/lapack/Makefile)
@${ECHO_MSG} "===> Extracting lapack sub project"
@${MKDIR} ${WRKDIR}/lapack
@${CP} -r ${PORTSDIR}/math/lapack/files ${WRKDIR}/lapack
@${CP} ${PORTSDIR}/math/lapack/Makefile ${WRKDIR}/lapack
@${CP} ${PORTSDIR}/math/lapack/distinfo ${WRKDIR}/lapack
@${CP} ${PORTSDIR}/math/lapack/pkg-descr ${WRKDIR}/lapack
@cd ${WRKDIR}/lapack ; ${MAKE} "FFLAGS=${FFLAGS}" FC="${FC}" build WRKDIRPREFIX=""
.endif
.if defined(WITH_STATICLIB)
(cd ${WRKSRC}/NON_THREADED ; ${MAKE})
(cd ${WRKSRC}/THREADED ; ${MAKE})
.endif
(cd ${WRKSRC}/NON_THREADED_PIC ; ${MAKE})
(cd ${WRKSRC}/THREADED_PIC ; ${MAKE})
test:
@${MAKE} do-test
ATLAS_LIBS1=libalapack libatlas libcblas libf77blas #libtstatlas
ATLAS_LIBS2=libptcblas libptf77blas
LAPACKWRKSRC=`cd ${WRKDIR}/lapack; ${MAKE} -V WRKSRC WRKDIRPREFIX=""`
post-build:
.if defined(WITH_STATICLIB)
# make atlas-enhanced lapack (static ver)
(cd ${WRKSRC}; ${MKDIR} tmp1 ; \
${CP} ${LAPACKWRKSRC}/liblapack.a tmp1 ;\
cd tmp1 ;\
ar x liblapack.a ;\
ar x ../NON_THREADED/lib/liblapack.a ;\
ar r ../NON_THREADED/lib/libalapack.a *.o ;\
ranlib ../NON_THREADED/lib/libalapack.a )
# make atlas-enhanced lapack (static and thread-safe ver)
(cd ${WRKSRC}; ${MKDIR} tmp2 ; \
${CP} ${LAPACKWRKSRC}/liblapack.a tmp2 ;\
cd tmp2 ;\
ar x liblapack.a ;\
ar x ../THREADED/lib/liblapack.a ;\
ar r ../THREADED/lib/libalapack.a *.o ;\
ranlib ../THREADED/lib/libalapack.a )
.endif
# make atlas-enhanced lapack (shared ver)
( cd ${WRKSRC}; ${MKDIR} tmp3 ;\
${CP} ${LAPACKWRKSRC}_shared/liblapack.a tmp3 ;\
cd tmp3 ;\
ar x liblapack.a ;\
ar x ../NON_THREADED_PIC/lib/liblapack.a ;\
ar r ../NON_THREADED_PIC/lib/libalapack.a *.o ;\
ranlib ../NON_THREADED_PIC/lib/libalapack.a )
# make atlas-enhanced lapack (shared and thread-safe ver)
( cd ${WRKSRC}; ${MKDIR} tmp4 ;\
${CP} ${LAPACKWRKSRC}_shared/liblapack.a tmp4 ;\
cd tmp4 ;\
ar x liblapack.a ;\
ar x ../THREADED_PIC/lib/liblapack.a ;\
ar r ../THREADED_PIC/lib/libalapack.a *.o ;\
ranlib ../THREADED_PIC/lib/libalapack.a )
# make atlas shared library
.for i in ${ATLAS_LIBS1}
( cd ${WRKSRC}/NON_THREADED_PIC/lib ; \
ld -Bshareable -o ${i}.so.2 -x -soname ${i}.so.2 --whole-archive ${i}.a )
.endfor
# make atlas shared (thread-safe) library
.for i in ${ATLAS_LIBS1}
( cd ${WRKSRC}/THREADED_PIC/lib ; \
ld -Bshareable -o ${i}_r.so.2 -x -soname ${i}_r.so.2 --whole-archive ${i}.a )
.endfor
.for i in ${ATLAS_LIBS2}
( cd ${WRKSRC}/THREADED_PIC/lib ; \
ld -Bshareable -o ${i}.so.2 -x -soname ${i}.so.2 --whole-archive ${i}.a )
.endfor
do-install:
.for i in ${ATLAS_LIBS1}
.if defined(WITH_STATICLIB)
@${INSTALL_DATA} ${WRKSRC}/NON_THREADED/lib/${i}.a ${PREFIX}/lib
.endif
@${INSTALL_DATA} ${WRKSRC}/NON_THREADED_PIC/lib/${i}.so.2 ${PREFIX}/lib
@${LN} -sf ${i}.so.2 ${PREFIX}/lib/${i}.so
.endfor
.for i in ${ATLAS_LIBS1}
.if defined(WITH_STATICLIB)
@${INSTALL_DATA} ${WRKSRC}/THREADED/lib/${i}.a ${PREFIX}/lib/${i}_r.a
.endif
@${INSTALL_DATA} ${WRKSRC}/THREADED_PIC/lib/${i}_r.so.2 ${PREFIX}/lib/${i}_r.so.2
@${LN} -sf ${i}_r.so.2 ${PREFIX}/lib/${i}_r.so
.endfor
.for i in ${ATLAS_LIBS2}
.if defined(WITH_STATICLIB)
@${INSTALL_DATA} ${WRKSRC}/THREADED/lib/${i}.a ${PREFIX}/lib
.endif
@${INSTALL_DATA} ${WRKSRC}/THREADED_PIC/lib/${i}.so.2 ${PREFIX}/lib
@${LN} -sf ${i}.so.2 ${PREFIX}/lib/${i}.so
.endfor
@${INSTALL_DATA} ${WRKSRC}/include/cblas.h ${PREFIX}/include
@${INSTALL_DATA} ${WRKSRC}/include/clapack.h ${PREFIX}/include
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR}
${INSTALL_DATA} ${WRKSRC}/doc/* ${DOCSDIR}
.endif
.include <${FILESDIR}/Makefile.test>
.include <bsd.port.post.mk>