2013-12-19 20:40:59 +00:00
|
|
|
cmake_minimum_required(VERSION 2.4.3)
|
|
|
|
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
|
|
|
|
|
|
|
#this line has to appear before 'PROJECT' in order to be able to disable incremental linking
|
|
|
|
SET(MSVC_INCREMENTAL_DEFAULT ON)
|
|
|
|
|
|
|
|
PROJECT(BULLET_PHYSICS)
|
|
|
|
SET(BULLET_VERSION 2.82)
|
|
|
|
|
|
|
|
IF(COMMAND cmake_policy)
|
|
|
|
cmake_policy(SET CMP0003 NEW)
|
|
|
|
ENDIF(COMMAND cmake_policy)
|
|
|
|
|
|
|
|
|
|
|
|
IF (NOT CMAKE_BUILD_TYPE)
|
|
|
|
# SET(CMAKE_BUILD_TYPE "Debug")
|
|
|
|
SET(CMAKE_BUILD_TYPE "Release")
|
|
|
|
ENDIF (NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
|
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
|
|
|
|
#MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
|
|
|
|
|
|
|
|
OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
|
|
|
|
OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
|
|
|
|
|
|
|
|
|
|
|
|
OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" OFF)
|
|
|
|
OPTION(USE_MSVC_INCREMENTAL_LINKING "Use MSVC Incremental Linking" OFF)
|
|
|
|
OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
#SET(CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:NO")
|
|
|
|
#SET(CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 /INCREMENTAL:NO")
|
|
|
|
|
|
|
|
#MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
|
|
|
|
|
|
|
|
|
|
|
|
IF(MSVC)
|
|
|
|
IF (NOT USE_MSVC_INCREMENTAL_LINKING)
|
|
|
|
#MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
|
|
|
|
SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
|
|
|
|
|
|
|
|
STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
|
|
|
|
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
|
|
|
|
MESSAGE("CMAKE_EXE_LINKER_FLAGS_DEBUG=${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
|
|
|
|
|
|
|
|
# STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags2 ${CMAKE_EXE_LINKER_FLAGS})
|
|
|
|
# SET(CMAKE_EXE_LINKER_FLAGS ${replacementFlag2})
|
|
|
|
# STRING(REPLACE "INCREMENTAL:YES" "" replacementFlags3 ${CMAKE_EXTRA_LINK_FLAGS})
|
|
|
|
# SET(CMAKE_EXTRA_LINK_FLAGS ${replacementFlag3})
|
|
|
|
|
|
|
|
|
|
|
|
STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags3 ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO})
|
|
|
|
SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacementFlags3})
|
|
|
|
SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO ${replacementFlags3}" )
|
|
|
|
|
|
|
|
ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
|
|
|
|
|
|
|
|
IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
|
|
|
#We statically link to reduce dependancies
|
|
|
|
FOREACH(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
|
|
IF(${flag_var} MATCHES "/MD")
|
|
|
|
STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
|
|
ENDIF(${flag_var} MATCHES "/MD")
|
|
|
|
IF(${flag_var} MATCHES "/MDd")
|
|
|
|
STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
|
|
|
|
ENDIF(${flag_var} MATCHES "/MDd")
|
|
|
|
ENDFOREACH(flag_var)
|
|
|
|
ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
|
|
|
|
|
|
|
IF (CMAKE_CL_64)
|
|
|
|
ADD_DEFINITIONS(-D_WIN64)
|
|
|
|
ELSE()
|
|
|
|
OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
|
|
|
|
IF (USE_MSVC_SSE)
|
|
|
|
ADD_DEFINITIONS(/arch:SSE)
|
|
|
|
ENDIF()
|
|
|
|
ENDIF()
|
|
|
|
OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
|
|
|
|
IF (USE_MSVC_FAST_FLOATINGPOINT)
|
|
|
|
ADD_DEFINITIONS(/fp:fast)
|
|
|
|
ENDIF()
|
|
|
|
ENDIF(MSVC)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF (WIN32)
|
|
|
|
OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
|
|
|
|
|
|
|
|
IF (INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
|
|
|
|
SET (LIBRARY_OUTPUT_PATH ${BULLET_PHYSICS_SOURCE_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR})
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BULLET_PHYSICS_SOURCE_DIR})
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BULLET_PHYSICS_SOURCE_DIR})
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BULLET_PHYSICS_SOURCE_DIR})
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BULLET_PHYSICS_SOURCE_DIR})
|
|
|
|
ELSE()
|
|
|
|
SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTION(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES "Create MSVC projectfiles with relative paths" OFF)
|
|
|
|
OPTION(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES "Add MSVC postfix for executable names (_Debug)" OFF)
|
|
|
|
|
|
|
|
SET(CMAKE_DEBUG_POSTFIX "_Debug" CACHE STRING "Adds a postfix for debug-built libraries.")
|
|
|
|
SET(CMAKE_MINSIZEREL_POSTFIX "_MinsizeRel" CACHE STRING "Adds a postfix for MinsizeRelease-built libraries.")
|
|
|
|
SET(CMAKE_RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo" CACHE STRING "Adds a postfix for ReleaseWithDebug-built libraries.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF (INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
|
|
|
|
SET(CMAKE_SUPPRESS_REGENERATION 1)
|
|
|
|
SET(CMAKE_USE_RELATIVE_PATHS 1)
|
|
|
|
ENDIF(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
|
|
|
|
|
|
|
|
ENDIF (WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU demos" ON)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTION(INTERNAL_UPDATE_SERIALIZATION_STRUCTURES "Internal update serialization structures" OFF)
|
|
|
|
IF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
|
|
|
|
ADD_DEFINITIONS( -DBT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
|
|
|
|
ENDIF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
|
|
|
|
|
|
|
|
IF (USE_DOUBLE_PRECISION)
|
|
|
|
ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
|
|
|
|
SET( BULLET_DOUBLE_DEF "-DBT_USE_DOUBLE_PRECISION")
|
|
|
|
ENDIF (USE_DOUBLE_PRECISION)
|
|
|
|
|
|
|
|
IF(USE_GRAPHICAL_BENCHMARK)
|
|
|
|
ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
|
|
|
|
ENDIF (USE_GRAPHICAL_BENCHMARK)
|
|
|
|
|
|
|
|
IF (WIN32)
|
|
|
|
OPTION(USE_GLUT "Use Glut" ON)
|
|
|
|
ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
|
|
|
|
ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
|
|
|
|
ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
|
|
|
|
|
|
|
|
IF (USE_GLUT AND MSVC)
|
|
|
|
string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
|
|
|
remove_definitions(-D_WINDOWS )
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
OPTION(USE_GLUT "Use Glut" ON)
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
IF(COMMAND cmake_policy)
|
|
|
|
cmake_policy(SET CMP0003 NEW)
|
|
|
|
ENDIF(COMMAND cmake_policy)
|
|
|
|
|
|
|
|
|
|
|
|
# This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system
|
|
|
|
# This should be the case.
|
|
|
|
|
|
|
|
FIND_PACKAGE(OpenGL)
|
|
|
|
IF (OPENGL_FOUND)
|
|
|
|
MESSAGE("OPENGL FOUND")
|
|
|
|
MESSAGE(${OPENGL_LIBRARIES})
|
|
|
|
ELSE (OPENGL_FOUND)
|
|
|
|
MESSAGE("OPENGL NOT FOUND")
|
|
|
|
SET(OPENGL_gl_LIBRARY opengl32)
|
|
|
|
SET(OPENGL_glu_LIBRARY glu32)
|
|
|
|
ENDIF (OPENGL_FOUND)
|
|
|
|
|
|
|
|
# ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
|
|
|
|
|
|
|
|
#FIND_PACKAGE(GLU)
|
|
|
|
|
2014-03-18 06:58:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
OPTION(BUILD_OBSOLETE_DEMOS "Set when you want to build the obsolete Bullet 2 demos" OFF)
|
|
|
|
IF(BUILD_OBSOLETE_DEMOS)
|
|
|
|
|
2013-12-19 20:40:59 +00:00
|
|
|
IF (USE_GLUT)
|
|
|
|
IF (MSVC)
|
|
|
|
SET(GLUT_FOUND TRUE)
|
|
|
|
ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
|
|
|
|
|
|
|
|
IF (CMAKE_CL_64)
|
|
|
|
message("Win64 using static freeglut in ObsoleteDemos/Glut/glut64.lib")
|
|
|
|
SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/ObsoleteDemos/Glut/glut64.lib glu32.lib gdi32.lib winmm.lib user32.lib)
|
|
|
|
ELSE(CMAKE_CL_64)
|
|
|
|
message("Win32 using static freeglut in ObsoleteDemos/Glut/glut32.lib")
|
|
|
|
SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/ObsoleteDemos/Glut/glut32.lib glu32.lib gdi32.lib winmm.lib user32.lib)
|
|
|
|
ENDIF (CMAKE_CL_64)
|
2014-03-18 06:58:03 +00:00
|
|
|
SET(GLUT_INCLUDE_DIR ${BULLET_PHYSICS_SOURCE_DIR}/ObsoleteDemos/Glut )
|
2013-12-19 20:40:59 +00:00
|
|
|
ELSE()
|
|
|
|
FIND_PACKAGE(GLUT)
|
|
|
|
IF (GLUT_FOUND)
|
|
|
|
MESSAGE("GLUT FOUND")
|
|
|
|
MESSAGE(${GLUT_glut_LIBRARY})
|
|
|
|
ELSE (GLUT_FOUND)
|
|
|
|
# IF (MINGW)
|
|
|
|
# MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32")
|
|
|
|
# SET(GLUT_glut_LIBRARY glut32)
|
|
|
|
# #TODO add better GLUT detection for MinGW
|
|
|
|
# SET(GLUT_FOUND TRUE)
|
|
|
|
# ELSE (MINGW)
|
|
|
|
MESSAGE("GLUT NOT FOUND")
|
|
|
|
# ENDIF (MINGW)
|
|
|
|
ENDIF (GLUT_FOUND)
|
|
|
|
ENDIF (MSVC)
|
|
|
|
|
2014-03-18 06:58:03 +00:00
|
|
|
IF(NOT WIN32 AND NOT APPLE)
|
2013-12-19 20:40:59 +00:00
|
|
|
# This is added for linux. This should always work if everything is installed and working fine.
|
2014-03-18 06:58:03 +00:00
|
|
|
SET(GLUT_INCLUDE_DIR /usr/include /usr/local/include)
|
2013-12-19 20:40:59 +00:00
|
|
|
ENDIF()
|
|
|
|
ENDIF(USE_GLUT)
|
|
|
|
|
|
|
|
|
|
|
|
IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/ObsoleteDemos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/ObsoleteDemos)
|
|
|
|
SUBDIRS(ObsoleteDemos)
|
|
|
|
ENDIF()
|
2014-03-18 06:58:03 +00:00
|
|
|
ENDIF(BUILD_OBSOLETE_DEMOS)
|
2013-12-19 20:40:59 +00:00
|
|
|
|
2014-03-18 06:58:03 +00:00
|
|
|
OPTION(BUILD_BULLET3_DEMOS "Set when you want to build the Bullet 3 demos" ON)
|
|
|
|
IF(BUILD_BULLET3_DEMOS)
|
|
|
|
IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos3 AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos3)
|
|
|
|
SUBDIRS(Demos3)
|
|
|
|
SUBDIRS(btgui)
|
|
|
|
ENDIF()
|
|
|
|
ENDIF(BUILD_BULLET3_DEMOS)
|
2013-12-19 20:40:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Maya Dynamica plugin is moved to http://dynamica.googlecode.com
|
|
|
|
|
|
|
|
SUBDIRS(src)
|
|
|
|
|
|
|
|
IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
|
|
|
|
OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
|
|
|
|
ELSE()
|
|
|
|
IF(APPLE AND FRAMEWORK)
|
|
|
|
OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
|
|
|
|
ELSE()
|
|
|
|
#by default, don't enable the 'INSTALL' option for Xcode and MSVC projectfiles
|
|
|
|
OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
|
|
|
|
ENDIF()
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
IF(INSTALL_LIBS)
|
|
|
|
SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
|
|
|
|
SET (LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Library directory name")
|
|
|
|
## the following are directories where stuff will be installed to
|
|
|
|
SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/bullet/" CACHE PATH "The subdirectory to the header prefix")
|
|
|
|
SET(PKGCONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig/" CACHE STRING "Base directory for pkgconfig files")
|
|
|
|
IF(NOT WIN32)
|
|
|
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
|
|
|
|
INSTALL(
|
|
|
|
FILES
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
|
|
|
|
DESTINATION
|
|
|
|
${PKGCONFIG_INSTALL_PREFIX})
|
|
|
|
ENDIF(NOT WIN32)
|
|
|
|
ENDIF(INSTALL_LIBS)
|
|
|
|
|
|
|
|
#INSTALL of other files requires CMake 2.6
|
|
|
|
#IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
|
|
|
|
# OPTION(INSTALL_EXTRA_LIBS "Set when you want extra libraries installed" OFF)
|
|
|
|
#ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
|
|
|
|
|
|
|
|
OPTION(BUILD_UNIT_TESTS "Build Unit Tests" OFF)
|
|
|
|
|
|
|
|
IF (BUILD_UNIT_TESTS)
|
|
|
|
SUBDIRS(UnitTests)
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
set (BULLET_CONFIG_CMAKE_PATH lib${LIB_SUFFIX}/cmake/bullet )
|
|
|
|
list (APPEND BULLET_LIBRARIES LinearMath)
|
|
|
|
list (APPEND BULLET_LIBRARIES BulletCollisions)
|
|
|
|
list (APPEND BULLET_LIBRARIES BulletDynamics)
|
|
|
|
list (APPEND BULLET_LIBRARIES BulletSoftBody)
|
|
|
|
set (BULLET_USE_FILE ${CMAKE_INSTALL_PREFIX}/${BULLET_CONFIG_CMAKE_PATH}/UseBullet.cmake)
|
|
|
|
configure_file ( ${CMAKE_SOURCE_DIR}/BulletConfig.cmake.in
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
|
|
|
|
@ONLY ESCAPE_QUOTES
|
|
|
|
)
|
|
|
|
install ( FILES ${CMAKE_SOURCE_DIR}/UseBullet.cmake
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
|
|
|
|
DESTINATION ${BULLET_CONFIG_CMAKE_PATH}
|
|
|
|
)
|