Przeglądaj źródła

add build support for OpenMP (https://trac.osgeo.org/grass/ticket/657)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@49652 15284696-431f-4ddb-bdfa-cd5b030d7da7
Hamish Bowman 13 lat temu
rodzic
commit
b013575a2b

Plik diff jest za duży
+ 1045 - 743
configure


+ 66 - 0
configure.in

@@ -261,6 +261,7 @@ LOC_ARG_WITH(readline, Readline, no)
 LOC_ARG_WITH(opendwg, openDWG, no)
 LOC_ARG_WITH(opendwg, openDWG, no)
 LOC_ARG_WITH(regex, regex)
 LOC_ARG_WITH(regex, regex)
 LOC_ARG_WITH(pthread, POSIX threads, no)
 LOC_ARG_WITH(pthread, POSIX threads, no)
+LOC_ARG_WITH(openmp, OpenMP, no)
 
 
 AC_ARG_WITH(gdal,
 AC_ARG_WITH(gdal,
 [  --with-gdal[=path/gdal-config]
 [  --with-gdal[=path/gdal-config]
@@ -359,6 +360,9 @@ LOC_ARG_WITH_LIB(regex, regex)
 LOC_ARG_WITH_INC(pthread, POSIX threads)
 LOC_ARG_WITH_INC(pthread, POSIX threads)
 LOC_ARG_WITH_LIB(pthread, POSIX threads)
 LOC_ARG_WITH_LIB(pthread, POSIX threads)
 
 
+LOC_ARG_WITH_INC(openmp, OpenMP)
+LOC_ARG_WITH_LIB(openmp, OpenMP)
+
 # Put this early on so CPPFLAGS and LDFLAGS have any additional dirs
 # Put this early on so CPPFLAGS and LDFLAGS have any additional dirs
 
 
 # With includes option
 # With includes option
@@ -1780,6 +1784,67 @@ AC_SUBST(USE_PTHREAD)
 
 
 # Done checking pthread
 # Done checking pthread
 
 
+# Enable OpenMP option
+
+LOC_CHECK_USE(openmp,OpenMP,USE_OPENMP)
+
+OMPINCPATH=
+OMPLIBPATH=
+OMPLIB=
+OMPCFLAGS=
+
+if test -n "$USE_OPENMP"; then
+
+# With OpenMP includes directory
+
+LOC_CHECK_INC_PATH(openmp,OpenMP,OMPINCPATH)
+
+LOC_CHECK_INCLUDES(omp.h,OpenMP,$OMPINCPATH)
+
+# With OpenMP library directory
+# GCC et al.: -lgomp
+# Solaris cc: -lmtsk
+# AIX xlc: -lxlsmp
+# SGI IRIX 6.5 MIPSpro C/C++: -lmp
+
+LOC_CHECK_LIB_PATH(gomp,OpenMP,OMPLIBPATH)
+
+LOC_CHECK_FUNC(GOMP_parallel_start,OpenMP functions,OMPLIB,,,,,[
+LOC_CHECK_LIBS(gomp,GOMP_parallel_start,OpenMP,$OMPLIBPATH,OMPLIB,,,)
+])
+
+# compiler dependent
+#if test ${CC} = "gcc" ; then
+if test x$GCC = xyes ; then
+	# GNU C compiler (>= 4.2.1)
+	OMPCFLAGS=-fopenmp
+elif test ${CC} = "icc" ; then
+	# Intel compiler
+	OMPCFLAGS=-openmp
+elif test ${CC} = "opencc" ; then
+	# AMD's x86 Open64 compiler
+	OMPCFLAGS=-mp
+elif test ${CC} = "pgcc" ; then
+	# Portland Group's compiler
+	OMPCFLAGS=-mp
+# ... anybody else?
+fi
+
+# try to build a test program with "$CC $OMPCLFAGS" to confirm it works
+#...how?
+#echo "int main() {return 0;}" > test.c 
+#$CC $OMPCLFAGS test.c -o test
+
+fi # $USE_OPENMP
+
+AC_SUBST(OMPINCPATH)
+AC_SUBST(OMPLIBPATH)
+AC_SUBST(OMPLIB)
+AC_SUBST(OMPCFLAGS)
+AC_SUBST(USE_OPENMP)
+
+# Done checking OpenMP
+
 # Enable LFS (from cdr-tools)
 # Enable LFS (from cdr-tools)
 dnl Check for large file support
 dnl Check for large file support
 dnl Do this last to make sure that no large file definition
 dnl Do this last to make sure that no large file definition
@@ -1951,6 +2016,7 @@ LOC_MSG_USE(NLS support,USE_NLS)
 LOC_MSG_USE(ODBC support,USE_ODBC)
 LOC_MSG_USE(ODBC support,USE_ODBC)
 LOC_MSG_USE(OGR support,USE_OGR)
 LOC_MSG_USE(OGR support,USE_OGR)
 LOC_MSG_USE(OpenGL support,USE_OPENGL)
 LOC_MSG_USE(OpenGL support,USE_OPENGL)
+LOC_MSG_USE(OpenMP support,USE_OPENMP)
 LOC_MSG_USE(PNG support,USE_PNG)
 LOC_MSG_USE(PNG support,USE_PNG)
 LOC_MSG_USE(PostgreSQL support,USE_POSTGRES)
 LOC_MSG_USE(PostgreSQL support,USE_POSTGRES)
 LOC_MSG_USE(Readline support,USE_READLINE)
 LOC_MSG_USE(Readline support,USE_READLINE)

+ 2 - 2
include/Make/Grass.make

@@ -197,8 +197,8 @@ DSPFDEPS         = $(GISLIB)
 FORMDEPS         = $(DBMILIB) $(GISLIB)
 FORMDEPS         = $(DBMILIB) $(GISLIB)
 RASTER3DDEPS          = $(RASTERLIB) $(GISLIB) $(XDRLIB)
 RASTER3DDEPS          = $(RASTERLIB) $(GISLIB) $(XDRLIB)
 GISDEPS          = $(DATETIMELIB) $(ZLIBLIBPATH) $(ZLIB) $(INTLLIB) $(REGEXLIBPATH) $(REGEXLIB) $(ICONVLIB) $(PTHREADLIBPATH) $(PTHREADLIB) $(MATHLIB)
 GISDEPS          = $(DATETIMELIB) $(ZLIBLIBPATH) $(ZLIB) $(INTLLIB) $(REGEXLIBPATH) $(REGEXLIB) $(ICONVLIB) $(PTHREADLIBPATH) $(PTHREADLIB) $(MATHLIB)
-GMATHDEPS        = $(GISLIB) $(FFTWLIB) $(LAPACKLIB) $(BLASLIB) $(CCMATHLIB)
-GPDEDEPS         = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB) $(GMATHLIB) $(MATHLIB)
+GMATHDEPS        = $(GISLIB) $(FFTWLIB) $(LAPACKLIB) $(BLASLIB) $(CCMATHLIB) $(OMPLIBPATH) $(OMPLIB)
+GPDEDEPS         = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB) $(GMATHLIB) $(OMPLIBPATH) $(OMPLIB) $(MATHLIB)
 GPROJDEPS        = $(GISLIB) $(GDALLIBS) $(PROJLIB) $(MATHLIB)
 GPROJDEPS        = $(GISLIB) $(GDALLIBS) $(PROJLIB) $(MATHLIB)
 HTMLDRIVERDEPS   = $(DRIVERLIB) $(GISLIB) $(MATHLIB)
 HTMLDRIVERDEPS   = $(DRIVERLIB) $(GISLIB) $(MATHLIB)
 IMAGERYDEPS      = $(GISLIB) $(MATHLIB)
 IMAGERYDEPS      = $(GISLIB) $(MATHLIB)

+ 7 - 0
include/Make/Platform.make.in

@@ -241,6 +241,13 @@ PTHREADLIBPATH      = @PTHREADLIBPATH@
 PTHREADLIB          = @PTHREADLIB@
 PTHREADLIB          = @PTHREADLIB@
 USE_PTHREAD         = @USE_PTHREAD@
 USE_PTHREAD         = @USE_PTHREAD@
 
 
+#OpenMP
+OMPINCPATH          = @OMPINCPATH@
+OMPLIBPATH          = @OMPLIBPATH@
+OMPLIB              = @OMPLIB@
+OMPCFLAGS           = @OMPCFLAGS@
+USE_OPENMP          = @USE_OPENMP@
+
 #i18N
 #i18N
 HAVE_NLS            = @HAVE_NLS@
 HAVE_NLS            = @HAVE_NLS@
 
 

+ 3 - 2
lib/gmath/Makefile

@@ -1,7 +1,8 @@
 MODULE_TOPDIR = ../..
 MODULE_TOPDIR = ../..
 
 
-
-EXTRA_CFLAGS = $(FFTWINC)
+EXTRA_LIBS = $(OMPLIB)
+EXTRA_CFLAGS = $(FFTWINC) $(OMPCFLAGS)
+# needed? $(OMPLIBPATH)
 
 
 LIB = GMATH
 LIB = GMATH
 
 

+ 3 - 1
lib/gmath/test/Makefile

@@ -2,8 +2,10 @@ MODULE_TOPDIR = ../../..
 
 
 PGM=test.gmath.lib
 PGM=test.gmath.lib
 
 
-LIBES = $(GISLIB) $(GMATHLIB) 
+LIBES = $(GISLIB) $(GMATHLIB) $(OMPLIB)
 DEPENDENCIES = $(GISDEP) $(GMATHDEP)
 DEPENDENCIES = $(GISDEP) $(GMATHDEP)
+EXTRA_CFLAGS = $(OMPCFLAGS)
+
 include $(MODULE_TOPDIR)/include/Make/Module.make
 include $(MODULE_TOPDIR)/include/Make/Module.make
 
 
 default: cmd
 default: cmd

+ 3 - 1
lib/gpde/Makefile

@@ -1,6 +1,8 @@
 MODULE_TOPDIR = ../..
 MODULE_TOPDIR = ../..
 
 
-EXTRA_LIBS=$(GISLIB) $(RASTERLIB) $(RASTER3DLIB) $(GMATHLIB) $(MATHLIB)
+EXTRA_LIBS=$(GISLIB) $(RASTERLIB) $(RASTER3DLIB) $(GMATHLIB) $(OMPLIB) $(MATHLIB)
+EXTRA_CFLAGS = $(OMPCFLAGS)
+# needed? $(OMPLIBPATH)
 
 
 LIB_NAME = $(GPDE_LIBNAME)
 LIB_NAME = $(GPDE_LIBNAME)
 
 

+ 2 - 1
lib/gpde/test/Makefile

@@ -2,8 +2,9 @@ MODULE_TOPDIR = ../../..
 
 
 PGM=test.gpde.lib
 PGM=test.gpde.lib
 
 
-LIBES = $(GISLIB) $(RASTER3DLIB) $(GPDELIB) $(GMATHLIB)
+LIBES = $(GISLIB) $(RASTER3DLIB) $(GPDELIB) $(OMPLIB) $(GMATHLIB)
 DEPENDENCIES = $(GISDEP) $(RASTER3DDEP) $(GPDEDEP)
 DEPENDENCIES = $(GISDEP) $(RASTER3DDEP) $(GPDEDEP)
+EXTRA_CFLAGS = $(OMPCFLAGS)
 
 
 include $(MODULE_TOPDIR)/include/Make/Module.make
 include $(MODULE_TOPDIR)/include/Make/Module.make