Skip to content
Snippets Groups Projects

implements alternate linking to MPI/OpenMP

Merged Cristian Lalescu requested to merge bugfix/compilation_flags into develop
3 files
+ 262
222
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 12
12
@@ -205,17 +205,20 @@ class _code(_base):
@@ -205,17 +205,20 @@ class _code(_base):
with open('CMakeLists.txt', 'w') as outfile:
with open('CMakeLists.txt', 'w') as outfile:
outfile.write('cmake_minimum_required(VERSION 3.10)\n')
outfile.write('cmake_minimum_required(VERSION 3.10)\n')
outfile.write('cmake_policy(VERSION 3.12)\n')
outfile.write('cmake_policy(VERSION 3.12)\n')
outfile.write('project(project_{0} LANGUAGES C CXX)\n'.format(self.name))
outfile.write('set(CMAKE_CXX_STANDARD 17)\n')
outfile.write('set(CMAKE_CXX_STANDARD 17)\n')
outfile.write('set(CMAKE_CXX_STANDARD_REQUIRED ON)\n')
outfile.write('set(CMAKE_CXX_STANDARD_REQUIRED ON)\n')
 
outfile.write('project(project_{0} LANGUAGES C CXX)\n'.format(self.name))
 
outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
outfile.write('find_package(OpenMP REQUIRED)\n')
outfile.write('find_package(OpenMP REQUIRED)\n')
outfile.write('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")\n')
outfile.write('find_package(MPI REQUIRED)\n')
outfile.write('find_package(MPI REQUIRED)\n')
outfile.write('set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${MPI_CXX_COMPILE_OPTIONS}")\n')
outfile.write('target_link_libraries({0} PRIVATE OpenMP::OpenMP_CXX MPI::MPI_C)\n'.format(self.name))
outfile.write('include_directories(${MPI_CXX_INCLUDE_DIRS})\n')
outfile.write('set(HDF5_STATIC ON)\n')
outfile.write('add_definitions(${MPI_CXX_COMPILE_DEFINITIONS})\n')
outfile.write('set(HDF5_PREFER_PARALLEL TRUE)\n')
outfile.write('list(APPEND TURTLE_LIBS "${MPI_CXX_LIBRARIES}")\n')
outfile.write('set(HDF5_NO_FIND_PACKAGE_CONFIG_FILE TRUE)\n')
outfile.write('list(APPEND TURTLE_LIBS "${OpenMP_CXX_LIB_NAMES}")\n')
outfile.write('find_package(HDF5 REQUIRED COMPONENTS C)\n')
 
outfile.write('message("found HDF5 include dir at ${HDF5_C_INCLUDE_DIR}")\n')
 
outfile.write('target_link_libraries({0} PRIVATE HDF5::HDF5)\n'.format(self.name))
 
outfile.write('target_include_directories({0} PRIVATE ${{HDF5_C_INCLUDE_DIR}})\n'.format(self.name))
#ideally we should use something like the following 2 lines
#ideally we should use something like the following 2 lines
#outfile.write('set(CMAKE_CXX_COMPILER ${TURTLE_CXX_COMPILER})\n')
#outfile.write('set(CMAKE_CXX_COMPILER ${TURTLE_CXX_COMPILER})\n')
#outfile.write('set(CMAKE_C_COMPILER ${TURTLE_C_COMPILER})\n')
#outfile.write('set(CMAKE_C_COMPILER ${TURTLE_C_COMPILER})\n')
@@ -223,8 +226,6 @@ class _code(_base):
@@ -223,8 +226,6 @@ class _code(_base):
outfile.write('set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${TURTLE_CXX_COMPILE_FLAGS}")\n')
outfile.write('set(CMAKE_CXX_COMPILE_FLAGS "${CMAKE_CXX_COMPILE_FLAGS} ${TURTLE_CXX_COMPILE_FLAGS}")\n')
outfile.write('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_FLAGS}")\n')
outfile.write('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_FLAGS}")\n')
outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${TURTLE_EXE_LINKER_FLAGS}")\n')
outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${TURTLE_EXE_LINKER_FLAGS}")\n')
outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_CXX_LINK_FLAGS}")\n')
outfile.write('set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")\n')
outfile.write('if(NDEBUG)\n')
outfile.write('if(NDEBUG)\n')
outfile.write(' add_definitions(-DNDEBUG)\n')
outfile.write(' add_definitions(-DNDEBUG)\n')
outfile.write('endif()\n')
outfile.write('endif()\n')
@@ -234,9 +235,8 @@ class _code(_base):
@@ -234,9 +235,8 @@ class _code(_base):
outfile.write('include_directories(${TURTLE_INCLUDE_DIRECTORIES} ${TURTLE_INCLUDE_DIR}/TurTLE)\n')
outfile.write('include_directories(${TURTLE_INCLUDE_DIRECTORIES} ${TURTLE_INCLUDE_DIR}/TurTLE)\n')
outfile.write('link_directories(${TURTLE_LINK_DIRECTORIES} ${TURTLE_LIBRARIES_DIR})\n')
outfile.write('link_directories(${TURTLE_LINK_DIRECTORIES} ${TURTLE_LIBRARIES_DIR})\n')
outfile.write('find_library(TURTLE_STATIC_LIBRARY TurTLE HINTS ${TURTLE_LIBRARIES_DIR})\n')
outfile.write('find_library(TURTLE_STATIC_LIBRARY TurTLE HINTS ${TURTLE_LIBRARIES_DIR})\n')
outfile.write('add_executable({0} {0}.cpp)\n'.format(self.name))
outfile.write('target_link_libraries(' + self.name + ' PRIVATE ${TURTLE_STATIC_LIBRARY})\n')
outfile.write('target_link_libraries(' + self.name + ' ${TURTLE_STATIC_LIBRARY})\n')
outfile.write('target_link_libraries(' + self.name + ' PRIVATE ${TURTLE_LIBS})\n')
outfile.write('target_link_libraries(' + self.name + ' ${TURTLE_LIBS})\n')
fname = self.dns_type + '_extra_cmake.txt'
fname = self.dns_type + '_extra_cmake.txt'
if os.path.exists(fname):
if os.path.exists(fname):
with open(fname, 'r') as ifile:
with open(fname, 'r') as ifile:
Loading