# Create MMB build system using CMake. # # We check the BUILD_MMB_{SHARED,STATIC} variables to determine # whether to build dynamically linked, statically linked, or both # versions of the executable. CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(MMB) SET( MMB_MAJOR_VERSION 2 ) SET( MMB_MINOR_VERSION 6 ) SET( MMB_PATCH_VERSION 0 ) SET(BUILD_MMB_SHARED TRUE CACHE BOOL "Build MMB using dynamic SimTK libraries.") SET(BUILD_MMB_STATIC FALSE CACHE BOOL "Build MMB using static SimTK libraries.") SET(Boost_INCLUDE_DIR "" CACHE PATH "Where to find boost.") SET(SimTK_SHARED_LIBS optimized SimTKmolmodel optimized SimTKsimbody optimized SimTKmath optimized SimTKcommon) SET(SimTK_SHARED_LIBS_D debug SimTKmolmodel_d debug SimTKsimbody_d debug SimTKmath_d debug SimTKcommon_d) SET(SimTK_STATIC_LIBS optimized SimTKmolmodel_static optimized SimTKsimbody_static optimized SimTKmath_static optimized SimTKcommon_static) SET(SimTK_STATIC_LIBS_D debug SimTKmolmodel_static_d debug SimTKsimbody_static_d debug SimTKmath_static_d debug SimTKcommon_static_d) # These extra libraries are only available as a shared, optimized. IF(WIN32) SET(SimTK_GENERAL_LIBS SimTKlapack pthreadVC2 ws2_32) ELSEIF(APPLE) SET(SimTK_GENERAL_LIBS lapack blas) ELSE() #Linux SET(SimTK_GENERAL_LIBS lapack blas dl rt) ENDIF() SET(SimTK $ENV{SimTK_INSTALL_DIR} CACHE PATH "Directory where SimTK is installed, e.g. /usr/local/SimTK.") IF(NOT SimTK) MESSAGE(FATAL_ERROR "Expected SimTK_INSTALL_DIR environment var to be set, or set SimTK in CMake") ENDIF(NOT SimTK) # If we're building on a 64 bit Linux machine, look in the lib64 directory # rather than just lib. (This might not be right on all Linux versions.) SET(LIB64) IF( UNIX AND NOT APPLE AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 ) SET( LIB64 64 ) ENDIF() # Make everything go in the same binary directory. (These are CMake-defined # variables.) SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) # for some reason it's not reading the ${Boost_INCLUDE_DIR}, so i hard coded the boost directory: INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${SimTK}/include ${Boost_INCLUDE_DIR} /Developer/SDKs/OgreSDK/boost_1_42) LINK_DIRECTORIES(${SimTK}/lib${LIB64} ${CMAKE_BINARY_DIR}) # On Mac, build 32 bit binaries. IF(APPLE) SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "The processor architectures to build for" FORCE) ENDIF(APPLE) # List source files explicitly here since there is junk in the src # directory that we don't want to include here. SET(MMB_LIBRARY_SOURCE_FILES ${PROJECT_SOURCE_DIR}/src/Utils.cpp ${PROJECT_SOURCE_DIR}/src/BiopolymerClass.cpp ${PROJECT_SOURCE_DIR}/src/AtomSpringContainer.cpp ${PROJECT_SOURCE_DIR}/src/DisplacementContainer.cpp ${PROJECT_SOURCE_DIR}/src/MobilizerContainer.cpp ${PROJECT_SOURCE_DIR}/src/DensityContainer.cpp ${PROJECT_SOURCE_DIR}/src/BasePairContainer.cpp ${PROJECT_SOURCE_DIR}/src/ContactContainer.cpp ${PROJECT_SOURCE_DIR}/src/ConstraintContainer.cpp ${PROJECT_SOURCE_DIR}/src/Repel.cpp ${PROJECT_SOURCE_DIR}/src/MonoAtoms.cpp ${PROJECT_SOURCE_DIR}/src/ParameterReader.cpp ${PROJECT_SOURCE_DIR}/src/BaseInteractionParameterReader.cpp ${PROJECT_SOURCE_DIR}/src/TetherForce.cpp ${PROJECT_SOURCE_DIR}/src/BiopolymerClassTwoTransformForces.cpp ${PROJECT_SOURCE_DIR}/src/WaterDroplet.cpp ${PROJECT_SOURCE_DIR}/src/DensityMap.cpp ${PROJECT_SOURCE_DIR}/src/DensityForce.cpp ) SET(MMB_SOURCE_FILES ${PROJECT_SOURCE_DIR}/src/RNABuilder.cpp ) # We'll just collect all the .h files from the include directory -- some # might be junk but it doesn't matter since they won't actually get # included. FILE(GLOB MMB_HEADER_FILES "${PROJECT_SOURCE_DIR}/include/*.h") SET(SHARED_MMB_TARGET MMBlib) SET(STATIC_MMB_TARGET MMBlib_static) # Ensure that debug libraries have "_d" appended to their names. # CMake gets this right on Windows automatically with this definition. IF (${CMAKE_GENERATOR} MATCHES "Visual Studio") SET(CMAKE_DEBUG_POSTFIX "_d" CACHE INTERNAL "" FORCE) ENDIF (${CMAKE_GENERATOR} MATCHES "Visual Studio") IF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) SET(SHARED_MMB_TARGET ${SHARED_MMB_TARGET}_d) SET(STATIC_MMB_TARGET ${STATIC_MMB_TARGET}_d) ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug) IF (BUILD_MMB_SHARED) # Create shared library for most of MMB ADD_LIBRARY(${SHARED_MMB_TARGET} SHARED ${MMB_LIBRARY_SOURCE_FILES} ${MMB_HEADER_FILES}) SET_TARGET_PROPERTIES(${SHARED_MMB_TARGET} PROPERTIES COMPILE_FLAGS "-DMMB_BUILDING_SHARED_LIBRARY" PROJECT_LABEL "MMBlib (dynamic)") TARGET_LINK_LIBRARIES(${SHARED_MMB_TARGET} ${SimTK_SHARED_LIBS_D} ${SimTK_SHARED_LIBS} ${SimTK_GENERAL_LIBS}) # Link with shared (dynamic) library ADD_EXECUTABLE(MMB ${MMB_HEADER_FILES} ${MMB_SOURCE_FILES}) SET_TARGET_PROPERTIES(MMB PROPERTIES PROJECT_LABEL "MMB - Dynamic") TARGET_LINK_LIBRARIES(MMB debug MMBlib_d optimized MMBlib ${SimTK_SHARED_LIBS_D} ${SimTK_SHARED_LIBS} ${SimTK_GENERAL_LIBS}) ENDIF (BUILD_MMB_SHARED) IF (BUILD_MMB_STATIC) # Create static library for most of MMB ADD_LIBRARY(${STATIC_MMB_TARGET} STATIC ${MMB_LIBRARY_SOURCE_FILES} ${MMB_HEADER_FILES}) SET_TARGET_PROPERTIES(${STATIC_MMB_TARGET} PROPERTIES COMPILE_FLAGS "-DMMB_BUILDING_STATIC_LIBRARY -DSimTK_USE_STATIC_LIBRARIES" PROJECT_LABEL "MMBlib (static)") TARGET_LINK_LIBRARIES(${STATIC_MMB_TARGET} ${SimTK_STATIC_LIBS_D} ${SimTK_STATIC_LIBS} ${SimTK_GENERAL_LIBS}) # Link with static library ADD_EXECUTABLE(MMB_static ${MMB_HEADER_FILES} ${MMB_SOURCE_FILES}) SET_TARGET_PROPERTIES(MMB_static PROPERTIES COMPILE_FLAGS "-DSimTK_USE_STATIC_LIBRARIES -DMMB_USE_STATIC_LIBRARIES" PROJECT_LABEL "MMB - Static") TARGET_LINK_LIBRARIES(MMB_static debug MMBlib_static_d optimized MMBlib_static ${SimTK_STATIC_LIBS_D} ${SimTK_STATIC_LIBS} ${SimTK_GENERAL_LIBS}) ENDIF (BUILD_MMB_STATIC)