summaryrefslogtreecommitdiffstats
path: root/build/linux
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2017-09-15 16:38:08 +0200
committerWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2017-09-15 16:38:08 +0200
commitaa31a06235496c0d808e57c8ce914cb4b640bc6e (patch)
tree33385e828ddca0b2857bac9e3dac4dd3723a3eee /build/linux
parentf6aa2db83dfea89f9d2cfc6fcbd3da141ee77e02 (diff)
parent00a1c6118b2d64b867c8e640c295462bcccfc7c9 (diff)
downloadastra-aa31a06235496c0d808e57c8ce914cb4b640bc6e.tar.gz
astra-aa31a06235496c0d808e57c8ce914cb4b640bc6e.tar.bz2
astra-aa31a06235496c0d808e57c8ce914cb4b640bc6e.tar.xz
astra-aa31a06235496c0d808e57c8ce914cb4b640bc6e.zip
Merge branch 'master' into parallel_vec
Diffstat (limited to 'build/linux')
-rw-r--r--build/linux/Makefile.in239
-rwxr-xr-xbuild/linux/autogen.sh7
-rw-r--r--build/linux/configure.ac118
3 files changed, 275 insertions, 89 deletions
diff --git a/build/linux/Makefile.in b/build/linux/Makefile.in
index 2af705f..d7d6488 100644
--- a/build/linux/Makefile.in
+++ b/build/linux/Makefile.in
@@ -1,10 +1,19 @@
+install_type=@INSTALL_TYPE@
+
cuda=@HAVECUDA@
matlab=@HAVEMATLAB@
python=@HAVEPYTHON@
boostutf=@HAVEBOOSTUTF@
-
+macos=@IS_MACOS@
MATLAB_ROOT=@MATLAB_ROOT@
+octave=@HAVEOCTAVE@
+
+MKDIR=mkdir -p
+CXX=@CXX@
+LD=@CXX@
+SHELL=@SHELL@
+INSTALL_SH=$(SHELL) $(srcdir)/install-sh
TARGETS=libastra.la
@@ -16,10 +25,15 @@ ifeq ($(python),yes)
TARGETS+=py
endif
+ifeq ($(octave),yes)
+TARGETS+=oct
+endif
+
all: $(TARGETS)
prefix=@prefix@
exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
srcdir=@srcdir@
abs_top_builddir=@abs_top_builddir@
@@ -36,7 +50,10 @@ CXXFLAGS+=-g -O3 -Wall -Wshadow
LIBS+=-lpthread
LDFLAGS+=-g
-CPPFLAGS+=@CPPFLAGS_OS@
+CXXFLAGS+=@CXXFLAGS_OS@
+LDFLAGS+=@LDFLAGS_OS@
+
+BOOSTUTF_LIBS=@LIBS_BOOSTUTF@
ifeq ($(cuda),yes)
CPPFLAGS += @CPPFLAGS_CUDA@ -DASTRA_CUDA
@@ -47,47 +64,39 @@ NVCC = @NVCC@
endif
ifeq ($(matlab),yes)
+# TODO: Do we also want -fopenmp for octave?
CPPFLAGS+=-I$(MATLAB_ROOT)/extern/include -DMATLAB_MEX_FILE
+ifeq ($(macos),no)
CXXFLAGS+=-fopenmp
LDFLAGS+=-fopenmp
endif
+endif
+
+# MODLDFLAGS are the base LDFLAGS for matlab, octave, python modules
+MODLDFLAGS=$(LDFLAGS) -L$(abs_top_builddir)/.libs
+ifeq ($(install_type),module)
+MODLDFLAGS+=-Wl,-rpath,'\$$ORIGIN'
+endif
ifeq ($(python),yes)
PYTHON = @PYTHON@
-PYLIBDIR = $(shell $(PYTHON) -c 'from distutils.sysconfig import get_config_var; import six; six.print_(get_config_var("LIBDIR"))')
-PYINCDIR = $(shell $(PYTHON) -c 'from distutils.sysconfig import get_python_inc; import six; six.print_(get_python_inc())')
+PYINCDIR := $(shell $(PYTHON) -c 'from __future__ import print_function; from distutils.sysconfig import get_python_inc; print(get_python_inc())')
PYLIBVER = `basename $(PYINCDIR)`
CPPFLAGS += -DASTRA_PYTHON -I$(PYINCDIR)
PYCPPFLAGS := $(CPPFLAGS)
PYCPPFLAGS += -I../include
-PYLDFLAGS = $(LDFLAGS)
-PYLDFLAGS += -L$(abs_top_builddir)/.libs
+PYLDFLAGS = $(MODLDFLAGS)
+MODPYLIBS=-l$(PYLIBVER)
endif
# This is below where PYCPPFLAGS copies CPPFLAGS. The python code is built
# from a different directory, so these relative includes would be wrong.
CPPFLAGS+=-I$(srcdir)/../.. -I$(srcdir)/../../include -I$(srcdir)/../../lib/include
-BOOST_CPPFLAGS=
-BOOST_LDFLAGS=
-
-BOOSTUTF_LIBS=@LIBS_BOOSTUTF@
-
-
-CPPFLAGS+=$(BOOST_CPPFLAGS)
-LDFLAGS+=$(BOOST_LDFLAGS)
-
-
-MKDIR=mkdir -p
-CXX=@CXX@
-LD=@CXX@
-SHELL=@SHELL@
-INSTALL_SH=$(SHELL) $(srcdir)/install-sh
-
ifeq ($(matlab),yes)
MEXFLAGS = -cxx
-MEXLDFLAGS='$$LDFLAGS $(LDFLAGS)'
-MEXLIBS = -L.libs -lut
+MEXLDFLAGS=\$$LDFLAGS $(MODLDFLAGS)
+MEXLIBS = -lut
MEXSUFFIX = @MEXSUFFIX@
MEX = @MEX@
@@ -95,14 +104,20 @@ ifeq ($(cuda),yes)
MEXFLAGS += -DASTRA_CUDA
endif
-ifeq ($(python),yes)
-MEXPYLDFLAGS='$$LDFLAGS $(LDFLAGS) -L$(PYLIBDIR)'
-MEXPYLIBS=$(MEXLIBS) -l$(PYLIBVER)
+endif
+
+
+ifeq ($(octave),yes)
+OCTLDFLAGS:=$(MODLDFLAGS)
+CPPFLAGS += @OCTAVE_CPPFLAGS@
+ifeq ($(cuda),yes)
+OCTFLAGS=-DASTRA_CUDA
+else
+OCTFLAGS=
endif
endif
-LIBDIR=/usr/local/lib
DEPDIR=.deps
@@ -190,7 +205,10 @@ CUDA_CXX_OBJECTS=\
src/CudaFDKAlgorithm3D.lo \
src/CudaSirtAlgorithm3D.lo \
src/CudaBackProjectionAlgorithm3D.lo \
- src/CudaForwardProjectionAlgorithm3D.lo
+ src/CudaForwardProjectionAlgorithm3D.lo \
+ src/Float32Data3DGPU.lo \
+ src/Float32ProjectionData3DGPU.lo \
+ src/Float32VolumeData3DGPU.lo
CUDA_OBJECTS=\
cuda/2d/algo.lo \
@@ -258,47 +276,79 @@ MATLAB_MEX=\
matlab/mex/astra_mex_data3d_c.$(MEXSUFFIX) \
matlab/mex/astra_mex_direct_c.$(MEXSUFFIX)
+OCTAVE_CXX_OBJECTS=\
+ matlab/mex/octave_support.o
+
+OCTAVE_MEX=\
+ matlab/mex/astra_mex_algorithm_c.mex \
+ matlab/mex/astra_mex_data2d_c.mex \
+ matlab/mex/astra_mex_c.mex \
+ matlab/mex/astra_mex_matrix_c.mex \
+ matlab/mex/astra_mex_projector_c.mex \
+ matlab/mex/astra_mex_projector3d_c.mex \
+ matlab/mex/astra_mex_log_c.mex \
+ matlab/mex/astra_mex_data3d_c.mex \
+ matlab/mex/astra_mex_direct_c.mex
+
ifeq ($(python),yes)
MATLAB_MEX+=matlab/mex/astra_mex_plugin_c.$(MEXSUFFIX)
+OCTAVE_MEX+=matlab/mex/astra_mex_plugin_c.mex
endif
+
OBJECT_DIRS = src/ tests/ cuda/2d/ cuda/3d/ matlab/mex/ ./
DEPDIRS = $(addsuffix $(DEPDIR),$(OBJECT_DIRS))
-include $(wildcard $(addsuffix /*.d,$(DEPDIRS)))
LIBDIRS = $(addsuffix .libs,./ src/ cuda/2d/ cuda/3d/)
+SONAME=$(shell . ${abs_top_builddir}/libastra.la; echo $$dlname)
ifeq ($(matlab),yes)
mex: $(MATLAB_MEX)
%.$(MEXSUFFIX): %.o $(MATLAB_CXX_OBJECTS) libastra.la
- $(MEX) LDFLAGS=$(MEXLDFLAGS) $(MEXFLAGS) $(LIBS) $(MEXLIBS) -lastra -output $* $*.o $(MATLAB_CXX_OBJECTS)
+ $(MEX) LDFLAGS="$(MEXLDFLAGS)" $(MEXFLAGS) $(LIBS) $(MEXLIBS) -lastra -output $* $*.o $(MATLAB_CXX_OBJECTS)
+ifeq ($(install_type),module)
+ifeq ($(macos),yes)
+ @# tell macOS dynamic loader to look in mex directory for libastra.0.dylib
+ @# CHECKME: some versions of otool return a two-line output for otool -DX?
+ @# (xcode 8.2.1 / macos 10.11.6 ?)
+ install_name_tool -change `otool -DX .libs/$(SONAME) | tail -n 1` @loader_path/$(SONAME) $@
+endif
+endif
ifeq ($(python),yes)
matlab/mex/astra_mex_plugin_c.$(MEXSUFFIX): matlab/mex/astra_mex_plugin_c.o $(MATLAB_CXX_OBJECTS) libastra.la
- $(MEX) LDFLAGS=$(MEXPYLDFLAGS) $(MEXFLAGS) $(LIBS) $(MEXPYLIBS) -lastra -output matlab/mex/astra_mex_plugin_c $< $(MATLAB_CXX_OBJECTS)
+ $(MEX) LDFLAGS="$(MEXLDFLAGS)" $(MEXFLAGS) $(LIBS) $(MEXLIBS) $(MODPYLIBS) -lastra -output matlab/mex/astra_mex_plugin_c $< $(MATLAB_CXX_OBJECTS)
endif
endif
ifeq ($(python),yes)
py: libastra.la
$(MKDIR) python/build
- $(MKDIR) python/finalbuild
- # Note: setting CC to CXX is intentional. Python uses CC for compilation even if input is C++.
- cd $(srcdir)/../../python; CXX="${CXX}" CC="${CXX}" CPPFLAGS="${PYCPPFLAGS}" LDFLAGS="${PYLDFLAGS}" $(PYTHON) builder.py build --build-base=$(abs_top_builddir)/python/build install \
- --install-base=$(abs_top_builddir)/python/finalbuild --install-headers=$(abs_top_builddir)/python/finalbuild --install-purelib=$(abs_top_builddir)/python/finalbuild \
- --install-platlib=$(abs_top_builddir)/python/finalbuild --install-scripts=$(abs_top_builddir)/python/finalbuild --install-data=$(abs_top_builddir)/python/finalbuild
-
-python-root-install: libastra.la
- $(MKDIR) python/build
- # Note: setting CC to CXX is intentional. Python uses CC for compilation even if input is C++.
- cd $(srcdir)/../../python; CXX="${CXX}" CC="${CXX}" CPPFLAGS="${PYCPPFLAGS}" LDFLAGS="${PYLDFLAGS}" $(PYTHON) builder.py build --build-base=$(abs_top_builddir)/python/build install
+# TODO: Avoid writing into source dir
+ ln -s $(abs_top_builddir)/.libs/$(SONAME) $(srcdir)/../../python/astra
+# Note: setting CC to CXX is intentional. Python uses CC for compilation even if input is C++.
+ (cd $(srcdir)/../../python; ASTRA_INSTALL_LIBRARY_AS_DATA=$(PYPKGDATA) CXX="${CXX}" CC="${CXX}" CPPFLAGS="${PYCPPFLAGS}" LDFLAGS='${PYLDFLAGS}' $(PYTHON) builder.py build --build-base=$(abs_top_builddir)/python/build) || (rm $(srcdir)/../../python/astra/$(SONAME); false)
+ rm $(srcdir)/../../python/astra/$(SONAME)
endif
+ifeq ($(octave),yes)
+oct: $(OCTAVE_MEX)
+
+%.mex: %.o $(MATLAB_CXX_OBJECTS) $(OCTAVE_CXX_OBJECTS) libastra.la
+ mkoctfile --mex $(OCTFLAGS) $(OCTLDFLAGS) $(LIBS) -lastra --output $* $*.o $(MATLAB_CXX_OBJECTS) $(OCTAVE_CXX_OBJECTS)
+
+ifeq ($(python),yes)
+matlab/mex/astra_mex_plugin_c.mex: matlab/mex/astra_mex_plugin_c.o $(MATLAB_CXX_OBJECTS) $(OCTAVE_CXX_OBJECTS) libastra.la
+ mkoctfile --mex $(OCTFLAGS) $(OCTLDFLAGS) $(LIBS) $(MODPYLIBS) -lastra --output matlab/mex/astra_mex_plugin_c $< $(MATLAB_CXX_OBJECTS) $(OCTAVE_CXX_OBJECTS)
+endif
+endif
+
libastra.la: $(ALL_OBJECTS)
- ./libtool --mode=link --tag=CXX $(LD) -rpath $(LIBDIR) -o $@ $(LDFLAGS) $(LIBS) $+
+ ./libtool --mode=link --tag=CXX $(LD) -rpath @libdir@ -o $@ $(LDFLAGS) $(LIBS) $+
%.o: %.cpp
$(MKDIR) $(*D)/$(DEPDIR)
@@ -321,12 +371,13 @@ ifeq ($(gen_static_libs),yes)
@$(NVCC) $(NVCCFLAGS) -c $(<) -o $*.o >/dev/null 2>&1
endif
@# Generate a .d file, and change the target name in it from .o to .lo
+ @# CUDA 5.5's nvcc doesn't have the -MT option we would like to use.
@$(NVCC) $(NVCCFLAGS) -M $(<) -odir $(*D) -o $(*D)/$(DEPDIR)/$(*F).d2
@sed '1s/\.o :/.lo :/' < $(*D)/$(DEPDIR)/$(*F).d2 > $(*D)/$(DEPDIR)/$(*F).d
@rm -f $(*D)/$(DEPDIR)/$(*F).d2
@# Generate empty targets for all dependencies listed in the .d file.
@# This mimics gcc's -MP option.
- @for x in `cat $(*D)/$(DEPDIR)/$(*F).d`; do if test a$$x != a: -a a$$x != a\\; then echo -e "\n$$x:\n" >> $(*D)/$(DEPDIR)/$(*F).d; fi; done
+ @for x in `cat $(*D)/$(DEPDIR)/$(*F).d`; do if test a$$x != a: -a a$$x != a\\; then (echo; echo "$$x:") >> $(*D)/$(DEPDIR)/$(*F).d; fi; done
@# Generate a fake libtool .lo file
@echo "# $*.lo - a libtool object file" > $*.lo
@echo "# Generated by" `./libtool --version | head -n 1` >> $*.lo
@@ -377,43 +428,107 @@ distclean: clean
rm -rf $(srcdir)/autom4te.cache
rm -f $(srcdir)/configure Makefile
-install: install-libraries install-matlab install-python
-
install-libraries: libastra.la
$(INSTALL_SH) -m 755 -d @libdir@
./libtool --mode=install $(INSTALL_SH) -m 644 libastra.la @libdir@
./libtool --mode=finish @libdir@
-ifeq ($(matlab),yes)
-# TODO: This install location doesn't work well for /usr or /usr/local
-install-matlab: $(MATLAB_MEX)
- $(INSTALL_SH) -m 755 -d @prefix@/matlab
- $(INSTALL_SH) -m 755 -d @prefix@/matlab/mex
- $(INSTALL_SH) -m 755 -d @prefix@/matlab/tools
- $(INSTALL_SH) -m 644 $(MATLAB_MEX) @prefix@/matlab/mex
- $(INSTALL_SH) -m 644 $(srcdir)/../../matlab/tools/*.m @prefix@/matlab/tools
-# TODO: docs
+
+# ------------------------
+# INSTALLATION
+# ------------------------
+
+ifeq ($(install_type),prefix)
+# libraries into @libdir@, python into site-packages, mex into @datadir@
+install: install-libraries install-matlab install-python-site-packages install-octave
+
+PYPKGDATA=
+MATLABBASE=@datadir@/astra/matlab
+OCTAVEBASE=@datadir@/astra/octave
+endif
+
+ifeq ($(install_type),dir)
+# everything into @prefix@
+install: install-libraries install-matlab install-python install-octave
+
+PYPKGDATA=
+MATLABBASE=@prefix@/matlab
+OCTAVEBASE=@prefix@/octave
+PYTHONBASE=@prefix@/python
+endif
+
+ifeq ($(install_type),module)
+# python into site-packages, mex into @datadir@
+# library copied into python/mex directories
+# modules built with rpath=$ORIGIN
+install: install-matlab install-python-site-packages install-octave
+
+PYPKGDATA=$(SONAME)
+MATLABBASE=@prefix@/matlab
+OCTAVEBASE=@prefix@/octave
+
+install-matlab-so: libastra.la
+ $(INSTALL_SH) -m 755 -d $(MATLABBASE)/mex
+ $(INSTALL_SH) -m 755 $(abs_top_builddir)/.libs/$(SONAME) $(MATLABBASE)/mex
+install-octave-so: libastra.la
+ $(INSTALL_SH) -m 755 -d $(OCTAVEBASE)/mex
+ $(INSTALL_SH) -m 755 $(abs_top_builddir)/.libs/$(SONAME) $(OCTAVEBASE)/mex
else
-install-matlab:
+install-matlab-so:
+install-octave-so:
endif
+
+
ifeq ($(python),yes)
-# TODO: This install location doesn't work well for /usr or /usr/local
install-python: py
+ $(MKDIR) python/finalbuild
+ # Note: setting CC to CXX is intentional. Python uses CC for compilation even if input is C++.
+ cd $(srcdir)/../../python; ASTRA_INSTALL_LIBRARY_AS_DATA=$(PYPKGDATA) CXX="${CXX}" CC="${CXX}" CPPFLAGS="${PYCPPFLAGS}" LDFLAGS="${PYLDFLAGS}" $(PYTHON) builder.py build --build-base=$(abs_top_builddir)/python/build install \
+ --install-base=$(abs_top_builddir)/python/finalbuild --install-headers=$(abs_top_builddir)/python/finalbuild --install-purelib=$(abs_top_builddir)/python/finalbuild \
+ --install-platlib=$(abs_top_builddir)/python/finalbuild --install-scripts=$(abs_top_builddir)/python/finalbuild --install-data=$(abs_top_builddir)/python/finalbuild
$(INSTALL_SH) -m 755 -d @prefix@/python
$(INSTALL_SH) -m 755 -d @prefix@/python/astra
- $(INSTALL_SH) -m 644 python/finalbuild/astra/*.so @prefix@/python/astra
+ $(INSTALL_SH) -m 755 -d @prefix@/python/astra/plugins
+ $(INSTALL_SH) -m 755 python/finalbuild/astra/*.so @prefix@/python/astra
$(INSTALL_SH) -m 644 python/finalbuild/astra/*.py @prefix@/python/astra
+ $(INSTALL_SH) -m 644 python/finalbuild/astra/plugins/*.py @prefix@/python/astra/plugins
$(INSTALL_SH) -m 644 python/finalbuild/*.egg-info @prefix@/python/
- @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- @echo "To use ASTRA in Python, add @prefix@/python/ to your PYTHONPATH"
- @echo "and @libdir@ to your LD_LIBRARY_PATH."
- @echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
# TODO: docs
+
+install-python-site-packages: py
+# Note: setting CC to CXX is intentional. Python uses CC for compilation even if input is C++.
+ cd $(srcdir)/../../python; ASTRA_INSTALL_LIBRARY_AS_DATA=$(PYPKGDATA) CXX="${CXX}" CC="${CXX}" CPPFLAGS="${PYCPPFLAGS}" LDFLAGS="${PYLDFLAGS}" $(PYTHON) builder.py build --build-base=$(abs_top_builddir)/python/build install
else
+install-python-site-packages:
install-python:
endif
+ifeq ($(matlab),yes)
+install-matlab: $(MATLAB_MEX) install-matlab-so
+ $(INSTALL_SH) -m 755 -d $(MATLABBASE)
+ $(INSTALL_SH) -m 755 -d $(MATLABBASE)/mex
+ $(INSTALL_SH) -m 755 -d $(MATLABBASE)/tools
+ $(INSTALL_SH) -m 755 $(MATLAB_MEX) $(MATLABBASE)/mex
+ $(INSTALL_SH) -m 644 $(srcdir)/../../matlab/tools/*.m $(MATLABBASE)/tools
+# TODO: docs
+else
+install-matlab:
+endif
+
+
+ifeq ($(octave),yes)
+install-octave: $(OCTAVE_MEX) install-octave-so
+ $(INSTALL_SH) -m 755 -d $(OCTAVEBASE)
+ $(INSTALL_SH) -m 755 -d $(OCTAVEBASE)/mex
+ $(INSTALL_SH) -m 755 -d $(OCTAVEBASE)/tools
+ $(INSTALL_SH) -m 755 $(OCTAVE_MEX) $(OCTAVEBASE)/mex
+ $(INSTALL_SH) -m 644 $(srcdir)/../../matlab/tools/*.m $(OCTAVEBASE)/tools
+# TODO: docs
+else
+install-octave:
+endif
+
Makefile: $(srcdir)/Makefile.in config.status
CONFIG_HEADERS= CONFIG_LINKS= CONFIG_FILES=$@ $(SHELL) ./config.status
@@ -426,7 +541,7 @@ $(srcdir)/configure: $(srcdir)/configure.ac
@echo "configure.ac has been changed. Regenerating configure script"
cd $(srcdir) && $(SHELL) ./autogen.sh
-.PHONY: all mex test clean distclean install install-libraries py python-root-install install-python
+.PHONY: all mex test clean distclean install install-libraries py install-python-site-packages install-python install-octave install-matlab-so install-octave-so
# don't remove intermediate files:
.SECONDARY:
diff --git a/build/linux/autogen.sh b/build/linux/autogen.sh
index 544fdeb..bb3b5cc 100755
--- a/build/linux/autogen.sh
+++ b/build/linux/autogen.sh
@@ -12,8 +12,11 @@ if test $? -ne 0; then
exit 1
fi
-case `uname` in Darwin*) LIBTOOLIZEBIN=glibtoolize ;;
- *) LIBTOOLIZEBIN=libtoolize ;; esac
+case `uname` in
+ Darwin*)
+ test -x "`which glibtoolize 2>/dev/null`" && LIBTOOLIZEBIN=glibtoolize || LIBTOOLIZEBIN=libtoolize ;;
+ *)
+ LIBTOOLIZEBIN=libtoolize ;; esac
$LIBTOOLIZEBIN --install --force > /dev/null 2>&1
if test $? -ne 0; then
diff --git a/build/linux/configure.ac b/build/linux/configure.ac
index 630b08d..b95d94f 100644
--- a/build/linux/configure.ac
+++ b/build/linux/configure.ac
@@ -1,9 +1,9 @@
dnl -----------------------------------------------------------------------
-dnl Copyright: 2010-2015, iMinds-Vision Lab, University of Antwerp
-dnl 2014-2015, CWI, Amsterdam
+dnl Copyright: 2010-2016, iMinds-Vision Lab, University of Antwerp
+dnl 2014-2016, CWI, Amsterdam
dnl
dnl Contact: astra@uantwerpen.be
-dnl Website: http://sf.net/projects/astra-toolbox
+dnl Website: http://www.astra-toolbox.com/
dnl
dnl This file is part of the ASTRA Toolbox.
dnl
@@ -22,9 +22,8 @@ dnl You should have received a copy of the GNU General Public License
dnl along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
dnl
dnl -----------------------------------------------------------------------
-dnl $Id$
-AC_INIT(astra_toolbox, 1.7.1)
+AC_INIT(astra, 1.8.0)
AC_CONFIG_SRCDIR([Makefile.in])
LT_INIT([disable-static])
@@ -103,14 +102,7 @@ if test x"$NVCC" != xno; then
HAVECUDA=yes
BACKUP_CUDA_LDFLAGS="$LDFLAGS"
if test x"$with_cuda" != x -a x"$with_cuda" != xyes; then
- case $host_cpu in
- x86_64)
- LDFLAGS_CUDA="-L$with_cuda/lib64"
- ;;
- *)
- LDFLAGS_CUDA="-L$with_cuda/lib"
- ;;
- esac
+ test -d $with_cuda/lib64 && LDFLAGS_CUDA="-L$with_cuda/lib64" || LDFLAGS_CUDA="-L$with_cuda/lib"
CPPFLAGS_CUDA="-I$with_cuda/include"
LDFLAGS="$LDFLAGS $LDFLAGS_CUDA"
fi
@@ -133,14 +125,16 @@ fi
AC_ARG_WITH(cuda_compute, [[ --with-cuda-compute=archs comma separated list of CUDA compute models (optional)]],,)
if test x"$HAVECUDA" = xyes; then
AC_MSG_CHECKING([for nvcc archs])
- dnl 10 11 12 13 20 30 32 35 37 50
+ dnl 10 11 12 13 20 21 30 32 35 37 50 52 53 60 61
if test x"$with_cuda_compute" = x; then
- with_cuda_compute="10,12,20,30,35,50"
+ with_cuda_compute="20,30,35,50,60"
fi
ASTRA_FIND_NVCC_ARCHS([$with_cuda_compute],NVCCFLAGS_EXTRA,NVCCARCHS)
AC_MSG_RESULT([$NVCCARCHS])
fi
+AC_ARG_VAR(NVCCFLAGS, [CUDA nvcc flags])
+
AC_SUBST(HAVECUDA)
AC_SUBST(LDFLAGS_CUDA)
@@ -175,6 +169,28 @@ fi
AC_SUBST(HAVEMATLAB)
+# octave
+
+AC_ARG_ENABLE(octave, [[ --enable-octave enable Octave support]])
+if test x"$enable_octave" = xyes; then
+ AC_PATH_PROG([HAVEOCTAVE], [octave-config], [no], [$PATH])
+ AC_MSG_CHECKING([for octave])
+ if test x"HAVEOCTAVE" != xno -a $HAVEMATLAB = yes; then
+ HAVEOCTAVE=no
+ AC_MSG_RESULT([no (since Matlab support is enabled)])
+ else
+ if test x"$HAVEOCTAVE" != xno; then
+ OCTAVE_CPPFLAGS="-I`octave-config -p OCTINCLUDEDIR`"
+ AC_SUBST(OCTAVE_CPPFLAGS)
+ HAVEOCTAVE=yes
+ fi
+ AC_MSG_RESULT($HAVEOCTAVE)
+ fi
+else
+ HAVEOCTAVE=no
+fi
+AC_SUBST(HAVEOCTAVE)
+
# python
AC_ARG_WITH(python, [[ --with-python=path path of Python binary (optional)]],,)
@@ -204,8 +220,8 @@ if test x"$with_python" != x -a x"$with_python" != xno; then
AC_MSG_CHECKING(for Cython module)
ASTRA_TRY_PYTHON([
import Cython
-from distutils.version import LooseVersion
-assert(LooseVersion(Cython.__version__)>=LooseVersion("0.13"))
+from pkg_resources import parse_version
+assert(parse_version(Cython.__version__) >= parse_version("0.13"))
],,HAVEPYTHON=no)
if test x$HAVEPYTHON = xno; then
AC_MSG_RESULT(no)
@@ -234,14 +250,20 @@ AC_SUBST(HAVEPYTHON)
AC_CANONICAL_HOST
case $host_os in
darwin* )
- CPPFLAGS_OS="-stdlib=libstdc++ -mmacosx-version-min=10.6"
+ CXXFLAGS_OS="-stdlib=libstdc++ -mmacosx-version-min=10.6"
+ LDFLAGS_OS="-stdlib=libstdc++"
+ IS_MACOS=yes
;;
*)
- CPPFLAGS_OS=""
+ CXXFLAGS_OS=""
+ LDFLAGS_OS=""
+ IS_MACOS=no
;;
esac
-AC_SUBST(CPPFLAGS_OS)
+AC_SUBST(CXXFLAGS_OS)
+AC_SUBST(LDFLAGS_OS)
+AC_SUBST(IS_MACOS)
# For some reason, some older versions of autoconf produce a config.status
# that disables all lines looking like VPATH=@srcdir@
@@ -250,6 +272,15 @@ AC_SUBST(CPPFLAGS_OS)
VPATH_SRCDIR="$srcdir"
AC_SUBST(VPATH_SRCDIR)
+
+# Installation type
+AC_ARG_WITH(install-type, [[ --with-install-type=prefix|module|dir type of installation (default prefix)]],,with_install_type=prefix)
+
+INSTALL_TYPE=$with_install_type
+AC_SUBST(INSTALL_TYPE)
+
+
+
# TODO:
# Detection of tools:
@@ -269,9 +300,46 @@ AC_OUTPUT
echo
echo "Summary of ASTRA Toolbox build options:"
-echo " CUDA : $HAVECUDA"
-echo " Matlab : $HAVEMATLAB"
-echo " Python : $HAVEPYTHON"
-echo
-echo " prefix : $prefix"
+echo " CUDA : $HAVECUDA"
+echo " Matlab: $HAVEMATLAB"
+echo " Octave: $HAVEOCTAVE"
+echo " Python: $HAVEPYTHON"
echo
+echo "Installation type: $with_install_type"
+case $with_install_type in
+ prefix)
+ echo " Library : "$(eval echo `eval echo $libdir`)
+ if test $HAVEMATLAB = yes; then
+ echo " Matlab files: "$(eval echo `eval echo $datadir`)"/astra/matlab"
+ fi
+ if test $HAVEOCTAVE = yes; then
+ echo " Octave files: "$(eval echo `eval echo $datadir`)"/astra/octave"
+ fi
+ if test $HAVEPYTHON = yes; then
+ echo " Python files to site-packages"
+ fi
+ ;;
+ dir)
+ echo " Library : "$(eval echo `eval echo $libdir`)
+ if test $HAVEMATLAB = yes; then
+ echo " Matlab files: $prefix/matlab"
+ fi
+ if test $HAVEOCTAVE = yes; then
+ echo " Octave files: $prefix/octave"
+ fi
+ if test $HAVEPYTHON = yes; then
+ echo " Python files: $prefix/python"
+ fi
+ ;;
+ module)
+ echo " Library into Matlab/Octave/Python module directories"
+ if test $HAVEMATLAB = yes; then
+ echo " Matlab files: $prefix/matlab"
+ fi
+ if test $HAVEOCTAVE = yes; then
+ echo " Octave files: $prefix/octave"
+ fi
+ if test $HAVEPYTHON = yes; then
+ echo " Python files to site-packages"
+ fi
+esac