aboutsummaryrefslogtreecommitdiff
path: root/math/libflame/Makefile
diff options
context:
space:
mode:
authorBrendan Fabeny <bf@FreeBSD.org>2012-01-05 02:35:10 +0000
committerBrendan Fabeny <bf@FreeBSD.org>2012-01-05 02:35:10 +0000
commit7ec767eacfcbce57510a9468b05bf43b2b2913fb (patch)
treef9069244f73ebe1650b600ba4e0f6b30c27c5866 /math/libflame/Makefile
parentec129af2cb87f7e48afb741faea20d72cc75d8d8 (diff)
Notes
Diffstat (limited to 'math/libflame/Makefile')
-rw-r--r--math/libflame/Makefile344
1 files changed, 344 insertions, 0 deletions
diff --git a/math/libflame/Makefile b/math/libflame/Makefile
new file mode 100644
index 000000000000..c868c0936546
--- /dev/null
+++ b/math/libflame/Makefile
@@ -0,0 +1,344 @@
+# ex:ts=8
+# Ports collection makefile for: libflame
+# Date created: 1 Jan 2012
+# Whom: bf@FreeBSD.org
+#
+# $FreeBSD$
+#
+
+PORTNAME= libflame
+DISTVERSION= r7421
+CATEGORIES= math
+MASTER_SITES= http://www.cs.utexas.edu/users/%SUBDIR%/:1,2 LOCAL/bf:3
+MASTER_SITE_SUBDIR= flame/snapshots/:1 field/docs/:2
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:1,3
+.if !defined(NOPORTDOCS) || make(makesum)
+DISTFILES+= libflame.pdf:2,3
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
+.endif
+
+MAINTAINER= bf@FreeBSD.org
+COMMENT= FLAME dense linear algebra library
+
+LICENSE= LGPL21
+
+BUILD_DEPENDS= bash:${PORTSDIR}/shells/bash
+
+GNU_CONFIGURE= yes
+USE_CSTD= c99
+USE_GMAKE= yes
+
+CONFIGURE_ARGS = --enable-dynamic-build --enable-static-build
+
+IGNOREFILES= libflame.pdf
+
+OPTIONS= BLAS3_CNTL "Set Level-3 BLAS variant and blocksize" on \
+ BUILTIN_BLAS "Build the (suboptimal) internal BLAS" off \
+ CBLAS "Build an interface to an external C BLAS" off \
+ EXTERNAL_LAPACK "Build an interface to an external LAPACK" off \
+ GOTOBLAS "Build a full GotoBLAS interface" off \
+ LAPACK2FLAME "Build a LAPACK compatibility layer" on \
+ LAPACK_SUBPROBLEMS "Use an external LAPACK for subproblems" off \
+ OPENMP "Use multithreading via OpenMP" off \
+ SHARED "Build a shared library and PIC archive" on \
+ STATIC "Build a non-PIC archive" off \
+ SUPERMATRIX "Task scheduling and parallel execution" on \
+ THREADS "Use multithreading via pthreads" on
+
+.include <bsd.port.pre.mk>
+
+.if defined(WITH_BLAS3_CNTL)
+CONFIGURE_ARGS+= --enable-blas3-front-end-cntl-trees
+.else
+CONFIGURE_ARGS+= --disable-blas3-front-end-cntl-trees
+.endif
+
+.if defined(WITH_BUILTIN_BLAS)
+IGNORE = : WITH_BUILTIN_BLAS is an experimental option, for testing purposes only
+.if (defined(WITH_CBLAS) || defined(WITH_GOTOBLAS))
+IGNORE = : WITH_BUILTIN_BLAS is incompatible with WITH_CBLAS and WITH_GOTOBLAS
+.endif
+CONFIGURE_ARGS+= --enable-builtin-blas
+.else
+CONFIGURE_ARGS+= --disable-builtin-blas
+.endif
+
+.if defined(WITH_CBLAS)
+IGNORE = : WITH_CBLAS yields an incomplete library, and is for testing purposes only
+.if defined(WITH_GOTOBLAS)
+IGNORE = : WITH_CBLAS is incompatible with WITH_GOTOBLAS
+.endif
+CONFIGURE_ARGS+= --enable-cblas-interfaces
+.else
+CONFIGURE_ARGS+= --disable-cblas-interfaces
+.endif
+
+.if defined(WITH_EXTERNAL_LAPACK)
+CONFIGURE_ARGS+= --enable-external-lapack-interfaces
+.else
+CONFIGURE_ARGS+= --disable-external-lapack-interfaces
+.endif
+
+.if defined(WITH_GOTOBLAS)
+CONFIGURE_ARGS+= --enable-goto-interfaces
+WITH_BLAS= gotoblas
+.else
+CONFIGURE_ARGS+= --disable-goto-interfaces
+.for b in M K N
+.if defined(${b}_BLOCKSIZE)
+CONFIGURE_ARGS+= --enable-default-${b:L}-blocksize=${${b}_BLOCKSIZE}
+.endif
+.endfor
+.endif
+
+.if defined(WITH_LAPACK2FLAME)
+.if defined(WITH_LAPACK_SUBPROBLEMS)
+IGNORE = : WITH_LAPACK2FLAME is incompatible with WITH_LAPACK_SUBPROBLEMS
+.endif
+CONFIGURE_ARGS+= --enable-lapack2flame
+.else
+CONFIGURE_ARGS+= --disable-lapack2flame
+.endif
+
+.if defined(WITH_LAPACK_SUBPROBLEMS)
+.if !defined(WITH_EXTERNAL_LAPACK)
+IGNORE = : WITH_LAPACK_SUBPROBLEMS requires WITH_EXTERNAL_LAPACK
+.endif
+CONFIGURE_ARGS+= --enable-external-lapack-for-subproblems
+.else
+CONFIGURE_ARGS+= --disable-external-lapack-for-subproblems
+.endif
+
+.if defined(WITH_EXTERNAL_LAPACK) || !defined(WITH_BUILTIN_BLAS)
+.if defined(WITH_CBLAS)
+.if exists(${LOCALBASE}/lib/libatlas.so)
+WITH_BLAS?= atlas_c
+.else
+WITH_BLAS?= reference_c
+.endif
+.if !(${WITH_BLAS} == "atlas_c" || ${WITH_BLAS} == "reference_c")
+IGNORE = : WITH_CBLAS is incompatible with WITH_BLAS = ${WITH_BLAS}"
+.endif
+.elif exists(${LOCALBASE}/lib/libgoto2.so)
+WITH_BLAS?= gotoblas
+.elif exists(${LOCALBASE}/lib/libatlas.so)
+WITH_BLAS?= atlas
+.else
+WITH_BLAS?= reference
+.endif #WITH_CBLAS
+.endif #WITH_EXTERNAL_LAPACK or WITH_BUILTIN_BLAS
+
+.if !defined(WITH_BUILTIN_BLAS)
+.if ${WITH_BLAS} == atlas
+RUN_DEPENDS += ${LOCALBASE}/lib/libatlas.so:${PORTSDIR}/math/atlas
+BLAS= -lptf77blas
+.elif ${WITH_BLAS} == atlas_c
+RUN_DEPENDS += ${LOCALBASE}/lib/libatlas.so:${PORTSDIR}/math/atlas
+BLAS= -lptcblas
+.elif ${WITH_BLAS} == gotoblas
+RUN_DEPENDS += ${LOCALBASE}/lib/libgoto2p.so:${PORTSDIR}/math/gotoblas
+BLAS = -lgoto2p
+.elif ${WITH_BLAS} == reference
+RUN_DEPENDS += ${LOCALBASE}/lib/libblas.so:${PORTSDIR}/math/blas
+BLAS= -lblas
+.elif ${WITH_BLAS} == reference_c
+RUN_DEPENDS += ${LOCALBASE}/lib/libgslcblas.so:${PORTSDIR}/math/gsl
+BLAS= -lgslcblas
+.endif #WITH_BLAS
+.endif #WITH_BUILTIN_BLAS
+
+.if defined(WITH_EXTERNAL_LAPACK)
+.if !empty(WITH_BLAS:Matlas*)
+.if defined(WITH_BUILTIN_BLAS)
+RUN_DEPENDS += ${LOCALBASE}/lib/libatlas.so:${PORTSDIR}/math/atlas
+.endif
+LAPACK = -lalapack -lptcblas -lptf77blas
+.elif ${WITH_BLAS} == gotoblas
+.if defined(WITH_BUILTIN_BLAS)
+RUN_DEPENDS += ${LOCALBASE}/lib/libgoto2p.so:${PORTSDIR}/math/gotoblas
+.endif
+LAPACK = -lgoto2p
+.elif !empty(WITH_BLAS:Mreference*)
+RUN_DEPENDS += ${LOCALBASE}/lib/liblapack.so:${PORTSDIR}/math/lapack
+LAPACK = -llapack
+.if defined(WITH_BUILTIN_BLAS) || defined(WITH_CBLAS)
+RUN_DEPENDS += ${LOCALBASE}/lib/libblas.so:${PORTSDIR}/math/blas
+LAPACK+= -lblas
+.endif
+.endif #WITH_BLAS
+.endif #WITH_EXTERNAL_LAPACK
+
+.if defined(WITH_OPENMP)
+.if defined(WITH_THREADS)
+IGNORE = WITH_OPENMP is incompatible with WITH_THREADS
+.endif
+.if !empty(CC:M*clang*)
+IGNORE = clang does not support WITH_OPENMP, use WITH_THREADS instead
+.endif
+OPENMP_CFLAGS ?= -fopenmp
+CFLAGS+= ${OPENMP_CFLAGS}
+LDFLAGS+= ${OPENMP_CFLAGS}
+CONFIGURE_ARGS+= --enable-multithreading=openmp
+.elif defined(WITH_THREADS)
+CFLAGS+= ${PTHREAD_CFLAGS}
+LDFLAGS+= ${PTHREAD_CFLAGS}
+CONFIGURE_ARGS+= --enable-multithreading=pthreads
+.else
+CONFIGURE_ARGS+= --enable-multithreading=no
+.endif
+
+.if defined(WITH_SHARED)
+USE_LDCONFIG= yes
+.endif
+
+.for o in SHARED STATIC
+.if defined(WITH_${o})
+PLIST_SUB+= ${o}=""
+.else
+PLIST_SUB+= ${o}="@comment "
+.endif
+.endfor
+
+.if defined(WITH_SUPERMATRIX)
+CONFIGURE_ARGS+= --enable-supermatrix
+.else
+CONFIGURE_ARGS+= --disable-supermatrix
+.endif
+
+.if !(defined(USE_GCC) || defined(USE_FORTRAN) || !empty(CC:M*gcc4*))
+CONFIGURE_ARGS+= --disable-autodetect-f77-ldflags \
+ --disable-autodetect-f77-name-mangling
+.endif
+
+.if !empty(MACHINE_CPU:Msse3)
+CFLAGS+= -msse3
+LDFLAGS+= -msse3
+CONFIGURE_ARGS+= --enable-vector-intrinsics=sse
+.else
+CONFIGURE_ARGS+= --enable-vector-intrinsics=none
+.endif
+
+.if ${ARCH} == "sparc64"
+PICFLAG?= -fPIC
+.else
+PICFLAG?= -fpic
+.endif
+CFLAGS+= ${PICFLAG}
+LDFLAGS+= ${PICFLAG} -Wl,-x
+
+.if defined(MEMORY_ALIGNMENT)
+CONFIGURE_ARGS+= --enable-memory-alignment=${MEMORY_ALIGNMENT}
+.if defined(LDIM_ALIGNMENT)
+CONFIGURE_ARGS+= --enable-ldim-alignment
+.endif
+.endif
+
+.ifndef(NOPORTDOCS)
+PORTDOCS= libflame.pdf
+.endif
+
+.ifndef(NOPORTEXAMPLES)
+PORTEXAMPLES= *
+.endif
+
+SHLIB_MAJOR?= 0
+
+post-patch:
+ @${FIND} ${WRKSRC} -type f \( -name '*.sh' -o -name '*.sh.in' \) | \
+ ${XARGS} ${REINPLACE_CMD} -E \
+ -e 's@(#!)(/bin/bash)@\1${LOCALBASE}\2@'
+ @${FIND} ${WRKSRC} -type f \( -name 'makefile' -o -name 'config.mk.in' \) | \
+ ${XARGS} ${REINPLACE_CMD} \
+ -e 's@-lpthread@${PTHREAD_LIBS}@g' \
+ -e 's@-fPIC@${PICFLAG}@g'
+ @${REINPLACE_CMD} \
+ -e '\@MK_INCL_DIR_INST_W_ARCH_VERS[[:blank:]]*:=@ \
+ s@-$$(ARCH_VERS)@/libflame@' \
+ -e '\@MK_FLAMEC_...S_INST_W_ARCH_VERS[[:blank:]]*:=@ \
+ {N; s@-$$(ARCH_VERS)@@; s@\.so@&.${SHLIB_MAJOR}@2;}' \
+ -e '\@^$$(MK_INCL_DIR_INST):@,\@^endif@d' \
+ -e '\@^$$(INSTALL_PREFIX)/lib/%\.a:@,\@^endif@d' \
+ -e 's@^\($$(INSTALL_PREFIX)/lib/%\)\(-$$(ARCH_VERS)\)\(\.a:\)@\1\3@' \
+ -e '\@^$$(INSTALL_PREFIX)/lib/%.*\.so:@ \
+ s@\(-$$(ARCH_VERS)\)\(\.so\)@\2.${SHLIB_MAJOR}@' \
+ ${WRKSRC}/Makefile
+ @${REINPLACE_CMD} -e 's@gcc)@cc|gcc*)@g' \
+ ${WRKSRC}/configure
+ @${REINPLACE_CMD} \
+ -e '\@FLA_LIB_PATH[[:blank:]]*:=@ \
+ s@$$(INSTALL_PREFIX)/lib@../lib/$$(HOST)@' \
+ -e '\@FLA_INC_PATH[[:blank:]]*:=@ \
+ s@$$(INSTALL_PREFIX)@${WRKDIR}@' \
+ -e '\@HOST[[:blank:]]*:=@ \
+ s@sh $$(BUILD_DIRPATH)/ac-utils/config.guess@cat ../config.sys_type@' \
+ ${WRKSRC}/test/Makefile
+
+pre-configure:
+ @${FIND} ${WRKSRC} -type f \( -name '*.bak' -o -name '*.fbsd10bak' \
+ -o -name '*.orig' \) -delete
+
+post-configure:
+.if defined(WITH_STATIC)
+ @${CP} -af ${WRKSRC} ${WRKSRC}_STATIC
+ @${REINPLACE_CMD} -e 's@${PICFLAG}@@' \
+ -e '\@FLA_ENABLE_DYNAMIC_BUILD[[:blank:]]*:=@s@yes@no@' \
+ ${WRKSRC}_STATIC/config/*/config.mk
+.endif
+.if defined(WITH_SHARED)
+ @${REINPLACE_CMD} \
+ -e '\@MK_FLAMEC_LIBS_INST.*[[:blank:]]*:=@ \
+ {N; s@$$(INSTALL_PREFIX)/lib/%@&_pic@;}' \
+ -e '\@^$$(INSTALL_PREFIX)/lib/%\.a:@s@%@&_pic@1' \
+ ${WRKSRC}/Makefile
+.endif
+
+do-build:
+.for o in SHARED STATIC
+.if defined(WITH_${o})
+ @${PRINTF} "\n\n\n===> Building ${o:L} library:\n\n\n\n"
+ @cd ${WRKSRC}${o:S|^|_|:M*STATIC}; ${SETENV} ${MAKE_ENV} ${GMAKE} \
+ ${_MAKE_JOBS} ${MAKE_ARGS} libs
+.endif
+.endfor
+
+do-install:
+ @cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} \
+ ${MAKE_ARGS} install-headers
+.if defined(WITH_SHARED)
+ @cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} \
+ ${MAKE_ARGS} install-libs install-lib-symlinks
+.endif
+.if defined(WITH_STATIC)
+ @cd ${WRKSRC}_STATIC; ${SETENV} ${MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} \
+ ${MAKE_ARGS} install-libs
+.endif
+.ifndef(NOPORTDOCS)
+ @${INSTALL_DATA} -d ${DOCSDIR}
+ @${INSTALL_DATA} ${_DISTDIR}/${PORTDOCS} ${DOCSDIR}
+.endif
+.ifndef(NOPORTEXAMPLES)
+ @${INSTALL_DATA} -d ${EXAMPLESDIR}
+ @cd ${WRKSRC}/examples; ${COPYTREE_SHARE} \* ${EXAMPLESDIR}
+.endif
+
+.if defined(MAINTAINER_MODE)
+BUILD_DEPENDS += ${RUN_DEPENDS}
+CONFIGURE_ARGS+= --enable-verbose-make-output
+
+check regression-test test: build
+ @cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} \
+ ${MAKE_ARGS} MK_INCL_DIR_INST_W_ARCH_VERS="${WRKDIR}/include" \
+ install-headers
+.for o in SHARED STATIC
+.if defined(WITH_${o})
+ @${PRINTF} "\n\n\n===> Testing ${o:L} library:\n\n\n\n"
+ @cd ${WRKSRC}${o:S|^|_|:M*STATIC}/test; ${SETENV} ${MAKE_ENV} \
+ ${GMAKE} ${_MAKE_JOBS} ${MAKE_ARGS} \
+ LIBBLAS="-L${LOCALBASE}/lib ${BLAS} -lm" \
+ LIBLAPACK="-L${LOCALBASE}/lib ${LAPACK}" test_libflame ; \
+ ./test_libflame.x
+.endif
+.endfor
+
+.endif #MAINTAINER_MODE
+.include <bsd.port.post.mk>