Something went wrong on our end
-
Gerardo Tauriello authoredGerardo Tauriello authored
CMakeLists.txt 9.70 KiB
#-------------------------------------------------------------------------------
# Author: Marco Biasini
#-------------------------------------------------------------------------------
cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
project(OpenStructure CXX C)
set (CMAKE_EXPORT_COMPILE_COMMANDS 1)
set (OST_VERSION_MAJOR 1)
set (OST_VERSION_MINOR 9)
set (OST_VERSION_PATCH 0)
set (OST_VERSION_STRING ${OST_VERSION_MAJOR}.${OST_VERSION_MINOR}.${OST_VERSION_PATCH} )
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake_support)
include(OST)
if (CMAKE_COMPILER_IS_GNUCXX)
exec_program(gcc ARGS --version OUTPUT_VARIABLE CMAKE_C_COMPILER_VERSION)
if(CMAKE_C_COMPILER_VERSION MATCHES ".*4\\.[5-9].*")
set(OST_GCC_45 true)
else()
set(OST_GCC_45 false)
endif()
endif()
option(USE_SHADER "whether to compile with shader support"
OFF)
option(USE_RPATH "embed rpath upon make install"
OFF)
option(COMPILE_TMTOOLS "whether to compile the tmalign and tmscore programs"
OFF)
option(PROFILE "whether to compile with profiling support"
OFF)
option(ENABLE_GUI "whether the graphical user interface should be enabled"
ON)
option(ENABLE_GFX "whether graphics support should be enabled"
ON)
option(USE_MESA "use software rendered Mesa instead of hardware GL"
OFF)
option(ENABLE_IMG "whether the image processing module should be compiled"
ON)
option(ENABLE_INFO "whether openstructure should be compiled with support for the info library"
ON)
option(USE_NUMPY "whether numpy support is added"
OFF)
option(USE_DOUBLE_PRECISION "whether to compile in double precision"
OFF)
option(ENABLE_SPNAV "whether 3DConnexion devices should be supported"
OFF)
option(STATIC_PROPERTY_WORKAROUND "workaround for static property bug with some boost/boost_python combinations" OFF)
option(COMPILE_TESTS "whether unit tests should be compiled by default" OFF)
option(ENABLE_STATIC "whether static libraries should be compiled" OFF)
option(UBUNTU_LAYOUT "whether Debian/Ubuntu's lib and libexec directory layout should be used" OFF)
option(HIDDEN_VISIBILITY "on gcc, use -fvisibility=hidden" OFF)
option(ENABLE_MM "whether openmm support is added" OFF)
if (CXX)
set(CMAKE_CXX_COMPILER ${CXX})
endif()
if (CC)
set(CMAKE_C_COMPILER ${CC})
endif()
if (FORTRAN_COMPILER)
set(CMAKE_FORTRAN_COMPILER ${FORTRAN_COMPILER})
endif()
if (PREFIX)
set(CMAKE_INSTALL_PREFIX ${PREFIX})
endif()
if (SYS_ROOT)
set(CMAKE_PREFIX_PATH ${SYS_ROOT})
endif()
if (OPTIMIZE)
set(CMAKE_BUILD_TYPE Release)
set(_OPT ON)
else()
set(CMAKE_BUILD_TYPE Debug)
set(_OPT OFF)
endif()
if (USE_DOUBLE_PRECISION)
set(_DOUBLE_PREC ON)
else()
set(_DOUBLE_PREC OFF)
set(_DOUBLE_PREC OFF)
endif()
if (NOT ENABLE_INFO)
set(ENABLE_GFX OFF)
endif()
if (NOT ENABLE_GFX)
set(ENABLE_GUI OFF)
endif()
if (ENABLE_INFO)
set(_INFO ON)
else()
set(_INFO OFF)
endif()
if (ENABLE_GUI)
set(_UI ON)
else()
set(_UI OFF)
endif()
if (ENABLE_GFX)
set(_OPENGL ON)
else()
set(_OPENGL OFF)
endif()
if (USE_SHADER)
set(_SHADER ON)
else()
set(_SHADER OFF)
endif()
if (USE_NUMPY)
set(_NUMPY ON)
else()
set(_NUMPY OFF)
endif()
if (COMPILE_TMTOOLS)
set(_TM_TOOLS ON)
else()
set(_TM_TOOLS OFF)
endif()
if (ENABLE_IMG)
set(_IMG ON)
else()
set(_IMG OFF)
endif()
if (PROFILE)
set(_PROFILE ON)
else()
set(_PROFILE OFF)
endif()
if(ENABLE_MM)
set(_OPENMM ON)
else()
set(_OPENMM OFF)
endif()
if (UBUNTU_LAYOUT)
set(_UBUNTU_LAYOUT ON)
else()
set(_UBUNTU_LAYOUT OFF)
endif()
if (COMPOUND_LIB)
set(_COMP_LIB "${COMPOUND_LIB}")
if (NOT IS_ABSOLUTE "${COMPOUND_LIB}")
set(COMPOUND_LIB "${CMAKE_CURRENT_BINARY_DIR}/${COMPOUND_LIB}")
endif()
else()
set(_COMP_LIB "NONE")
endif()
if (STATIC_PROPERTY_WORKAROUND)
set(_STATICPROPS ON)
else()
set(_STATICPROPS OFF)
endif()
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
endif()
setup_stage()
file(MAKE_DIRECTORY ${STAGE_DIR}
${EXECUTABLE_OUTPUT_PATH}
${HEADER_STAGE_PATH}
${LIB_STAGE_PATH}
${LIBEXEC_STAGE_PATH})
setup_compiler_flags()
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
if (ENABLE_STATIC AND UNIX AND NOT APPLE)
set (CMAKE_FIND_LIBRARY_SUFFIXES .a)
endif()
if(BOOST_VERSION)
message(STATUS "forcing boost to version ${BOOST_VERSION}")
set(_BOOST_MIN_VERSION ${BOOST_VERSION})
endif()
setup_boost()
if (WIN32)
ADD_DEFINITIONS("-DBOOST_ALL_NO_LIB")
endif()
if (ENABLE_INFO)
find_package(Qt4 4.5.0 REQUIRED)
endif()
if (OPTIMIZE)
if (CXX_FLAGS)
set (CMAKE_CXX_FLAGS_RELEASE ${CXX_FLAGS})
endif()
if (C_FLAGS)
set (CMAKE_C_FLAGS_RELEASE ${C_FLAGS})
endif()
else()
if (CXX_FLAGS)
set(CMAKE_CXX_FLAGS_DEBUG ${CXX_FLAGS})
endif()
if (C_FLAGS)
set(CMAKE_C_FLAGS_DEBUG ${C_FLAGS})
endif()
endif()
if (ENABLE_GFX)
if(USE_MESA)
find_package(Mesa REQUIRED)
set(_USE_MESA ON)
else()
find_package(OpenGL REQUIRED)
set(_USE_MESA OFF)
endif()
endif()
if (ENABLE_IMG OR ENABLE_GFX)
find_package(PNG REQUIRED)
else()
set (PNG_LIBRARY "")
endif()
find_package(Eigen 3.2.0 REQUIRED)
find_package(Python 2.4 REQUIRED)
if(USE_NUMPY)
find_package(Numpy REQUIRED)
endif()
if(ENABLE_MM)
find_package(OpenMM REQUIRED)
set(_OPENMM_PLUGINS "${OPEN_MM_PLUGIN_DIR}")
else(ENABLE_MM)
set(_OPENMM_PLUGINS "NONE")
endif(ENABLE_MM)
if (ENABLE_IMG)
find_package(FFTW REQUIRED)
find_package(TIFF REQUIRED)
endif()
if (ENABLE_STATIC)
set(Boost_LIBRARIES)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost ${_BOOST_MIN_VERSION}
COMPONENTS filesystem system iostreams regex thread REQUIRED)
find_package(ZLIB REQUIRED)
if (UNIX AND NOT APPLE)
set(STATIC_LIBRARIES ${Boost_LIBRARIES} ${FFTW_LIBRARIES} ${TIFF_LIBRARIES}
${PNG_LIBRARY} ${ZLIB_LIBRARY})
else ()
set(STATIC_LIBRARIES ${Boost_LIBRARIES} ${FFTW_LIBRARIES} ${TIFF_LIBRARIES}
${PNG_LIBRARY} ${ZLIB_LIBRARY})
endif()
endif()
if (ENABLE_GUI)
ost_find_python_module(sip)
ost_find_python_module(PyQt4)
endif()
if (ENABLE_SPNAV)
#find_package(SpNav REQUIRED)
set(_SPNAV ON)
else()
set(_SPNAV OFF)
endif()
if (CMAKE_COMPILER_IS_GNUCXX)
# do not write back into cache, otherwise the compile command line gets expanded
# with multiple -fno-strict-aliasing flags, triggering a complete rebuild whenever
# cmake is run
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing")
if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
endif("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
if(HIDDEN_VISIBILITY)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
set (_HIDDEN_VIS ON)
else(HIDDEN_VISIBILITY)
set (_HIDDEN_VIS OFF)
endif(HIDDEN_VISIBILITY)
endif()
# basic environment
include_directories(${Boost_INCLUDE_DIRS}
${FFTW_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIRS}
${TIFF_INCLUDE_DIR}
${PNG_INCLUDE_DIRS}
${OPEN_MM_INCLUDE_DIRS}
)
if(USE_NUMPY)
include_directories(${PYTHON_NUMPY_INCLUDE_DIR})
endif()
if (UNIX)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
if(USE_RPATH)
set(_USE_RPATH ON)
SET(CMAKE_INSTALL_RPATH "$ORIGIN/../${LIB_DIR}")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
else()
set(_USE_RPATH OFF)
SET(CMAKE_INSTALL_RPATH "")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
endif()
endif()
if (ENABLE_STATIC)
SET(CMAKE_SKIP_BUILD_RPATH TRUE)
SET(LINK_SEARCH_END_STATIC TRUE)
endif()
add_subdirectory(modules)
add_subdirectory(scripts)
add_subdirectory(tools)
add_subdirectory(actions)
# deployment has to come last, to ensure that all install commands are run before deployment
# magic is done
add_subdirectory(deployment)
set(FILES_TO_BE_REMOVED ${PROJECT_BINARY_DIR}/stage tests)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
"${FILES_TO_BE_REMOVED}")
#ost_match_boost_python_version(${PYTHON_LIBRARIES})
if (CMAKE_COMPILER_IS_GNUCXX)
set(HIDDEN_VIS_MSG
"\n Hidden object visibility (-DHIDDEN_VISIBILITY) : ${_HIDDEN_VIS}")
endif()
message(STATUS
"OpenStructure will be built with the following options:\n"
" Install Prefix (-DPREFIX) : ${CMAKE_INSTALL_PREFIX}\n"
" RPath in install (-DUSE_RPATH) : ${_USE_RPATH}\n"
" Info support (-DENABLE_INFO) : ${_INFO}\n"
" Graphical interface (-DENABLE_GUI) : ${_UI}\n"
" OpenGL support (-DENABLE_GFX) : ${_OPENGL}\n"
" OpenGL via Mesa (-DUSE_MESA) : ${_USE_MESA}\n"
" Image Processing support (-DENABLE_IMG) : ${_IMG}\n"
" Shader support (-DUSE_SHADER) : ${_SHADER}\n"
" Numpy support (-DUSE_NUMPY) : ${_NUMPY}\n"
" SpaceNav Device support (-DENABLE_SPNAV) : ${_SPNAV}\n"
" OpenMM support (-DENABLE_MM) : ${_OPENMM}\n"
" OpenMM plugins (-DOPEN_MM_PLUGIN_DIR) : ${_OPENMM_PLUGINS}\n"
" Optimize (-DOPTIMIZE) : ${_OPT}\n"
" Profiling support (-DPROFILE) : ${_PROFILE}\n"
" Double Precision (-DUSE_DOUBLE_PRECISION) : ${_DOUBLE_PREC}\n"
" Compound Lib (-DCOMPOUND_LIB) : ${_COMP_LIB}\n"
" TMAlign and TMScore (-DCOMPILE_TMTOOLS) : ${_TM_TOOLS}\n"
" Static Libraries (-DENABLE_STATIC) : ${ENABLE_STATIC}\n"
" Debian/Ubuntu directory layout (-DUBUNTU_LAYOUT) : ${_UBUNTU_LAYOUT}"
${HIDDEN_VIS_MSG})