summaryrefslogtreecommitdiff
path: root/openEMS/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'openEMS/CMakeLists.txt')
-rw-r--r--openEMS/CMakeLists.txt208
1 files changed, 208 insertions, 0 deletions
diff --git a/openEMS/CMakeLists.txt b/openEMS/CMakeLists.txt
new file mode 100644
index 0000000..5434138
--- /dev/null
+++ b/openEMS/CMakeLists.txt
@@ -0,0 +1,208 @@
+
+# define build type
+IF( DEFINED CMAKE_BUILD_TYPE )
+ SET( CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Set to either \"Release\" or \"Debug\"" )
+ELSE()
+ SET( CMAKE_BUILD_TYPE Release CACHE STRING "Set to either \"Release\" or \"Debug\"" )
+ENDIF()
+
+PROJECT(openEMS CXX)
+cmake_minimum_required(VERSION 2.8)
+
+# default
+set(LIB_VERSION_MAJOR 0)
+set(LIB_VERSION_MINOR 0)
+set(LIB_VERSION_PATCH 34)
+set(LIB_VERSION_STRING ${LIB_VERSION_MAJOR}.${LIB_VERSION_MINOR}.${LIB_VERSION_PATCH})
+
+set(VERSION "v${LIB_VERSION_STRING}")
+
+IF(EXISTS ${PROJECT_SOURCE_DIR}/localConfig.cmake)
+ include(${PROJECT_SOURCE_DIR}/localConfig.cmake)
+ENDIF()
+
+set(VERSION "v0.0.34")
+
+# add git revision
+IF(EXISTS ${PROJECT_SOURCE_DIR}/.git )
+ FIND_PACKAGE(Git)
+ # Get the latest abbreviated commit hash of the working branch
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} describe --tags
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE GITREV
+ )
+ set(VERSION ${GITREV})
+ string(STRIP ${VERSION} VERSION)
+ message(STATUS "Found Git repository, ${PROJECT_NAME} version tag: ${VERSION}")
+ENDIF()
+
+ADD_DEFINITIONS(-DGIT_VERSION=\"${VERSION}\")
+
+#
+# Set up RPATH for the project
+#
+option(ENABLE_RPATH "Enable rpath support on Linux and Mac" ON)
+if(NOT CMAKE_INSTALL_RPATH)
+ # the RPATH to be used when installing, but only if it's not a system directory
+ LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" isSystemDir)
+ IF("${isSystemDir}" STREQUAL "-1")
+ SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
+ ENDIF("${isSystemDir}" STREQUAL "-1")
+endif()
+if(APPLE AND NOT CMAKE_INSTALL_NAME_DIR)
+ set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
+endif()
+if(UNIX AND ENABLE_RPATH)
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif()
+
+
+if (WITH_MPI)
+ ADD_DEFINITIONS(-DMPI_SUPPORT)
+ # Require MPI for this project:
+ find_package(MPI REQUIRED)
+ INCLUDE_DIRECTORIES( ${MPI_INCLUDE_PATH} )
+
+ message(STATUS "Found MPI. INCLUDE " ${MPI_INCLUDE_PATH})
+endif()
+
+# Set locations of extra CMake modules
+SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${openEMS_SOURCE_DIR}/cmake/Modules/")
+
+# fparser
+# $ cmake -D FPARSER_ROOT_DIR=~/opt/openEMS .
+# SET(FPARSER_ROOT_DIR ~/opt/openEMS)
+find_library(fparser_LIBRARIES
+ NAMES fparser
+ HINTS ${FPARSER_ROOT_DIR}/lib${LIB_SUFFIX}
+ NO_CMAKE_FIND_ROOT_PATH
+)
+message(STATUS "fparser: ${fparser_LIBRARIES}" )
+#TODO test if fparser was found
+INCLUDE_DIRECTORIES( ${FPARSER_ROOT_DIR}/include )
+
+# CSXCAD
+# $ cmake -D CSXCAD_ROOT_DIR=~/opt/openEMS .
+# SET(CSXCAD_ROOT_DIR ~/opt/openEMS)
+find_library(CSXCAD_LIBRARIES
+ NAMES CSXCAD
+ HINTS ${CSXCAD_ROOT_DIR}/lib${LIB_SUFFIX}
+ NO_CMAKE_FIND_ROOT_PATH
+)
+message(STATUS "CSXCAD_LIBRARIES: ${CSXCAD_LIBRARIES}" )
+#TODO test if CSXCADs was found
+find_path(CSXCAD_INCLUDE_DIR
+ NAMES ContinuousStructure.h
+ HINTS ${CSXCAD_ROOT_DIR}/include
+ PATH_SUFFIXES "CSXCAD" ${CSXCAD_INCLUDE_DIR}
+ NO_CMAKE_FIND_ROOT_PATH
+)
+message(STATUS "CSXCAD_INCLUDE_DIR: ${CSXCAD_INCLUDE_DIR}" )
+INCLUDE_DIRECTORIES( ${CSXCAD_INCLUDE_DIR} )
+
+# TinyXML module from https://github.com/ros/cmake_modules
+find_package(TinyXML REQUIRED)
+ADD_DEFINITIONS( -DTIXML_USE_STL )
+
+# hdf5
+find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)
+INCLUDE_DIRECTORIES (${HDF5_INCLUDE_DIR})
+link_directories(${HDF5_LIBRARY_DIRS})
+
+# hdf5 compat
+ADD_DEFINITIONS( -DH5_USE_16_API )
+
+# boost
+find_package(Boost 1.46 COMPONENTS
+ thread
+ system
+ date_time
+ serialization
+ chrono
+)
+
+# vtk
+if (WIN32)
+ find_package(VTK 6.1 REQUIRED)
+else()
+ # prefer >=6.1, fallback to >=5.4
+ find_package(VTK 6.1 COMPONENTS vtkIOXML vtkIOGeometry vtkIOLegacy vtkIOPLY NO_MODULE)
+ IF (NOT ${VTK_FOUND})
+ find_package(VTK REQUIRED)
+ endif()
+endif()
+
+message(STATUS "Found package VTK. Using version " ${VTK_VERSION})
+if("${VTK_MAJOR_VERSION}" GREATER 5)
+ set( vtk_LIBS ${VTK_LIBRARIES} )
+else()
+ set( vtk_LIBS
+ vtkCommon
+ vtkIO
+ )
+endif()
+message(STATUS "vtk libraries " ${vtk_LIBS})
+
+include(${VTK_USE_FILE})
+INCLUDE_DIRECTORIES (${VTK_INCLUDE_DIR})
+
+#set(CMAKE_CXX_FLAGS "-msse -march=native")
+
+# independent tool
+ADD_SUBDIRECTORY( nf2ff )
+
+set(SOURCES
+ openems.cpp
+)
+
+# libs
+ADD_SUBDIRECTORY( tools )
+ADD_SUBDIRECTORY( FDTD )
+ADD_SUBDIRECTORY( FDTD/extensions )
+ADD_SUBDIRECTORY( Common )
+
+INCLUDE_DIRECTORIES( ${openEMS_SOURCE_DIR} ) #find tools
+
+message(STATUS "Sources:" ${SOURCES})
+
+if (${MPI_CXX_FOUND})
+ set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_COMPILE_FLAGS})
+ set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS})
+ SET(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
+endif()
+
+add_library( openEMS SHARED ${SOURCES})
+set_target_properties(openEMS PROPERTIES VERSION ${LIB_VERSION_STRING} SOVERSION ${LIB_VERSION_MAJOR})
+TARGET_LINK_LIBRARIES( openEMS
+ ${CSXCAD_LIBRARIES}
+ ${fparser_LIBRARIES}
+ tinyxml
+ ${HDF5_LIBRARIES}
+ ${Boost_LIBRARIES}
+ ${vtk_LIBS}
+ ${MPI_LIBRARIES}
+)
+
+# main program
+ADD_EXECUTABLE( openEMS_bin main.cpp )
+SET_TARGET_PROPERTIES(openEMS_bin PROPERTIES OUTPUT_NAME openEMS)
+TARGET_LINK_LIBRARIES(openEMS_bin openEMS)
+
+INSTALL(TARGETS openEMS DESTINATION lib${LIB_SUFFIX})
+INSTALL(TARGETS openEMS_bin DESTINATION bin )
+
+if (UNIX)
+ INSTALL( FILES openEMS.sh
+ DESTINATION bin
+ PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
+ if (WITH_MPI)
+ INSTALL( FILES openEMS_MPI.sh
+ DESTINATION bin
+ PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
+ endif()
+endif ()
+INSTALL( DIRECTORY matlab DESTINATION share/openEMS )
+# TODO mpi, tarball, debug, release