CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(cadd_mesh) # LIBMULTISCALE version number. An even minor number corresponds to releases. SET(cadd_mesh_MAJOR_VERSION 1) SET(cadd_mesh_MINOR_VERSION 0) SET(cadd_mesh_BUILD_VERSION 0) SET(cadd_mesh_VERSION "${cadd_mesh_MAJOR_VERSION}.${cadd_mesh_MINOR_VERSION}.${cadd_mesh_BUILD_VERSION}" ) #=============================================================================== # Project includes #=============================================================================== INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/ ${PROJECT_SOURCE_DIR}/src/common ${PROJECT_SOURCE_DIR}/src/geometry ${PROJECT_SOURCE_DIR}/src/lattice ${PROJECT_SOURCE_DIR}/src/domain ) #=============================================================================== # Project options #=============================================================================== option(CADD_MESH_DOCUMENTATION "Build source documentation using Doxygen." OFF) set(CADD_MESH_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CADD_MESH_CMAKE_DIR}) SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries.") macro(register_package pkg_name) find_package(${pkg_name} REQUIRED) foreach(loop_var IN ITEMS ${ARGN}) register_package(${loop_var}) endforeach(loop_var) string(TOUPPER ${pkg_name} PKG_NAME) # MESSAGE("found " ${pkg_name} " " ${${pkg_name}_FOUND}) if(${pkg_name}_FOUND) add_definitions(-DUSING_${PKG_NAME}) INCLUDE_DIRECTORIES(${${PKG_NAME}_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${${PKG_NAME}_INCLUDE_DIR}) # MESSAGE(${PKG_NAME} " : " ${${PKG_NAME}_INCLUDE_DIR}) # MESSAGE(${PKG_NAME} " : " ${${PKG_NAME}_INCLUDE_PATH}) SET(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${${PKG_NAME}_LIBRARIES}) # MESSAGE(${PKG_NAME} " : " ${${PKG_NAME}_LIBRARIES}) endif() endmacro() macro(register_optional_package pkg_name) SET(USING_${pkg_name} FALSE CACHE BOOL "Activation of package ${pkg_name}" ) if(USING_${pkg_name}) register_package(${pkg_name} ${ARGN}) endif(USING_${pkg_name}) endmacro() macro(register_optional_switch pkg_name) SET(USING_${pkg_name} FALSE CACHE BOOL "Activation of package ${pkg_name}" ) if(USING_${pkg_name}) foreach(loop_var IN ITEMS ${ARGN}) register_package(${loop_var}) endforeach(loop_var) add_definitions(-DUSING_${pkg_name}) endif(USING_${pkg_name}) endmacro() ENABLE_LANGUAGE(CXX) ENABLE_LANGUAGE(Fortran) register_package(QHULL) #set(CADD_MESH_LIBRARIES ${QHULL_LIBRARIES}) register_package(GSL) #set(CADD_MESH_LIBRARIES ${CADD_MESH_LIBRARIES} ${GSL_LIBRARIES}) register_package(Akantu) register_package(BLAS) register_package(LAPACK) register_package(IOHELPER) #message( plugins = ${PLUGINS}) #message(IOhelper Include dir = ${IOHELPER_INCLUDE_DIR}) IF (CMAKE_BUILD_TYPE STREQUAL "Release") add_definitions(-DLM_OPTIMIZED) ENDIF (CMAKE_BUILD_TYPE STREQUAL "Release") IF (CMAKE_CXX_COMPILER MATCHES ".*icpc" ) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -vec-report=0 -w1" CACHE "intel C++ compiler flag" STRING FORCE) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lifcore" CACHE "intel Linker flag" STRING FORCE) ELSE(CMAKE_CXX_COMPILER MATCHES ".*icpc" ) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE "C++ compiler flag" STRING FORCE) ENDIF (CMAKE_CXX_COMPILER MATCHES ".*icpc") add_definitions(-DHAVE_MPI) #=============================================================================== # Main project #=============================================================================== set(CADD_MESH_SRC) add_subdirectory(src/geometry) set(CADD_MESH_LIBRARIES geometry) add_subdirectory(src/common) set(CADD_MESH_LIBRARIES ${CADD_MESH_LIBRARIES} common) add_subdirectory(src/lattice) set(CADD_MESH_LIBRARIES ${CADD_MESH_LIBRARIES} lattice) add_subdirectory(src/domain) set(CADD_MESH_LIBRARIES ${CADD_MESH_LIBRARIES} domain) #SET(CADD_MESH_LIBRARIES geometry lattice common) #=============================================================================== # Documentation #=============================================================================== if(CADD_MESH_DOCUMENTATION) find_package(Doxygen REQUIRED) if(DOXYGEN_FOUND) set(DOXYGEN_WARNINGS NO) set(DOXYGEN_QUIET YES) if(CMAKE_VERBOSE_MAKEFILE) set(DOXYGEN_WARNINGS YES) set(DOXYGEN_QUIET NO) endif(CMAKE_VERBOSE_MAKEFILE) add_subdirectory(doc) endif(DOXYGEN_FOUND) endif(CADD_MESH_DOCUMENTATION) #=============================================================================== # main library #=============================================================================== add_library(cadd_mesh SHARED ${CADD_MESH_SRC}) target_link_libraries(cadd_mesh ${EXTERNAL_LIBRARIES}) #=============================================================================== # Tests #=============================================================================== macro(register_test test_name source_list) add_executable(${test_name} ${source_list}) # target_link_libraries(${test_name} ${CADD_MESH_LIBRARIES}) target_link_libraries(${test_name} cadd_mesh) endmacro(register_test) add_subdirectory(test) #=============================================================================== # py wrapper #=============================================================================== get_directory_property(INCDIRS INCLUDE_DIRECTORIES) find_package(SWIG REQUIRED) find_package(Python REQUIRED) if(PYTHON_FOUND) string(TOLOWER "${CMAKE_BUILD_TYPE}" _build_type) if("${_build_type}" STREQUAL "debug") set(CADD_MESH_PYTHON_EXECUTABLE ${PYTHON_DEBUG_EXECUTABLE}) set(CADD_MESH_PYTHON_LIBRARIES ${PYTHON_DEBUG_LIBRARIES}) else() set(CADD_MESH_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) set(CADD_MESH_PYTHON_LIBRARIES ${PYTHON_LIBRARIES}) endif() endif() set(CADD_MESH_PY_SETUP ${CMAKE_BINARY_DIR}/setup.py) string(REPLACE ";" "','" CADD_MESH_PY_INCLUDE_DIRS "${INCDIRS}") set(CADD_MESH_PY_INCLUDE_DIRS "['${CADD_MESH_PY_INCLUDE_DIRS}']") set(CADD_MESH_PY_LIBRARY_DIRS "['${CMAKE_BINARY_DIR}']") set(CADD_MESH_PY_RUNTIME_LIBRARY_DIRS "['${CMAKE_BINARY_DIR}']") set(CADD_MESH_PY_WRAPPER "${CMAKE_BINARY_DIR}/CaddMesher_wrap.cxx") configure_file(${CADD_MESH_CMAKE_DIR}/setup.py.cmake ${CADD_MESH_PY_SETUP}) set(CADD_MESH_PY_INTERFACE "${CMAKE_SOURCE_DIR}/src/swig/CaddMesher.i") add_custom_command(OUTPUT ${CADD_MESH_PY_WRAPPER} COMMAND ${SWIG_EXECUTABLE} -python -c++ -o ${CADD_MESH_PY_WRAPPER} ${CADD_MESH_PY_INTERFACE} DEPENDS ${CADD_MESH_PY_INTERFACE} cadd_mesh ) add_custom_target(py_setup ALL COMMAND ${CADD_MESH_PYTHON_EXECUTABLE} ${CADD_MESH_PY_SETUP} build DEPENDS ${CADD_MESH_PY_SETUP} cadd_mesh ${CADD_MESH_PY_WRAPPER} ) add_custom_target(py_install ALL COMMAND ${CADD_MESH_PYTHON_EXECUTABLE} ${CADD_MESH_PY_SETUP} install --user DEPENDS py_setup ) set(CADD_MESH_PY_BUILD_PATH ${CMAKE_BINARY_DIR}/lib/python2.7/site-packages) configure_file(${CMAKE_SOURCE_DIR}/test/py_wrapper_test.py.cmake ${CMAKE_BINARY_DIR}/test/py_wrapper_test.py)