cmake_minimum_required (VERSION 2.8.12) # Mac OSX RPATH is weird # enable @rpath in the install name for any shared library being built # note: it is planned that a future version of CMake will enable this by default if(POLICY CMP0015) cmake_policy(SET CMP0015 NEW) endif() set(CMAKE_MACOSX_RPATH 1) project (Lemma CXX) # required external programs (for runtime of nix, not buildtime) FIND_PROGRAM(HAVEGIT git PATHS /usr/bin/ /bin ENV PATH NO_DEFAULT_PATH ) if(NOT HAVEGIT) message(FATAL_ERROR "Lemma requires that git is installed and in the path of your machine") endif(NOT HAVEGIT) # FIND_PROGRAM(HAVEHG hg # PATHS /usr/bin/ /bin ENV PATH NO_DEFAULT_PATH # ) # if(NOT HAVEHG) # message(STATUS "Mercurial (hg) was not found.") # endif(NOT HAVEHG) option(BUILD_SHARED_LIBS OFF) if(BUILD_SHARED_LIBS) set(LABEL_SUFFIX "shared") else() set(LABEL_SUFFIX "static") endif() ################### # External Projects ################### include(ExternalProject) # Eigen, this header-library is used extensively for linear algebra, matrices, and arrays # Mercurial (hg) repo pull, Would it be better to just download latest stable? #ExternalProject_Add(EIGEN # HG_REPOSITORY "https://bitbucket.org/eigen/eigen/" # UPDATE_COMMAND "" # PATCH_COMMAND "" # PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/eigen # CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} #) # Stable Eigen, requires manual updating when new releases, but lighter weight. ExternalProject_Add(EIGEN URL "http://bitbucket.org/eigen/eigen/get/3.2.7.tar.gz" PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/eigen CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} ) # Yaml-cpp, this library is used extensively for serialisation of classes (class persistence) ExternalProject_Add(YAML-CPP GIT_REPOSITORY "https://github.com/jbeder/yaml-cpp.git" GIT_TAG "master" UPDATE_COMMAND "" PATCH_COMMAND "" PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/yaml-cpp CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} -DBUILD_SHARED_LIBS=ON -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} ) add_compile_options(-DHAVE_YAMLCPP) # tinyxml2, this library is used for XML IO option(TINYXML_SUPPORT "MATIO library support for MATLAB .mat files" OFF) if ( TINYXML_SUPPORT ) ExternalProject_Add(TINYXML2 GIT_REPOSITORY "https://github.com/leethomason/tinyxml2.git" GIT_TAG "master" UPDATE_COMMAND "" PATCH_COMMAND "" PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/tinyxml2 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX} -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON #-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} ) add_compile_options(-DTINYXMLSUPPORT) endif() option(MATIO_SUPPORT "MATIO library support for MATLAB .mat files" OFF) if ( MATIO_SUPPORT ) add_compile_options(-DHAVE_MATIO) # matio, this library is used for MATLAB file IO ExternalProject_ADD(MATIO GIT_REPOSITORY "git://git.code.sf.net/p/matio/matio" GIT_TAG "master" UPDATE_COMMAND "" PATCH_COMMAND "" PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/matio #CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/external/matio/src/MATIO/autogen.sh && configure CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${CMAKE_INSTALL_PREFIX} BUILD_IN_SOURCE 1 BUILD_COMMAND ${MAKE} ) endif() # We don't build VTK, it is too heavy. option (VTK_SUPPORT "VTK library for visualisation and grids" OFF) if (VTK_SUPPORT) find_package(VTK 6 REQUIRED NO_MODULE) include(${VTK_USE_FILE}) add_compile_options(-DLEMMAUSEVTK) # Compile Matplot_vtk if VTK is present add_subdirectory(Matplot_vtk) include_directories ("${PROJECT_SOURCE_DIR}/Matplot_vtk") endif() ##################### # Lemma Configuration ##################### #################### # Add the c++11 flag # TODO add compiler specific instructions include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG(-std=c++11 COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG(-std=c++0x COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() set(LEMMA_VERSION_MAJOR "0") set(LEMMA_VERSION_MINOR "0") set(LEMMA_VERSION_PATCH "1") set(LEMMA_VERSION "${LEMMA_VERSION_MAJOR}.${LEMMA_VERSION_MINOR}.${LEMMA_VERSION_PATCH}") configure_file ( "${PROJECT_SOURCE_DIR}/include/LemmaConfig.h.in" "${PROJECT_BINARY_DIR}/include/LemmaConfig.h" ) include_directories("${PROJECT_BINARY_DIR}/include") include_directories ("${PROJECT_SOURCE_DIR}/LemmaCore/include") include_directories ("${CMAKE_INSTALL_PREFIX}/include/eigen3") include_directories ("${CMAKE_INSTALL_PREFIX}/include/") link_directories ("${CMAKE_INSTALL_PREFIX}/lib/") add_subdirectory (LemmaCore) ######################################################################## # Build Modules add_subdirectory (Modules) ######################################################################## # include_directories(${CMAKE_INSTALL_PREFIX}/include) add_executable(Hello "${PROJECT_SOURCE_DIR}/src/test.cpp") target_link_libraries(Hello lemmacore) add_dependencies(Hello YAML-CPP)