diff --git a/CMakeLists.txt b/CMakeLists.txt index 9117465aff1c22fb2de6eade9113f8db22fb052b..277e049b79e710c085c0917cc5a74fa00a60c6f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,6 @@ project(gmsh CXX C) option(ENABLE_ANN "Enable ANN to compute Approximate Nearest Neighbors" ON) option(ENABLE_BLAS_LAPACK "Use BLAS/Lapack for basic linear algebra" ON) -option(ENABLE_BLAS_INTEL "Use Intel Blas/Lapack " OFF) option(ENABLE_CGNS "Enable CGNS mesh export" OFF) option(ENABLE_CHACO "Enable Chaco mesh partitioner" ON) option(ENABLE_DINTEGRATION "Enable discrete integration and levelsets" ON) @@ -52,8 +51,7 @@ set(GMSH_VERSION "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}") set(GMSH_VERSION "${GMSH_VERSION}.${GMSH_PATCH_VERSION}${GMSH_EXTRA_VERSION}") set(GMSH_SHORT_LICENSE "GNU General Public License") -list(APPEND GMSH_API -#set(GMSH_API +set(GMSH_API ${CMAKE_BINARY_DIR}/Common/GmshConfig.h ${CMAKE_BINARY_DIR}/Common/GmshVersion.h Common/Gmsh.h Common/GmshDefines.h Common/GmshMessage.h Common/VertexArray.h @@ -74,12 +72,8 @@ list(APPEND GMSH_API Post/PView.h Post/PViewData.h Plugin/PluginManager.h Graphics/drawContext.h contrib/kbipack/gmp_normal_form.h contrib/kbipack/gmp_matrix.h - contrib/kbipack/gmp_blas.h) -if(ENABLE_DINTEGRATION) -list(APPEND GMSH_API contrib/DiscreteIntegration/DILevelset.h) -#set(GMSH_API ${GMSH_API} contrib/DiscreteIntegration/DILevelset.h) -endif(ENABLE_DINTEGRATION) - + contrib/kbipack/gmp_blas.h + contrib/DiscreteIntegration/DILevelset.h) execute_process(COMMAND date "+%Y%m%d" OUTPUT_VARIABLE DATE OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -125,21 +119,44 @@ macro(append_gmsh_src DIRECTORY_NAME SRC_FILES) endmacro(append_gmsh_src) if(ENABLE_BLAS_LAPACK) - if(WIN32) - # on Windows first try to get the libs in CMAKE_PREFIX without - # further checks (useful for Visual C++ users who don't have a - # Fortran compiler, and who can just download our precompiled - # "gmsh-dep" package) - find_library(EASY_LAPACK lapack ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - find_library(EASY_BLAS blas ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - find_library(EASY_G2C g2c ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - find_library(EASY_GCC gcc ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - if(EASY_LAPACK AND EASY_BLAS AND EASY_G2C AND EASY_GCC) - set(LAPACK_LIBRARIES ${EASY_LAPACK} ${EASY_BLAS} ${EASY_G2C} ${EASY_GCC}) - set(HAVE_BLAS TRUE) - set(HAVE_LAPACK TRUE) - list(APPEND CONFIG_OPTIONS "RefBlas" "RefLapack") - endif(EASY_LAPACK AND EASY_BLAS AND EASY_G2C AND EASY_GCC) + if(MSVC) + # on Windows with Visual C++ try really hard to find blas/lapack + # *without* requiring a Fortran compiler: 1) first try to get the + # Intel MKL in MKL_PREFIX_PATH; if failed 2) try to to get the + # reference blas/lapack libs in CMAKE_PREFIX_PATH (useful for + # users with no Fortan compiler and no MKL license, who can just + # download our precompiled "gmsh-dep" package) + if(MKL_PREFIX_PATH) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(MKL_PATH ${MKL_PREFIX_PATH}/em64t/lib) + else(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(MKL_PATH ${MKL_PREFIX_PATH}/ia32/lib) + endif(CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library(LIBGUIDE libguide ${MKL_PATH}) + find_library(MKL_C mkl_c PATHS ${MKL_PATH}) + find_library(MKL_INTEL_C mkl_intel_c ${MKL_PATH}) + find_library(MKL_INTEL_THREAD mkl_intel_thread ${MKL_PATH}) + find_library(MKL_CORE mkl_core ${MKL_PATH}) + if(LIBGUIDE AND MKL_C AND MKL_INTEL_C AND MKL_INTEL_THREAD AND MKL_CORE) + set(LAPACK_LIBRARIES ${LIBGUIDE} ${MKL_C} ${MKL_INTEL_C} + ${MKL_INTEL_THREAD} ${MKL_CORE}) + set(HAVE_BLAS TRUE) + set(HAVE_LAPACK TRUE) + list(APPEND CONFIG_OPTIONS "IntelBlas" "IntelLapack") + endif(LIBGUIDE AND MKL_C AND MKL_INTEL_C AND MKL_INTEL_THREAD AND MKL_CORE) + endif(MKL_PREFIX_PATH) + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) + find_library(REF_LAPACK lapack ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(REF_BLAS blas ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(REF_G2C g2c ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(REF_GCC gcc ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + if(REF_LAPACK AND REF_BLAS AND REF_G2C AND REF_GCC) + set(LAPACK_LIBRARIES ${REF_LAPACK} ${REF_BLAS} ${REF_G2C} ${REF_GCC}) + set(HAVE_BLAS TRUE) + set(HAVE_LAPACK TRUE) + list(APPEND CONFIG_OPTIONS "RefBlas" "RefLapack") + endif(REF_LAPACK AND REF_BLAS AND REF_G2C AND REF_GCC) + endif(NOT HAVE_BLAS OR NOT HAVE_LAPACK) elseif(APPLE) # on Mac we know blas and lapack are available, so don't force users # to install a Fortran compiler @@ -147,8 +164,8 @@ if(ENABLE_BLAS_LAPACK) set(HAVE_BLAS TRUE) set(HAVE_LAPACK TRUE) list(APPEND CONFIG_OPTIONS "Blas" "Lapack") - endif(WIN32) - if(NOT HAVE_BLAS OR NOT HAVE_LAPACK AND NOT ENABLE_BLAS_INTEL) + endif(MSVC) + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) enable_language(Fortran) find_package(BLAS) if(BLAS_FOUND) @@ -171,25 +188,7 @@ if(ENABLE_BLAS_LAPACK) endif(CMAKE_Fortran_COMPILER MATCHES "gfortran") endif(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") endif(BLAS_FOUND) - endif(NOT HAVE_BLAS OR NOT HAVE_LAPACK AND NOT ENABLE_BLAS_INTEL) - if(ENABLE_BLAS_INTEL) - if(WIN32 AND MSVC) - SET(MKL_LIBRARY_DIR "C:/Program Files/Intel/MKL/10.0.4.023" CACHE PATH "Intel Blas/Lapack absolute library directory.") - set(HAVE_BLAS TRUE) - list(APPEND CONFIG_OPTIONS "Blas") - set(HAVE_LAPACK TRUE) - list(APPEND CONFIG_OPTIONS "Lapack") - set(LAPACK_TEMP_LIBRARIES "libguide.lib" "mkl_c.lib" "mkl_intel_c.lib" "mkl_intel_thread.lib" "mkl_core.lib") - #IF 32BIT - FOREACH(i ${LAPACK_TEMP_LIBRARIES}) - LIST(APPEND LAPACK_LIBRARIES "${MKL_LIBRARY_DIR}/ia32/lib/${i};") - ENDFOREACH(i) - #IF 64 BIT - #FOREACH(i ${LAPACK_TEMP_LIBRARIES}) - # LIST(APPEND LAPACK_LIBRARIES "${MKL_LIBRARY_DIR}/em64t/lib/${i};") - #ENDFOREACH(i) - endif(WIN32 AND MSVC) - endif(ENABLE_BLAS_INTEL) + endif(NOT HAVE_BLAS OR NOT HAVE_LAPACK) endif(ENABLE_BLAS_LAPACK) add_subdirectory(Common) @@ -815,6 +814,7 @@ message("") message("Run 'ccmake ${CMAKE_SOURCE_DIR}' to fine-tune the configuration.") message("") -mark_as_advanced(BISON EASY_BLAS EASY_G2C EASY_GCC EASY_LAPACK ENABLE_GRAPHICS - FLEX GMP_LIB GMSH_EXTRA_VERSION HDF5_LIB MAKEINFO MED_LIB - OCC_INC SZ_LIB TAUCS_LIB TEXI2PDF) +mark_as_advanced(BISON ENABLE_GRAPHICS FLEX GMP_LIB GMSH_EXTRA_VERSION + HDF5_LIB LIBGUIDE MAKEINFO MED_LIB MKL_C MKL_CORE MKL_INTEL_C + MKL_INTEL_THREAD OCC_INC REF_BLAS REF_G2C REF_GCC REF_LAPACK + SZ_LIB TAUCS_LIB TEXI2PDF)