From cbeb5864eb1673b0484a15b3e3001dde30b7af77 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Wed, 6 Oct 2010 23:07:00 +0000 Subject: [PATCH] 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 --- CMakeLists.txt | 60 ++++++------ Demos/CMakeLists.txt | 91 ++++++++++--------- Demos/ThreadingDemo/CMakeLists.txt | 30 +++--- Extras/CMakeLists.txt | 6 +- Makefile.am | 2 +- config.h.in | 15 +++ configure.ac | 45 ++++++++- .../CPU/btSoftBodySolver_CPU.h | 4 +- 8 files changed, 159 insertions(+), 94 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4cd1d2fba..2c7bc742a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,8 @@ IF (NOT CMAKE_BUILD_TYPE) 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}) -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_MULTITHREADED_BENCHMARK "Use Multithreaded Benchmark" OFF) @@ -225,12 +225,12 @@ ENDIF(COMMAND cmake_policy) FIND_PACKAGE(OpenGL) IF (OPENGL_FOUND) -MESSAGE("OPENGL FOUND") -MESSAGE(${OPENGL_LIBRARIES}) + MESSAGE("OPENGL FOUND") + MESSAGE(${OPENGL_LIBRARIES}) ELSE (OPENGL_FOUND) -MESSAGE("OPENGL NOT FOUND") -SET(OPENGL_gl_LIBRARY opengl32) -SET(OPENGL_glu_LIBRARY glu32) + MESSAGE("OPENGL NOT FOUND") + SET(OPENGL_gl_LIBRARY opengl32) + SET(OPENGL_glu_LIBRARY glu32) ENDIF (OPENGL_FOUND) # ADD_DEFINITIONS(-DBT_USE_FREEGLUT) @@ -240,36 +240,34 @@ FIND_PACKAGE(GLU) IF (USE_GLUT) FIND_PACKAGE(GLUT) IF (GLUT_FOUND) - MESSAGE("GLUT FOUND") - MESSAGE(${GLUT_glut_LIBRARY}) + 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) - ENDIF (MINGW) - - IF (MSVC) - IF (CMAKE_CL_64) - message("Win64 using Glut/glut64.lib") - SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib) - ELSE(CMAKE_CL_64) - message("Win32 using Glut/glut32.lib") - SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib) - ENDIF (CMAKE_CL_64) - - ENDIF (MSVC) + IF (MINGW) + MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32") + SET(GLUT_glut_LIBRARY glut32) + ENDIF (MINGW) + IF (MSVC) + IF (CMAKE_CL_64) + message("Win64 using Glut/glut64.lib") + SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib) + ELSE(CMAKE_CL_64) + message("Win32 using Glut/glut32.lib") + SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib) + ENDIF (CMAKE_CL_64) + INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut) + ELSE() + MESSAGE("GLUT NOT FOUND") + ENDIF (MSVC) ENDIF (GLUT_FOUND) - IF (WIN32) - INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut) - ELSE (WIN32) - # This is the lines for linux. This should always work if everything is installed and working fine. - INCLUDE_DIRECTORIES(/usr/include /usr/local/include ${GLUT_INCLUDE_DIR}) - ENDIF (WIN32) - + IF(NOT WIN32) + # This is added for linux. This should always work if everything is installed and working fine. + INCLUDE_DIRECTORIES(/usr/include /usr/local/include) + ENDIF() ENDIF(USE_GLUT) + OPTION(BUILD_DEMOS "Set when you want to build the demos" ON) IF(BUILD_DEMOS) IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos) diff --git a/Demos/CMakeLists.txt b/Demos/CMakeLists.txt index 35d90a508..f0bf91077 100644 --- a/Demos/CMakeLists.txt +++ b/Demos/CMakeLists.txt @@ -3,51 +3,56 @@ IF (USE_DX11) SUBDIRS(DX11ClothDemo) ENDIF() +SUBDIRS( HelloWorld ) + + IF (USE_GLUT) - -IF(BUILD_CPU_DEMOS) - SET(SharedDemoSubdirs - OpenGL AllBulletDemos ConvexDecompositionDemo HelloWorld - CcdPhysicsDemo ConstraintDemo SliderConstraintDemo GenericJointDemo Raytracer - RagdollDemo ForkLiftDemo BasicDemo Box2dDemo BspDemo MovingConcaveDemo VehicleDemo - UserCollisionAlgorithm CharacterDemo SoftDemo HeightFieldFluidDemo - CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo - DoublePrecisionDemo ConcaveDemo CollisionDemo - ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo - MultiMaterialDemo SerializeDemo InternalEdgeDemo - ) -ELSE() - SET(SharedDemoSubdirs - OpenGL - ) -ENDIF() - - SUBDIRS( ${SharedDemoSubdirs} - Benchmarks - ThreadingDemo - MultiThreadedDemo - VectorAdd_OpenCL - ParticlesOpenCL - OpenCLClothDemo + IF (GLUT_FOUND) + IF(BUILD_CPU_DEMOS) + SET(SharedDemoSubdirs + OpenGL AllBulletDemos ConvexDecompositionDemo + CcdPhysicsDemo ConstraintDemo SliderConstraintDemo GenericJointDemo Raytracer + RagdollDemo ForkLiftDemo BasicDemo Box2dDemo BspDemo MovingConcaveDemo VehicleDemo + UserCollisionAlgorithm CharacterDemo SoftDemo HeightFieldFluidDemo + CollisionInterfaceDemo ConcaveConvexcastDemo SimplexDemo DynamicControlDemo + DoublePrecisionDemo ConcaveDemo CollisionDemo + ContinuousConvexCollision ConcaveRaycastDemo GjkConvexCastDemo + MultiMaterialDemo SerializeDemo InternalEdgeDemo + ) + ELSE() + SET(SharedDemoSubdirs + OpenGL ) + ENDIF() + SUBDIRS( + ${SharedDemoSubdirs} + Benchmarks + ThreadingDemo + MultiThreadedDemo + VectorAdd_OpenCL + ParticlesOpenCL + OpenCLClothDemo + ) + ENDIF(GLUT_FOUND) 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) \ No newline at end of file diff --git a/Demos/ThreadingDemo/CMakeLists.txt b/Demos/ThreadingDemo/CMakeLists.txt index 16ca3f14c..b27cce4cd 100644 --- a/Demos/ThreadingDemo/CMakeLists.txt +++ b/Demos/ThreadingDemo/CMakeLists.txt @@ -19,22 +19,24 @@ INCLUDE_DIRECTORIES( ${VECTOR_MATH_INCLUDE} ) -IF (USE_GLUT) - LINK_LIBRARIES( - OpenGLSupport BulletMultiThreaded BulletDynamics BulletCollision LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} - ) +LINK_LIBRARIES( +BulletMultiThreaded BulletDynamics BulletCollision LinearMath +) - IF (WIN32) +IF (WIN32) +ADD_EXECUTABLE(AppThreadingDemo + main.cpp + ${BULLET_PHYSICS_SOURCE_DIR}/msvc/bullet.rc + ) +ELSE() ADD_EXECUTABLE(AppThreadingDemo - main.cpp - ${BULLET_PHYSICS_SOURCE_DIR}/msvc/bullet.rc - ) - ELSE() - ADD_EXECUTABLE(AppThreadingDemo - main.cpp - ) - ENDIF() -ENDIF (USE_GLUT) + main.cpp + ) +ENDIF() + +IF (UNIX) + TARGET_LINK_LIBRARIES(AppThreadingDemo pthread) +ENDIF(UNIX) IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) SET_TARGET_PROPERTIES(AppThreadingDemo PROPERTIES DEBUG_POSTFIX "_Debug") diff --git a/Extras/CMakeLists.txt b/Extras/CMakeLists.txt index 293a65cca..0b7ba7a1b 100644 --- a/Extras/CMakeLists.txt +++ b/Extras/CMakeLists.txt @@ -2,6 +2,6 @@ SUBDIRS( Serialize ConvexDecomposition GIMPACTUtils ) #Maya Dynamica plugin is moved to http://dynamica.googlecode.com -IF (USE_GLUT) -SUBDIRS (glui) -ENDIF (USE_GLUT) +IF (USE_GLUT AND GLUT_FOUND) + SUBDIRS (glui) +ENDIF () diff --git a/Makefile.am b/Makefile.am index b243b33a3..a9b97a8e6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ if CONDITIONAL_BUILD_DEMOS SUBDIRS=src Extras Demos else -SUBDIRS=src Extras +SUBDIRS=src endif pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = bullet.pc diff --git a/config.h.in b/config.h.in index c444a0bbb..3da52c325 100644 --- a/config.h.in +++ b/config.h.in @@ -9,9 +9,24 @@ /* Architecture is x86-64 */ #undef ARCH_X86_64 +/* Use the Apple OpenGL framework. */ +#undef HAVE_APPLE_OPENGL_FRAMEWORK + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLEXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLUT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GLU_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GL_GL_H + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H diff --git a/configure.ac b/configure.ac index b94517ed1..c1bd798ef 100644 --- a/configure.ac +++ b/configure.ac @@ -81,10 +81,53 @@ AM_CONDITIONAL([CONDITIONAL_BUILD_MULTITHREADED], [test "$build_multithreaded" = AC_ARG_ENABLE([demos], [AS_HELP_STRING([--disable-demos], - [disable Bullet demos])], + [disable Bullet demos])], [], [enable_demos=yes]) 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 + #endif + #if HAVE_GL_GL_H + #include + #endif + #if HAVE_GL_GLU_H + #include + #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 AC_MSG_NOTICE([Building Bullet demos]) AM_CONDITIONAL([CONDITIONAL_BUILD_DEMOS],[true]) diff --git a/src/BulletMultiThreaded/GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h b/src/BulletMultiThreaded/GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h index 0e014c7d7..18a749ea4 100644 --- a/src/BulletMultiThreaded/GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h +++ b/src/BulletMultiThreaded/GpuSoftBodySolvers/CPU/btSoftBodySolver_CPU.h @@ -341,4 +341,6 @@ public: virtual void copySoftBodyToVertexBuffer( const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer ); }; -#endif // #ifndef BT_ACCELERATED_SOFT_BODY_CPU_SOLVER_H \ No newline at end of file +#endif // #ifndef BT_ACCELERATED_SOFT_BODY_CPU_SOLVER_H + +