aboutsummaryrefslogblamecommitdiff
path: root/math/atlas-devel/Makefile
blob: 29ab29a710b0215dced946af7ba5792d239ffe26 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                            
           
 
                     
                      
                 
                    
                                                                             
                      

                                         
                                 
                                                 
 
                                                                                      
                                                                            
                                                        
 

                                       
                               
                   
                                         
 
                   

                          
                     
 
                     

                                                    




                        

      



























                                                                 
                                 
                    
                                                       
     
                                     
      
      
                           
                                 
     
                                          
      
 
             
























                                                                                               




                                                          






















                                                                                      
 
              
                                                        

                                                                       
                                                                         
                                                               

                                                  
             
             
                              
                                                                       
                                                                                                             
                                                                               
                                                                                                                                        
         
                              

                                                               
                                                                                                                                     
                                                                       
                                                                                                                                                     
 
         




                                                                




                                                                                          
                           

                                             
      

                                                 

                        
 
                                                                
                                   
                                                                     
 
           
                           
                                         
                                        
                                                         

                                   


                                                            
                                                          
                                        
                                                         
                          
                                   


                                                        
      
                                         
                                        
                                                                
                          
                                   


                                                                
                                                         
                                        
                                                                
                          
                                   


                                                            

                           
                        
                                               
                                                                                         

       
                                         
                        
                                           
                                                                                             
       

                                           
                                                                                         
       
           
                        
                           
                                                                              
      

                                                                                  
       
                        
                           
                                                                                   
      

                                                                                            
       



                                                                          

                                                                              

       

                                                                      




                                                  
                                    
                           
# 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=	ports@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+=	libblas.so:${PORTSDIR}/math/blas
LIB_DEPENDS+=	liblapack.so:${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>