瀏覽代碼

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 年之前
父節點
當前提交
b013575a2b
共有 8 個文件被更改,包括 1131 次插入750 次删除
  1. 1045 743
      configure
  2. 66 0
      configure.in
  3. 2 2
      include/Make/Grass.make
  4. 7 0
      include/Make/Platform.make.in
  5. 3 2
      lib/gmath/Makefile
  6. 3 1
      lib/gmath/test/Makefile
  7. 3 1
      lib/gpde/Makefile
  8. 2 1
      lib/gpde/test/Makefile

文件差異過大導致無法顯示
+ 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(regex, regex)
 LOC_ARG_WITH(pthread, POSIX threads, no)
+LOC_ARG_WITH(openmp, OpenMP, no)
 
 AC_ARG_WITH(gdal,
 [  --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_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
 
 # With includes option
@@ -1780,6 +1784,67 @@ AC_SUBST(USE_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)
 dnl Check for large file support
 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(OGR support,USE_OGR)
 LOC_MSG_USE(OpenGL support,USE_OPENGL)
+LOC_MSG_USE(OpenMP support,USE_OPENMP)
 LOC_MSG_USE(PNG support,USE_PNG)
 LOC_MSG_USE(PostgreSQL support,USE_POSTGRES)
 LOC_MSG_USE(Readline support,USE_READLINE)

+ 2 - 2
include/Make/Grass.make

@@ -197,8 +197,8 @@ DSPFDEPS         = $(GISLIB)
 FORMDEPS         = $(DBMILIB) $(GISLIB)
 RASTER3DDEPS          = $(RASTERLIB) $(GISLIB) $(XDRLIB)
 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)
 HTMLDRIVERDEPS   = $(DRIVERLIB) $(GISLIB) $(MATHLIB)
 IMAGERYDEPS      = $(GISLIB) $(MATHLIB)

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

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

+ 3 - 2
lib/gmath/Makefile

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

+ 3 - 1
lib/gmath/test/Makefile

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

+ 3 - 1
lib/gpde/Makefile

@@ -1,6 +1,8 @@
 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)
 

+ 2 - 1
lib/gpde/test/Makefile

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