diff --git a/cxxfem/CMakeLists.txt b/cxxfem/CMakeLists.txt index 1dfe56c1486360a38b693ff901dd6d7fe52467f7..0f411750f2a427e01fa28fa7b17e0c660290076e 100644 --- a/cxxfem/CMakeLists.txt +++ b/cxxfem/CMakeLists.txt @@ -59,6 +59,14 @@ IF(FEM_USE_MKL) MESSAGE(STATUS "MKL_INCLUDE_DIRS=${MKL_INCLUDE_DIRS}") # library (mkl_rt.so) searched using LIBRARY_PATH (Linux/macOS) or LIB (windows) FIND_LIBRARY(MKL_LIBRARIES mkl_rt PATHS ENV LIBRARY_PATH) + IF(MSVC) + # with MSVC+MKL, we must link to intel OpenMP so that we have only 1 OpenMP lib + FIND_LIBRARY(INTEL_OPENMP libiomp5md) + MESSAGE(STATUS "INTEL_OPENMP=${INTEL_OPENMP}") + IF(NOT INTEL_OPENMP) + MESSAGE(FATAL_ERROR "libiomp5md library not found!") + ENDIF() + ENDIF() # IF(MINGW) # FIND_LIBRARY(MKL_LIB1 mkl_intel_lp64_dll PATHS ENV LIBRARY_PATH) # FIND_LIBRARY(MKL_LIB2 mkl_intel_thread_dll PATHS ENV LIBRARY_PATH) @@ -88,9 +96,9 @@ ENDIF() # OpenMP -- FIND_PACKAGE(OpenMP) IF(OPENMP_FOUND) - MESSAGE ("OpenMP enabled (CXX_FLAGS=${OpenMP_CXX_FLAGS})") + MESSAGE (STATUS "OpenMP enabled (CXX_FLAGS=${OpenMP_CXX_FLAGS})") ELSE() - MESSAGE ("OpenMP disabled.") + MESSAGE (STATUS "OpenMP disabled.") ENDIF() # Python -- diff --git a/cxxfem/src/CMakeLists.txt b/cxxfem/src/CMakeLists.txt index cb63466ab1083dea6ad58cd6c302f730d5db3f35..70001b65f772570822ef55aafa6e14cf5fc7aa33 100644 --- a/cxxfem/src/CMakeLists.txt +++ b/cxxfem/src/CMakeLists.txt @@ -1,4 +1,3 @@ - FILE(GLOB SRCS *.cpp) ADD_LIBRARY(fem SHARED ${SRCS}) TARGET_LINK_LIBRARIES(fem PUBLIC ${GMSH_LIBRARIES}) @@ -9,4 +8,9 @@ ENDIF() IF(FEM_USE_MKL) TARGET_LINK_LIBRARIES(fem PUBLIC ${MKL_LIBRARIES}) TARGET_INCLUDE_DIRECTORIES(fem PUBLIC ${MKL_INCLUDE_DIRS}) + # with MSVC+MKL, we must link to intel OpenMP so that we have only 1 OpenMP lib + IF(MSVC) + TARGET_LINK_OPTIONS(fem PUBLIC -NODEFAULTLIB:"vcomp" -NODEFAULTLIB:"vcompd") + TARGET_LINK_LIBRARIES(fem PUBLIC ${INTEL_OPENMP}) + ENDIF() ENDIF() \ No newline at end of file diff --git a/envs/win-msvc.cmd b/envs/win-msvc.cmd index 6b52ab171edde2c00d8997b3aed5ee3207ae4200..f6ab0f37d0cf6758e6c898d149792113fd82b910 100644 --- a/envs/win-msvc.cmd +++ b/envs/win-msvc.cmd @@ -1,65 +1,16 @@ @echo off :: This file opens a terminal which allows you to compile the code with -:: Microsoft Visual Studio 2017 (x64) on Windows -:: -:: HOW TO USE THIS FILE? -:: [run this file] -:: mkdir build -:: cd build -:: cmake -A x64 .. -:: cmake --build . --config Release -:: [executables are built in the bin/Release folder] -:: ctest -C Release +:: Microsoft Visual Studio 2019 (x64) on Windows -:: set the location of gmsh SDK / mingw compiler -set "GMSHSDK=%~dp0..\lib\gmsh-sdk" -set "EIGEN=%~dp0..\lib\eigen" set COMPILERPATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build" -:: perform some tests... -IF NOT EXIST "%GMSHSDK%" ( - ECHO - gmsh-sdk NOT found in %GMSHSDK%!! - PAUSE - EXIT /B -) ELSE ( - ECHO - gmsh-sdk found. -) - -IF NOT EXIST "%EIGEN%" ( - ECHO - eigen NOT found in %EIGEN%!! - PAUSE - EXIT /B -) ELSE ( - ECHO - eigen found. -) - -IF NOT EXIST %COMPILERPATH% ( - ECHO - compiler NOT found in %COMPILERPATH%!! - PAUSE - EXIT /B -) ELSE ( - ECHO - compiler found. -) - :: Intel MKL set "INTELPATH=C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.5.281\windows" -set LIB=%INTELPATH%\mkl\lib\intel64_win;%INTELPATH%\compiler\lib\intel64_win;%LIB% -set INCLUDE=%INTELPATH%\mkl\include;%INCLUDE% -:: does not always work -@REM call %INTELPATH%\mkl\bin\mklvars.bat intel64 vs2019 - -:: where is gmsh.exe and gmsh-**.dll ? -set PATH=%GMSHSDK%\bin;%GMSHSDK%\lib;%PATH% -:: where is gmsh.h ? -set INCLUDE=%EIGEN%;%GMSHSDK%\include;%INCLUDE% -:: where is gmsh.lib ? -set LIB=%GMSHSDK%\lib;%LIB% -:: where is gmsh.py ? (required only if you want to use the python API) -set PYTHONPATH=%GMSHSDK%\lib;%PYTHONPATH% +@REM set LIB=%INTELPATH%\mkl\lib\intel64_win;%INTELPATH%\compiler\lib\intel64_win;%LIB% +@REM set INCLUDE=%INTELPATH%\mkl\include;%INCLUDE% +call "%INTELPATH%\mkl\bin\mklvars.bat" intel64 vs2019 :: set the environment of the msvc compiler CD /d "%~dp0" CD .. -:: problem with mkl_rt (mkl_intel_thread cannot be loaded) -:: %comspec% /k "%COMPILERPATH%\vcvars64.bat" -%comspec% /k +%comspec% /k "%COMPILERPATH%\vcvars64.bat" diff --git a/fossils.py b/fossils.py index 098153cdb89d67f1a4d258e61480929475970419..ced959d4f716e345a1d361951cde709253ac9bf1 100644 --- a/fossils.py +++ b/fossils.py @@ -176,12 +176,12 @@ def setup_pythonpath(): 'build', 'bin', 'Release')) # msvc # allows this script to be run without setting env - rm_folder_from_path('gmsh') - rm_folder_from_pypath('gmsh') - add_folder2pypath(os.path.join(this_script_dir, 'lib', - 'gmsh-sdk', 'lib')) # msvc - add_folder2path(os.path.join(this_script_dir, 'lib', - 'gmsh-sdk', 'bin')) # gmsh + # rm_folder_from_path('gmsh') + # rm_folder_from_pypath('gmsh') + # add_folder2pypath(os.path.join(this_script_dir, 'lib', + # 'gmsh-sdk', 'lib')) # msvc + # add_folder2path(os.path.join(this_script_dir, 'lib', + # 'gmsh-sdk', 'bin')) # gmsh # print(f'sys.path={sys.path}') @@ -217,10 +217,6 @@ if __name__ == "__main__": # add main program folder and binaries dir to the PYTHONPATH setup_pythonpath() - # preload some modules (vtk before gmsh) - import vtk - import gmsh - # redirect C++ streams to Python import cxxfem redirect = cxxfem.StdOutErr2Py()