commit:     21789df887204e7b98393fb115982ee36a71d8c1
Author:     AbstractMethod <paul.polak <AT> med-image <DOT> info>
AuthorDate: Mon Sep 14 23:55:04 2020 +0000
Commit:     Horea Christian <horea.christ <AT> gmail <DOT> com>
CommitDate: Thu Sep 17 15:14:25 2020 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=21789df8

Changes for fsl CUDA support

Package-Manager: Portage-3.0.6, Repoman-3.0.1
Signed-off-by: Horea Christian <chr <AT> chymera.eu>

 .../fsl/files/fsl-6.0.2-cuda_buildsettings.patch   |  12 ++
 sci-biology/fsl/files/fsl-6.0.2-eddy_cuda.patch    |  21 +++
 sci-biology/fsl/fsl-6.0.2-r1.ebuild                | 202 +++++++++++++++++++++
 sci-biology/fsl/metadata.xml                       |   3 +
 4 files changed, 238 insertions(+)

diff --git a/sci-biology/fsl/files/fsl-6.0.2-cuda_buildsettings.patch 
b/sci-biology/fsl/files/fsl-6.0.2-cuda_buildsettings.patch
new file mode 100644
index 000000000..a3872acf0
--- /dev/null
+++ b/sci-biology/fsl/files/fsl-6.0.2-cuda_buildsettings.patch
@@ -0,0 +1,12 @@
+diff -Naur fsl.orig/config/buildSettings.mk fsl/config/buildSettings.mk
+--- fsl.orig/config/buildSettings.mk   2020-07-23 15:43:42.277064365 -0400
++++ fsl/config/buildSettings.mk        2020-07-23 15:45:17.705069496 -0400
+@@ -141,7 +141,7 @@
+ # CUDA development environment
+ CUDAVER := $(or $(CUDAVER),9.1)
+ #$(info $$CUDAVER is [${CUDAVER}])
+-CUDA_INSTALLATION = /opt/cuda-${CUDAVER}
++CUDA_INSTALLATION = /opt/cuda
+ GENCODE_FLAGS = $(shell ${FSLDIR}/config/common/supportedGencodes.sh 
${CUDA_INSTALLATION})
+ LIB_CUDA = ${CUDA_INSTALLATION}/lib64
+ INC_CUDA = ${CUDA_INSTALLATION}/include

diff --git a/sci-biology/fsl/files/fsl-6.0.2-eddy_cuda.patch 
b/sci-biology/fsl/files/fsl-6.0.2-eddy_cuda.patch
new file mode 100644
index 000000000..40409ec08
--- /dev/null
+++ b/sci-biology/fsl/files/fsl-6.0.2-eddy_cuda.patch
@@ -0,0 +1,21 @@
+diff -Naur fsl.orig/src/eddy/Makefile fsl/src/eddy/Makefile
+--- fsl.orig/src/eddy/Makefile 2020-07-30 14:30:06.414884410 -0400
++++ fsl/src/eddy/Makefile      2020-07-30 14:33:03.400889914 -0400
+@@ -29,6 +29,8 @@
+ TMPCXXFLAGS_2=
+ TMPNAME_1=
+ TMPNAME_2=
++cuda=1
++cpu=1
+ 
+ ifndef cuda
+    ifndef cpu #Default single cpu, no threading
+@@ -74,7 +75,7 @@
+ ifdef NVCC11
+       NVCC=${NVCC11}
+ endif
+-NVCCFLAGS=-c -DCOMPILE_GPU -O3 -m 64 -std=c++11
++NVCCFLAGS=-c -DCOMPILE_GPU -O3 -m 64 -std=c++11 @@GENTOO_NVCC_FLAGS@@
+ ifeq ($(CLOBBER_CLANG),1)
+    NVCCFLAGS+= -DCLOBBER_CLANG
+ endif

diff --git a/sci-biology/fsl/fsl-6.0.2-r1.ebuild 
b/sci-biology/fsl/fsl-6.0.2-r1.ebuild
new file mode 100644
index 000000000..0cadd4e4b
--- /dev/null
+++ b/sci-biology/fsl/fsl-6.0.2-r1.ebuild
@@ -0,0 +1,202 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cuda flag-o-matic toolchain-funcs prefix
+
+DESCRIPTION="Analysis of functional, structural, and diffusion MRI brain 
imaging data"
+HOMEPAGE="http://www.fmrib.ox.ac.uk/fsl";
+SRC_URI="https://fsl.fmrib.ox.ac.uk/fsldownloads/${P}-sources.tar.gz -> 
${P}.tar.gz"
+
+LICENSE="FSL BSD-2 newmat"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="cuda"
+
+DEPEND="
+       dev-libs/boost
+       dev-python/fslpy
+       media-gfx/graphviz
+       media-libs/gd
+       media-libs/glu
+       media-libs/libpng:0=
+       sci-libs/ciftilib
+       sci-libs/nlopt
+       sys-libs/zlib
+       dev-lang/tcl:0=
+       dev-lang/tk:0=
+       >=virtual/lapack-3.8
+       >=virtual/blas-3.8
+
+       cuda? (
+               || (
+                       ( =dev-util/nvidia-cuda-toolkit-10* =sys-devel/gcc-8* )
+                       ( =dev-util/nvidia-cuda-toolkit-11* =sys-devel/gcc-9* )
+                  )
+       )
+       "
+RDEPEND="${DEPEND}"
+
+S=${WORKDIR}/${PN}
+UPSTREAM_FSLDIR="/usr/share/fsl"
+
+PATCHES=(
+       "${FILESDIR}/${PN}"-6.0.2-gcc10_include.patch
+       "${FILESDIR}/${PN}"-6.0.2-setup.patch
+       "${FILESDIR}/${PN}"-6.0.2-template.patch
+       "${FILESDIR}/${PN}"-6.0.2-no_xmlpp.patch
+       "${FILESDIR}/${PN}"-5.0.11-niftiio_var_fix.patch
+       "${FILESDIR}/${PN}"-5.0.11-ifstream_use.patch
+       "${FILESDIR}/${PN}"-5.0.11-fslsurface_parallel_make.patch
+       "${FILESDIR}/${PN}"-6.0.2-qstring_compat.patch
+       "${FILESDIR}/${PN}"-5.0.9-headers.patch
+       "${FILESDIR}/${PN}"-6.0.2-fsldir_redux.patch
+)
+
+src_prepare() {
+       default
+
+       sed -i \
+               -e "s:@@GENTOO_RANLIB@@:$(tc-getRANLIB):" \
+               -e "s:@@GENTOO_CC@@:$(tc-getCC):" \
+               -e "s:@@GENTOO_CXX@@:$(tc-getCXX):" \
+               config/buildSettings.mk || die
+
+       eprefixify $(grep -rl GENTOO_PORTAGE_EPREFIX src/*) \
+               etc/js/label-div.html
+
+       # Disable mist-clean the hard way for now.
+       rm -rf src/mist-clean
+
+       makefilelist=$(find src/ -name Makefile)
+
+       sed -i \
+               -e "s:-I\${INC_BOOST}::" \
+               -e "s:-I\${INC_ZLIB}::" \
+               -e "s:-I\${INC_GD}::" \
+               -e "s:-I\${INC_PNG}::" \
+               -e "s:-L\${LIB_GD}::" \
+               -e "s:-L\${LIB_PNG}::" \
+               -e "s:-L\${LIB_ZLIB}::" \
+               ${makefilelist} || die
+
+       sed -e "s:\${FSLDIR}/bin/::g" \
+               -e "s:\$FSLDIR/bin/::g" \
+               -i $(grep -rl "\${FSLDIR}/bin" src/*) \
+               -i $(grep -rl "\$FSLDIR/bin" src/*) \
+               $(grep -rl "\${FSLDIR}/bin" etc/matlab/*)\
+               $(grep -rl "\$FSLDIR/bin" etc/matlab/*) || die
+
+       sed -e "s:\$FSLDIR/data:${EPREFIX}/usr/share/fsl/data:g" \
+               -e "s:\${FSLDIR}/data:${EPREFIX}/usr/share/fsl/data:g" \
+               -i $(grep -rl "\$FSLDIR/data" src/*) \
+               $(grep -rl "\${FSLDIR}/data" src/*) || die
+
+       sed -e "s:\$FSLDIR/doc:${EPREFIX}/usr/share/fsl/doc:g" \
+               -e "s:\${FSLDIR}/doc:${EPREFIX}/usr/share/fsl/doc:g" \
+               -i $(grep -rl "\$FSLDIR/doc" src/*) \
+               $(grep -rl "\${FSLDIR}/doc" src/*) || die
+
+       sed -e "s:/usr/share/fsl/doc:${EPREFIX}/usr/share/fsl/doc:g" \
+               -i $(grep -rl "/usr/share/fsl/doc" src/*) || die
+
+       sed -e "s:\$FSLDIR/etc:${EPREFIX}/etc:g" \
+               -e "s:\${FSLDIR}/etc:${EPREFIX}/etc:g" \
+               -i $(grep -rlI "\$FSLDIR/etc" *) \
+               -i $(grep -rlI "\${FSLDIR}/etc" *) || die
+
+       # Use generic blas/lapack rather than openblas
+       sed -e "s:-lopenblas:-llapack -lblas:g" \
+               -i $(grep -rlI lopenblas *) || die
+
+       # script wanting to have access to flsversion at buildtime
+       sed -e "s:/etc/fslversion:${S}/etc/fslversion:g" \
+               -i ${makefilelist} || die
+
+       if use cuda; then
+               einfo
+
+               gcc_ver=`gcc-fullversion`
+               einfo "GCC version: ${gcc_ver}"
+
+               cuda_gcc=`cuda_gccdir`
+               cuda_NVCC_flags=`cuda_gccdir -f`
+               einfo "CUDA GCC path: ${cuda_gcc}"
+               einfo "  ${cuda_NVCC_flags}"
+
+               CUDA_INSTALLATION="/opt/cuda"
+               CUDAVER=`cuda_toolkit_version`
+
+               eapply "${FILESDIR}/${PN}-6.0.2-eddy_cuda.patch"
+               eapply "${FILESDIR}/${PN}-6.0.2-cuda_buildsettings.patch"
+
+               sed -i \
+                       -e "s:@@GENTOO_NVCC_FLAGS@@:${cuda_NVCC_flags}:" \
+                       src/eddy/Makefile || die
+
+               cuda_sanitize
+       fi
+}
+
+src_compile() {
+       export FSLDIR=${WORKDIR}/${PN}
+       export FSLCONDIR=${WORKDIR}/${PN}/config
+       export FSLMACHTYPE=generic
+
+       export USERLDFLAGS="${LDFLAGS}"
+       export USERCFLAGS="${CFLAGS}"
+       export USERCXXFLAGS="${CXXFLAGS}"
+
+       export CIFTICFLAGS="$($(tc-getPKG_CONFIG) --cflags CiftiLib)"
+       export CIFTILIBS="$($(tc-getPKG_CONFIG) --libs-only-l CiftiLib)"
+
+       if use cuda; then
+               einfo "CUDA_INSTALLATION: ${CUDA_INSTALLATION}"
+               einfo "CUDAVER: ${CUDAVER}"
+       fi
+
+       ./build || die
+}
+
+src_install() {
+       sed -i "s:\${FSLDIR}/tcl:/usr/libexec/fsl:g" \
+               $(grep -lI "\${FSLDIR}/tcl" bin/*) \
+               $(grep -l "\${FSLDIR}/tcl"  tcl/*) || die
+       sed -i "s:\$FSLDIR/tcl:/usr/libexec/fsl:g" \
+               $(grep -l "\$FSLDIR/tcl" tcl/*) || die
+
+       dobin bin/*
+
+       insinto /usr/share/${PN}
+       doins -r data
+       dodoc -r doc/. refdoc
+
+       insinto /usr/libexec/fsl
+       doins -r tcl/*
+
+       insinto /etc/fslconf
+       doins etc/fslconf/fsl.sh
+
+       insinto /etc
+       doins etc/fslversion
+       doins -r etc/default_flobs.flobs etc/flirtsch etc/js etc/luts
+
+       #the following is needed for FSL and depending programs to be able
+       #to find its files, since FSL uses an uncommon installation path:
+       #https://github.com/gentoo-science/sci/pull/612#r60289295
+       dosym ../../../etc ${UPSTREAM_FSLDIR}/etc
+       dosym ../doc/${PF} ${UPSTREAM_FSLDIR}/doc
+       dosym ../../bin ${UPSTREAM_FSLDIR}/bin
+
+       doenvd "$(prefixify_ro "${FILESDIR}"/99fsl)"
+       mv "${ED}"/usr/bin/{,fsl_}cluster || die
+}
+
+pkg_postinst() {
+       echo
+       einfo "Please run the following commands if you"
+       einfo "intend to use fsl from an existing shell:"
+       einfo "env-update && source /etc/profile"
+       echo
+}

diff --git a/sci-biology/fsl/metadata.xml b/sci-biology/fsl/metadata.xml
index d3788686e..9d12c769d 100644
--- a/sci-biology/fsl/metadata.xml
+++ b/sci-biology/fsl/metadata.xml
@@ -8,4 +8,7 @@
        <longdescription>
 FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI brain 
imaging data.
 </longdescription>
+       <use>
+               <flag name="cuda">Add support for CUDA</flag>
+       </use>
 </pkgmetadata>

Reply via email to