summaryrefslogtreecommitdiffstats
path: root/build/linux
diff options
context:
space:
mode:
Diffstat (limited to 'build/linux')
-rw-r--r--build/linux/Makefile.in45
-rw-r--r--build/linux/acinclude.m427
-rwxr-xr-xbuild/linux/autogen.sh7
-rw-r--r--build/linux/configure.ac148
4 files changed, 156 insertions, 71 deletions
diff --git a/build/linux/Makefile.in b/build/linux/Makefile.in
index 5b4c9fa..6620446 100644
--- a/build/linux/Makefile.in
+++ b/build/linux/Makefile.in
@@ -1,5 +1,7 @@
cuda=@HAVECUDA@
matlab=@HAVEMATLAB@
+python=@HAVEPYTHON@
+
MATLAB_ROOT=@MATLAB_ROOT@
@@ -9,6 +11,10 @@ ifeq ($(matlab),yes)
TARGETS+=mex
endif
+ifeq ($(python),yes)
+TARGETS+=py
+endif
+
all: $(TARGETS)
prefix=@prefix@
@@ -40,6 +46,14 @@ CXXFLAGS+=-fopenmp
LDFLAGS+=-fopenmp
endif
+ifeq ($(python),yes)
+PYCPPFLAGS = ${CPPFLAGS}
+PYCPPFLAGS += -I../include
+PYLDFLAGS = ${LDFLAGS}
+PYLDFLAGS += -L../build/linux/.libs
+PYTHON = @PYTHON@
+endif
+
BOOST_CPPFLAGS=
BOOST_LDFLAGS=
@@ -54,7 +68,7 @@ LD=@CXX@
SHELL=@SHELL@
ifeq ($(matlab),yes)
-MEXFLAGS = -cxx
+MEXFLAGS = -cxx
MEXLDFLAGS='$$LDFLAGS $(LDFLAGS)'
MEXLIBS = -L.libs -lut
MEXSUFFIX = @MEXSUFFIX@
@@ -227,6 +241,14 @@ mex: $(MATLAB_MEX)
$(MEX) LDFLAGS=$(MEXLDFLAGS) $(MEXFLAGS) $(LIBS) $(MEXLIBS) -lastra -output $* $*.o $(MATLAB_CXX_OBJECTS)
endif
+ifeq ($(python),yes)
+py: libastra.la
+ cd ../../python; CPPFLAGS="${PYCPPFLAGS}" LDFLAGS="${PYLDFLAGS}" $(PYTHON) builder.py install \
+ --install-base=./finalbuild --install-headers=./finalbuild --install-purelib=./finalbuild \
+ --install-platlib=./finalbuild --install-scripts=./finalbuild --install-data=./finalbuild
+endif
+
+
libastra.la: $(ALL_OBJECTS)
./libtool --mode=link --tag=CXX $(LD) -rpath $(LIBDIR) -o $@ $(LDFLAGS) $(LIBS) $+
@@ -279,6 +301,8 @@ clean:
rm -f $(addsuffix /*.d,$(DEPDIRS))
rm -f $(addsuffix /*,$(LIBDIRS))
rm -f $(TEST_OBJECTS) test.bin
+ rm -fr ../../python/finalbuild/
+ rm -fr ../../python/build/
distclean: clean
rm -f config.guess config.sub ltmain.sh libtool install-sh
@@ -287,7 +311,7 @@ distclean: clean
rm -rf autom4te.cache
rm -f configure Makefile
-install: install-libraries install-matlab
+install: install-libraries install-matlab install-python
install-libraries: libastra.la
./install-sh -m 755 -d @libdir@
@@ -307,6 +331,23 @@ else
install-matlab:
endif
+ifeq ($(python),yes)
+# TODO: This install location doesn't work well for /usr or /usr/local
+install-python: py
+ ./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 644 ../../python/finalbuild/astra/*.py @prefix@/python/astra
+ ./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
+else
+install-python:
+endif
+
Makefile: Makefile.in config.status
CONFIG_HEADERS= CONFIG_LINKS= CONFIG_FILES=$@ $(SHELL) ./config.status
diff --git a/build/linux/acinclude.m4 b/build/linux/acinclude.m4
index 4ff9e4b..e4b6de7 100644
--- a/build/linux/acinclude.m4
+++ b/build/linux/acinclude.m4
@@ -60,10 +60,28 @@ AC_DEFUN([ASTRA_RUN_STOREOUTPUT],[{
test $ac_status = 0;
}])
-dnl ASTRA_RUN(command)
-AC_DEFUN([ASTRA_RUN],[ASTRA_RUN_STOREOUTPUT($1,/dev/null)])
+dnl ASTRA_RUN_LOGOUTPUT(command)
+AC_DEFUN([ASTRA_RUN_LOGOUTPUT],[{
+ AS_ECHO(["$as_me:${as_lineno-$LINENO}: $1"]) >&AS_MESSAGE_LOG_FD
+ ( $1 ) >&AS_MESSAGE_LOG_FD 2>&1
+ ac_status=$?
+ AS_ECHO(["$as_me:${as_lineno-$LINENO}: \$? = $ac_status"]) >&AS_MESSAGE_LOG_FD
+ test $ac_status = 0;
+ }])
+dnl ASTRA_TRY_PYTHON(code, action-if-ok, action-if-not-ok)
+AC_DEFUN([ASTRA_TRY_PYTHON],[
+cat >conftest.py <<_ACEOF
+$1
+_ACEOF
+ASTRA_RUN_LOGOUTPUT($PYTHON conftest.py)
+AS_IF([test $? = 0],[$2],[
+ AS_ECHO(["$as_me: failed program was:"]) >&AS_MESSAGE_LOG_FD
+ sed 's/^/| /' conftest.py >&AS_MESSAGE_LOG_FD
+ $3])
+])
+
dnl ASTRA_CHECK_NVCC(variable-to-set,cppflags-to-set)
AC_DEFUN([ASTRA_CHECK_NVCC],[
@@ -79,9 +97,9 @@ ASTRA_RUN_STOREOUTPUT([$NVCC -c -o conftest.o conftest.cu $$2],conftest.nvcc.out
$1="no"
# Check if hack for gcc 4.4 helps
if grep -q __builtin_stdarg_start conftest.nvcc.out; then
+ AS_ECHO(["$as_me:${as_lineno-$LINENO}: Trying CUDA hack for gcc 4.4"]) >&AS_MESSAGE_LOG_FD
NVCC_OPT="-Xcompiler -D__builtin_stdarg_start=__builtin_va_start"
-
- ASTRA_RUN([$NVCC -c -o conftest.o conftest.cu $$2 $NVCC_OPT]) && {
+ ASTRA_RUN_LOGOUTPUT([$NVCC -c -o conftest.o conftest.cu $$2 $NVCC_OPT]) && {
$1="yes"
$2="$$2 $NVCC_OPT"
}
@@ -94,6 +112,7 @@ fi
rm -f conftest.cu conftest.o conftest.nvcc.out
])
+
dnl ASTRA_FIND_NVCC_ARCHS(archs-to-try,cppflags-to-extend,output-list)
dnl Architectures should be of the form 10,20,30,35,
dnl and should be in order. The last accepted one will be used for PTX output.
diff --git a/build/linux/autogen.sh b/build/linux/autogen.sh
index c856793..544fdeb 100755
--- a/build/linux/autogen.sh
+++ b/build/linux/autogen.sh
@@ -12,9 +12,12 @@ if test $? -ne 0; then
exit 1
fi
-libtoolize --install --force > /dev/null 2>&1
+case `uname` in Darwin*) LIBTOOLIZEBIN=glibtoolize ;;
+ *) LIBTOOLIZEBIN=libtoolize ;; esac
+
+$LIBTOOLIZEBIN --install --force > /dev/null 2>&1
if test $? -ne 0; then
- libtoolize --force
+ $LIBTOOLIZEBIN --force
if test $? -ne 0; then
echo "Error running libtoolize"
exit 1
diff --git a/build/linux/configure.ac b/build/linux/configure.ac
index cbf6016..b97a7a0 100644
--- a/build/linux/configure.ac
+++ b/build/linux/configure.ac
@@ -1,26 +1,26 @@
dnl -----------------------------------------------------------------------
dnl Copyright: 2010-2015, iMinds-Vision Lab, University of Antwerp
dnl 2014-2015, CWI, Amsterdam
-dnl
+dnl
dnl Contact: astra@uantwerpen.be
dnl Website: http://sf.net/projects/astra-toolbox
-dnl
+dnl
dnl This file is part of the ASTRA Toolbox.
-dnl
-dnl
+dnl
+dnl
dnl The ASTRA Toolbox is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version.
-dnl
+dnl
dnl The ASTRA Toolbox is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
-dnl
+dnl
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 -----------------------------------------------------------------------
dnl $Id$
@@ -48,32 +48,6 @@ dnl Use iostream to check if the C++ compiler works
AC_CHECK_HEADER(iostream, , AC_MSG_ERROR([No working c++ compiler found]))
-# clock_gettime
-
-AC_MSG_CHECKING([for clock_gettime])
-AC_TRY_LINK([
-#include <ctime>
-],[
-struct timespec t; clock_gettime(CLOCK_REALTIME, &t);
-],astra_clock_gettime_ok=yes,astra_clock_gettime_ok=no)
-AC_MSG_RESULT($astra_clock_gettime_ok)
-if test x$astra_clock_gettime_ok = xno; then
- AC_MSG_CHECKING([for clock_gettime in librt])
- LIBS="$LIBS -lrt"
- AC_TRY_LINK([
- #include <ctime>
- ],[
- struct timespec t; clock_gettime(CLOCK_REALTIME, &t);
- ],astra_clock_gettime_ok=yes,astra_clock_gettime_ok=no)
- AC_MSG_RESULT($astra_clock_gettime_ok)
- if test x$astra_clock_gettime_ok = xno; then
- AC_MSG_ERROR([No clock_gettime found])
- else
- SAVED_LIBS="$SAVED_LIBS -lrt"
- fi
-fi
-
-
# boost-unit-test-framework
AC_MSG_CHECKING([for boost-unit-test-framework])
@@ -81,7 +55,7 @@ AC_MSG_CHECKING([for boost-unit-test-framework])
ASTRA_CHECK_BOOST_UNIT_TEST_FRAMEWORK(-lboost_unit_test_framework-mt, BOOSTUTF=yes_mt, BOOSTUTF=no)
if test x$BOOSTUTF = xno; then
ASTRA_CHECK_BOOST_UNIT_TEST_FRAMEWORK(-lboost_unit_test_framework, BOOSTUTF=yes, BOOSTUTF=no)
- if test x$BOOSTTHREAD = xno; then
+ if test x$BOOSTUTF = xno; then
AC_MSG_RESULT(no)
AC_MSG_ERROR([No boost-unit-test-framework library found])
else
@@ -92,48 +66,41 @@ else
AC_MSG_RESULT([yes, libboost_unit_test_framework-mt])
LIBS_BOOSTUTF="-lboost_unit_test_framework-mt"
fi
-# TODO: do something with the result
# nvcc, cuda
AC_ARG_WITH(cuda, [[ --with-cuda=path path of CUDA SDK (optional)]],,)
-NVCC_PATH=$PATH
-if test x"$with_cuda" != x; then
- NVCC_PATH="$with_cuda/bin:$NVCC_PATH"
+if test x"$with_cuda" != xno; then
+ NVCC_PATH=$PATH
+ if test x"$with_cuda" != x -a x"$with_cuda" != xyes; then
+ NVCC_PATH="$with_cuda/bin:$NVCC_PATH"
+ fi
+ AC_PATH_PROG([NVCC], [nvcc], [no], [$NVCC_PATH])
+else
+ NVCC=no
fi
-AC_PATH_PROG([NVCC], [nvcc], [no], [$NVCC_PATH])
-# TODO: do something with the result
HAVECUDA=no
if test x"$NVCC" != xno; then
HAVECUDA=yes
BACKUP_CUDA_LDFLAGS="$LDFLAGS"
- if test x"$with_cuda" != x; then
- LDFLAGS_CUDA="-L$with_cuda/lib"
+ 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
CPPFLAGS_CUDA="-I$with_cuda/include"
LDFLAGS="$LDFLAGS $LDFLAGS_CUDA"
fi
AC_CHECK_LIB(cudart,cudaMalloc, ,HAVECUDA=no)
AC_CHECK_LIB(cufft,cufftPlan1d, ,HAVECUDA=no)
- if test x"$HAVECUDA" = xno; then
- # try lib64 instead of lib
-
- HAVECUDA=yes
- LDFLAGS="$BACKUP_CUDA_LDFLAGS"
-
- # prevent cached values from being used
- unset ac_cv_lib_cudart_cudaMalloc
- unset ac_cv_lib_cufft_cufftPlan1d
-
- LDFLAGS_CUDA="-L$with_cuda/lib64"
- LDFLAGS="$LDFLAGS $LDFLAGS_CUDA"
- AC_CHECK_LIB(cudart,cudaMalloc, ,HAVECUDA=no)
- AC_CHECK_LIB(cufft,cufftPlan1d, ,HAVECUDA=no)
- fi
-
LDFLAGS="$BACKUP_CUDA_LDFLAGS"
unset BACKUP_CUDA_LDFLAGS
# TODO: check for cuda headers?
@@ -142,11 +109,11 @@ if test x"$NVCC" != xno; then
fi
NVCCFLAGS=""
-AC_MSG_CHECKING([if nvcc works])
if test x"$HAVECUDA" = xyes; then
+ AC_MSG_CHECKING([if nvcc works])
ASTRA_CHECK_NVCC(HAVECUDA,NVCCFLAGS)
+ AC_MSG_RESULT($HAVECUDA)
fi
-AC_MSG_RESULT($HAVECUDA)
AC_ARG_WITH(cuda_compute, [[ --with-cuda-compute=archs comma separated list of CUDA compute models (optional)]],,)
if test x"$HAVECUDA" = xyes; then
@@ -181,7 +148,7 @@ if test x"$with_matlab" != x; then
AC_SUBST(MEX)
MATLAB_ROOT="$with_matlab"
AC_SUBST(MATLAB_ROOT)
-
+ # TODO: maybe catch mex warnings
ASTRA_CHECK_MEX_SUFFIX([mexa64 mexglx mexmaci64 mexmaci],[MEXSUFFIX])
if test x$MEXSUFFIX = x; then
AC_MSG_FAILURE([Unable to determine matlab mex suffix])
@@ -193,6 +160,54 @@ fi
AC_SUBST(HAVEMATLAB)
+# python
+
+AC_ARG_WITH(python, [[ --with-python=path path of Python binary (optional)]],,)
+
+HAVEPYTHON=no
+if test x"$with_python" != x -a x"$with_python" != xno; then
+ if test x"$with_python" = xyes; then
+ PYTHON=python
+ else
+ PYTHON="$with_python"
+ fi
+ AC_MSG_CHECKING(for python)
+ ASTRA_RUN_LOGOUTPUT(echo 'import sys' | $PYTHON -)
+ if test $? -ne 0; then
+ AC_MSG_ERROR(Python binary not found)]
+ fi
+ AC_MSG_RESULT([$PYTHON])
+ HAVEPYTHON=yes
+ AC_SUBST(PYTHON)
+ AC_MSG_CHECKING(for numpy module)
+ ASTRA_TRY_PYTHON([import numpy],,HAVEPYTHON=no)
+ if test x$HAVEPYTHON = xno; then
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(You need the numpy module to use the ASTRA toolbox in Python)
+ fi
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING(for Cython module)
+ ASTRA_TRY_PYTHON([
+import Cython
+from distutils.version import LooseVersion
+assert(LooseVersion(Cython.__version__)>=LooseVersion("0.13"))
+],,HAVEPYTHON=no)
+ if test x$HAVEPYTHON = xno; then
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(You need the Cython module (version >=0.13) to use the ASTRA toolbox in Python)
+ fi
+ AC_MSG_RESULT(yes)
+ AC_MSG_CHECKING(for six module)
+ ASTRA_TRY_PYTHON([import six])
+ if test x$HAVEPYTHON = xno; then
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(You need the six module to use the ASTRA toolbox in Python)
+ fi
+ AC_MSG_RESULT(yes)
+fi
+
+AC_SUBST(HAVEPYTHON)
+
# TODO:
@@ -207,7 +222,14 @@ AC_SUBST(SAVED_CPPFLAGS)
AC_SUBST(SAVED_CXXFLAGS)
AC_SUBST(SAVED_LDFLAGS)
AC_SUBST(SAVED_LIBS)
-
-
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
+
+echo
+echo "Summary of ASTRA Toolbox build options:"
+echo " CUDA : $HAVECUDA"
+echo " Matlab : $HAVEMATLAB"
+echo " Python : $HAVEPYTHON"
+echo
+echo " prefix : $prefix"
+echo