Fixes in build systems for autotools and cmake, see Issue 438

Thanks to Daniel KO Listas at the ODE mailing list
Don't build graphics demos when OpenGL or GLUT is not found
CMake will still build the non-graphical HelloWorld demo (output text to console)

Fix linker error: ThreadingDemo requires pthreads on UNIX systems
Thanks to reptor, see also http://bulletphysics.org/Bullet/phpBB3/posting.php?mode=reply&f=9&t=5748
This commit is contained in:
erwin.coumans
2010-10-06 23:07:00 +00:00
parent eefffc2cf2
commit cbeb5864eb
8 changed files with 159 additions and 94 deletions

View File

@@ -18,8 +18,8 @@ IF (NOT CMAKE_BUILD_TYPE)
ENDIF (NOT CMAKE_BUILD_TYPE) ENDIF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
#MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF) OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON) OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
OPTION(USE_MULTITHREADED_BENCHMARK "Use Multithreaded Benchmark" OFF) OPTION(USE_MULTITHREADED_BENCHMARK "Use Multithreaded Benchmark" OFF)
@@ -225,12 +225,12 @@ ENDIF(COMMAND cmake_policy)
FIND_PACKAGE(OpenGL) FIND_PACKAGE(OpenGL)
IF (OPENGL_FOUND) IF (OPENGL_FOUND)
MESSAGE("OPENGL FOUND") MESSAGE("OPENGL FOUND")
MESSAGE(${OPENGL_LIBRARIES}) MESSAGE(${OPENGL_LIBRARIES})
ELSE (OPENGL_FOUND) ELSE (OPENGL_FOUND)
MESSAGE("OPENGL NOT FOUND") MESSAGE("OPENGL NOT FOUND")
SET(OPENGL_gl_LIBRARY opengl32) SET(OPENGL_gl_LIBRARY opengl32)
SET(OPENGL_glu_LIBRARY glu32) SET(OPENGL_glu_LIBRARY glu32)
ENDIF (OPENGL_FOUND) ENDIF (OPENGL_FOUND)
# ADD_DEFINITIONS(-DBT_USE_FREEGLUT) # ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
@@ -240,36 +240,34 @@ FIND_PACKAGE(GLU)
IF (USE_GLUT) IF (USE_GLUT)
FIND_PACKAGE(GLUT) FIND_PACKAGE(GLUT)
IF (GLUT_FOUND) IF (GLUT_FOUND)
MESSAGE("GLUT FOUND") MESSAGE("GLUT FOUND")
MESSAGE(${GLUT_glut_LIBRARY}) MESSAGE(${GLUT_glut_LIBRARY})
ELSE (GLUT_FOUND) ELSE (GLUT_FOUND)
IF (MINGW)
IF (MINGW) MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32")
MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32") SET(GLUT_glut_LIBRARY glut32)
SET(GLUT_glut_LIBRARY glut32) ENDIF (MINGW)
ENDIF (MINGW) IF (MSVC)
IF (CMAKE_CL_64)
IF (MSVC) message("Win64 using Glut/glut64.lib")
IF (CMAKE_CL_64) SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)
message("Win64 using Glut/glut64.lib") ELSE(CMAKE_CL_64)
SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib) message("Win32 using Glut/glut32.lib")
ELSE(CMAKE_CL_64) SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)
message("Win32 using Glut/glut32.lib") ENDIF (CMAKE_CL_64)
SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib) INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut)
ENDIF (CMAKE_CL_64) ELSE()
MESSAGE("GLUT NOT FOUND")
ENDIF (MSVC) ENDIF (MSVC)
ENDIF (GLUT_FOUND) ENDIF (GLUT_FOUND)
IF (WIN32) IF(NOT WIN32)
INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut) # This is added for linux. This should always work if everything is installed and working fine.
ELSE (WIN32) INCLUDE_DIRECTORIES(/usr/include /usr/local/include)
# This is the lines for linux. This should always work if everything is installed and working fine. ENDIF()
INCLUDE_DIRECTORIES(/usr/include /usr/local/include ${GLUT_INCLUDE_DIR})
ENDIF (WIN32)
ENDIF(USE_GLUT) ENDIF(USE_GLUT)
OPTION(BUILD_DEMOS "Set when you want to build the demos" ON) OPTION(BUILD_DEMOS "Set when you want to build the demos" ON)
IF(BUILD_DEMOS) IF(BUILD_DEMOS)
IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos) IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos)

View File

@@ -3,51 +3,56 @@ IF (USE_DX11)
SUBDIRS(DX11ClothDemo) SUBDIRS(DX11ClothDemo)
ENDIF() ENDIF()
SUBDIRS( HelloWorld )
IF (USE_GLUT) IF (USE_GLUT)
IF (GLUT_FOUND)
IF(BUILD_CPU_DEMOS) IF(BUILD_CPU_DEMOS)
SET(SharedDemoSubdirs SET(SharedDemoSubdirs
OpenGL AllBulletDemos ConvexDecompositionDemo HelloWorld OpenGL AllBulletDemos ConvexDecompositionDemo
CcdPhysicsDemo ConstraintDemo SliderConstraintDemo GenericJointDemo Raytracer CcdPhysicsDemo ConstraintDemo SliderConstraintDemo GenericJointDemo Raytracer
RagdollDemo ForkLiftDemo BasicDemo Box2dDemo BspDemo MovingConcaveDemo VehicleDemo RagdollDemo ForkLiftDemo BasicDemo Box2dDemo BspDemo MovingConcaveDemo VehicleDemo
UserCollisionAlgorithm CharacterDemo SoftDemo HeightFieldFluidDemo UserCollisionAlgorithm CharacterDemo SoftDemo HeightFieldFluidDemo
CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo
DoublePrecisionDemo ConcaveDemo CollisionDemo DoublePrecisionDemo ConcaveDemo CollisionDemo
ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo
MultiMaterialDemo SerializeDemo InternalEdgeDemo MultiMaterialDemo SerializeDemo InternalEdgeDemo
) )
ELSE() ELSE()
SET(SharedDemoSubdirs SET(SharedDemoSubdirs
OpenGL OpenGL
)
ENDIF()
SUBDIRS( ${SharedDemoSubdirs}
Benchmarks
ThreadingDemo
MultiThreadedDemo
VectorAdd_OpenCL
ParticlesOpenCL
OpenCLClothDemo
) )
ENDIF()
SUBDIRS(
${SharedDemoSubdirs}
Benchmarks
ThreadingDemo
MultiThreadedDemo
VectorAdd_OpenCL
ParticlesOpenCL
OpenCLClothDemo
)
ENDIF(GLUT_FOUND)
ELSE (USE_GLUT) ELSE (USE_GLUT)
IF (WIN32)
SUBDIRS(
OpenGL
BasicDemo
Benchmarks
Box2dDemo
CollisionInterfaceDemo
ConcaveDemo
ConstraintDemo
ConvexDecompositionDemo
InternalEdgeDemo
GimpactTestDemo
GenericJointDemo
SerializeDemo
SoftDemo
VectorAdd_OpenCL
)
ENDIF(WIN32)
ENDIF (USE_GLUT)
SUBDIRS(
OpenGL
BasicDemo
Benchmarks
Box2dDemo
CollisionInterfaceDemo
ConcaveDemo
ConstraintDemo
ConvexDecompositionDemo
InternalEdgeDemo
GimpactTestDemo
GenericJointDemo
SerializeDemo
SoftDemo
VectorAdd_OpenCL
)
ENDIF (USE_GLUT)

View File

@@ -19,22 +19,24 @@ INCLUDE_DIRECTORIES(
${VECTOR_MATH_INCLUDE} ${VECTOR_MATH_INCLUDE}
) )
IF (USE_GLUT) LINK_LIBRARIES(
LINK_LIBRARIES( BulletMultiThreaded BulletDynamics BulletCollision LinearMath
OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} )
)
IF (WIN32) IF (WIN32)
ADD_EXECUTABLE(AppThreadingDemo
main.cpp
${BULLET_PHYSICS_SOURCE_DIR}/msvc/bullet.rc
)
ELSE()
ADD_EXECUTABLE(AppThreadingDemo ADD_EXECUTABLE(AppThreadingDemo
main.cpp main.cpp
${BULLET_PHYSICS_SOURCE_DIR}/msvc/bullet.rc )
) ENDIF()
ELSE()
ADD_EXECUTABLE(AppThreadingDemo IF (UNIX)
main.cpp TARGET_LINK_LIBRARIES(AppThreadingDemo pthread)
) ENDIF(UNIX)
ENDIF()
ENDIF (USE_GLUT)
IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES)
SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES DEBUG_POSTFIX "_Debug") SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES DEBUG_POSTFIX "_Debug")

View File

@@ -2,6 +2,6 @@ SUBDIRS( Serialize ConvexDecomposition GIMPACTUtils )
#Maya Dynamica plugin is moved to http://dynamica.googlecode.com #Maya Dynamica plugin is moved to http://dynamica.googlecode.com
IF (USE_GLUT) IF (USE_GLUT AND GLUT_FOUND)
SUBDIRS (glui) SUBDIRS (glui)
ENDIF (USE_GLUT) ENDIF ()

View File

@@ -1,7 +1,7 @@
if CONDITIONAL_BUILD_DEMOS if CONDITIONAL_BUILD_DEMOS
SUBDIRS=src Extras Demos SUBDIRS=src Extras Demos
else else
SUBDIRS=src Extras SUBDIRS=src
endif endif
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = bullet.pc pkgconfig_DATA = bullet.pc

View File

@@ -9,9 +9,24 @@
/* Architecture is x86-64 */ /* Architecture is x86-64 */
#undef ARCH_X86_64 #undef ARCH_X86_64
/* Use the Apple OpenGL framework. */
#undef HAVE_APPLE_OPENGL_FRAMEWORK
/* Define to 1 if you have the <dlfcn.h> header file. */ /* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H #undef HAVE_DLFCN_H
/* Define to 1 if you have the <GL/glext.h> header file. */
#undef HAVE_GL_GLEXT_H
/* Define to 1 if you have the <GL/glut.h> header file. */
#undef HAVE_GL_GLUT_H
/* Define to 1 if you have the <GL/glu.h> header file. */
#undef HAVE_GL_GLU_H
/* Define to 1 if you have the <GL/gl.h> header file. */
#undef HAVE_GL_GL_H
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H

View File

@@ -81,10 +81,53 @@ AM_CONDITIONAL([CONDITIONAL_BUILD_MULTITHREADED], [test "$build_multithreaded" =
AC_ARG_ENABLE([demos], AC_ARG_ENABLE([demos],
[AS_HELP_STRING([--disable-demos], [AS_HELP_STRING([--disable-demos],
[disable Bullet demos])], [disable Bullet demos])],
[], [],
[enable_demos=yes]) [enable_demos=yes])
AM_CONDITIONAL([CONDITIONAL_BUILD_DEMOS], [false]) AM_CONDITIONAL([CONDITIONAL_BUILD_DEMOS], [false])
dnl Check for OpenGL and GLUT
if test "x$drawstuff" = "xOSX"; then
AC_DEFINE([HAVE_APPLE_OPENGL_FRAMEWORK], [1],
[Use the Apple OpenGL framework.])
GL_LIBS="-framework GLUT -framework OpenGL -framework Carbon -framework AGL"
have_glut=yes
else
have_gl_headers=yes
AC_CHECK_HEADERS(GL/gl.h GL/glu.h GL/glext.h GL/glut.h, ,
[have_gl_headers=no],
[[#ifdef WIN32
#include <windows.h>
#endif
#if HAVE_GL_GL_H
#include <GL/gl.h>
#endif
#if HAVE_GL_GLU_H
#include <GL/glu.h>
#endif
]])
have_gl=no
have_glu=no
have_glut=no
TEMP_LDFLAGS="$LDFLAGS"
AC_CHECK_LIB(GL, main, [GL_LIBS="-lGL"; have_gl=yes])
AC_CHECK_LIB(GLU, main, [GL_LIBS="-lGLU $GL_LIBS"; have_glu=yes], , -lGL)
AC_CHECK_LIB(GLUT, main, [GL_LIBS="-lGLUT -LGLU $GL_LIBS"; have_glut=yes], ,-lGLUT)
AC_CHECK_LIB(opengl32, main, [GL_LIBS="-lopengl32"; have_gl=yes])
AC_CHECK_LIB(glu32, main, [GL_LIBS="-lglu32 $GL_LIBS"; have_glu=yes], , -lopengl32)
LDFLAGS="$TEMP_LDFLAGS"
if test $have_gl = no -o $have_glu = no -o $have_gl_headers = no; then
if test x$enable_demos = xyes; then
AC_MSG_WARN([Demos and Extras will not be built because OpenGL and GLUT doesn't seem to work. See `config.log' for details.])
fi
enable_demos=no
else
AC_MSG_NOTICE([Found OpenGL])
fi
fi
AC_SUBST(GL_LIBS)
if test "x$enable_demos" != xno; then if test "x$enable_demos" != xno; then
AC_MSG_NOTICE([Building Bullet demos]) AC_MSG_NOTICE([Building Bullet demos])
AM_CONDITIONAL([CONDITIONAL_BUILD_DEMOS],[true]) AM_CONDITIONAL([CONDITIONAL_BUILD_DEMOS],[true])

View File

@@ -341,4 +341,6 @@ public:
virtual void copySoftBodyToVertexBuffer( const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer ); virtual void copySoftBodyToVertexBuffer( const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer );
}; };
#endif // #ifndef BT_ACCELERATED_SOFT_BODY_CPU_SOLVER_H #endif // #ifndef BT_ACCELERATED_SOFT_BODY_CPU_SOLVER_H