mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
CMake: Redo ODE find module
This defines an ODE::ODE target; it also automatically selects the correct `dIDESINGLE`/`dIDEDOUBLE` compile-time definition.
This commit is contained in:
parent
dd5c411e88
commit
8dd46eb736
@ -7,74 +7,144 @@
|
|||||||
# Once done this will define:
|
# Once done this will define:
|
||||||
# ODE_FOUND - system has ode
|
# ODE_FOUND - system has ode
|
||||||
# ODE_INCLUDE_DIR - the ode include directory
|
# ODE_INCLUDE_DIR - the ode include directory
|
||||||
# ODE_LIBRARY_DIR - the ode library directory
|
|
||||||
# ODE_LIBRARY - the path to the library binary
|
|
||||||
#
|
#
|
||||||
# ODE_RELEASE_LIBRARY - the filepath of the ode release library
|
# ODE_RELEASE_LIBRARY - the filepath of the ode release library
|
||||||
# ODE_DEBUG_LIBRARY - the filepath of the ode debug library
|
# ODE_DEBUG_LIBRARY - the filepath of the ode debug library
|
||||||
#
|
#
|
||||||
|
# ODE_SINGLE_DEBUG_LIBRARY - the filepath of the single-precision ode debug library
|
||||||
|
# ODE_SINGLE_RELEASE_LIBRARY - the filepath of the single-precision ode release library
|
||||||
|
# ODE_DOUBLE_DEBUG_LIBRARY - the filepath of the double-precision ode debug library
|
||||||
|
# ODE_DOUBLE_RELEASE_LIBRARY - the filepath of the double-precision ode release library
|
||||||
|
#
|
||||||
|
# ODE::ODE - The recommended ODE library to link against
|
||||||
|
# ODE::ODE_single - If available, this links against single-precision ODE
|
||||||
|
# ODE::ODE_double - If available, this links against double-precision ODE
|
||||||
|
#
|
||||||
|
|
||||||
if(NOT ODE_INCLUDE_DIR OR NOT ODE_LIBRARY_DIR)
|
if(NOT ODE_INCLUDE_DIR OR NOT ODE_LIBRARY_DIR)
|
||||||
# Find the libode include files
|
# Find the libode include files
|
||||||
find_path(ODE_INCLUDE_DIR
|
find_path(ODE_INCLUDE_DIR
|
||||||
NAMES "ode.h"
|
NAMES "ode.h"
|
||||||
PATHS "/usr/include"
|
PATH_SUFFIXES "ode")
|
||||||
"/usr/local/include"
|
|
||||||
"/sw/include"
|
|
||||||
"/opt/include"
|
|
||||||
"/opt/local/include"
|
|
||||||
"/opt/csw/include"
|
|
||||||
PATH_SUFFIXES "" "ode"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find the libode library built for release
|
# Find the libode library built for release
|
||||||
find_library(ODE_RELEASE_LIBRARY
|
find_library(ODE_RELEASE_LIBRARY
|
||||||
NAMES "ode" "libode"
|
NAMES "ode" "libode")
|
||||||
PATHS "/usr"
|
|
||||||
"/usr/local"
|
|
||||||
"/usr/freeware"
|
|
||||||
"/sw"
|
|
||||||
"/opt"
|
|
||||||
"/opt/csw"
|
|
||||||
PATH_SUFFIXES "lib" "lib32" "lib64"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find the libode library built for debug
|
# Find the libode library built for debug
|
||||||
find_library(ODE_DEBUG_LIBRARY
|
find_library(ODE_DEBUG_LIBRARY
|
||||||
NAMES "oded" "liboded"
|
NAMES "oded" "liboded")
|
||||||
PATHS "/usr"
|
|
||||||
"/usr/local"
|
|
||||||
"/usr/freeware"
|
|
||||||
"/sw"
|
|
||||||
"/opt"
|
|
||||||
"/opt/csw"
|
|
||||||
PATH_SUFFIXES "lib" "lib32" "lib64"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
# Find the single-precision library built for release
|
||||||
|
find_library(ODE_SINGLE_RELEASE_LIBRARY
|
||||||
|
NAMES "ode_single" "libode_single")
|
||||||
|
|
||||||
|
# Find the single-precision library built for debug
|
||||||
|
find_library(ODE_SINGLE_DEBUG_LIBRARY
|
||||||
|
NAMES "ode_singled" "libode_singled")
|
||||||
|
|
||||||
|
# Find the double-precision library built for release
|
||||||
|
find_library(ODE_DOUBLE_RELEASE_LIBRARY
|
||||||
|
NAMES "ode_double" "libode_double" )
|
||||||
|
|
||||||
|
# Find the double-precision library built for debug
|
||||||
|
find_library(ODE_DOUBLE_DEBUG_LIBRARY
|
||||||
|
NAMES "ode_doubled" "libode_doubled")
|
||||||
|
|
||||||
|
unset(_ODE_LIB_PATHS)
|
||||||
|
|
||||||
mark_as_advanced(ODE_INCLUDE_DIR)
|
mark_as_advanced(ODE_INCLUDE_DIR)
|
||||||
mark_as_advanced(ODE_RELEASE_LIBRARY)
|
mark_as_advanced(ODE_RELEASE_LIBRARY)
|
||||||
mark_as_advanced(ODE_DEBUG_LIBRARY)
|
mark_as_advanced(ODE_DEBUG_LIBRARY)
|
||||||
|
mark_as_advanced(ODE_SINGLE_RELEASE_LIBRARY)
|
||||||
|
mark_as_advanced(ODE_SINGLE_DEBUG_LIBRARY)
|
||||||
|
mark_as_advanced(ODE_DOUBLE_RELEASE_LIBRARY)
|
||||||
|
mark_as_advanced(ODE_DOUBLE_DEBUG_LIBRARY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Choose library
|
# Define targets for both precisions (and unspecified)
|
||||||
if(CMAKE_BUILD_TYPE MATCHES "Debug" AND ODE_DEBUG_LIBRARY)
|
foreach(_precision _single _double "")
|
||||||
set(ODE_LIBRARY ${ODE_DEBUG_LIBRARY} CACHE FILEPATH "The filepath to libode's library binary.")
|
string(TOUPPER "${_precision}" _PRECISION)
|
||||||
elseif(ODE_RELEASE_LIBRARY)
|
|
||||||
set(ODE_LIBRARY ${ODE_RELEASE_LIBRARY} CACHE FILEPATH "The filepath to libode's library binary.")
|
if(EXISTS "${ODE${_PRECISION}_RELEASE_LIBRARY}" OR
|
||||||
elseif(ODE_DEBUG_LIBRARY)
|
EXISTS "${ODE${_PRECISION}_DEBUG_LIBRARY}")
|
||||||
set(ODE_LIBRARY ${ODE_DEBUG_LIBRARY} CACHE FILEPATH "The filepath to libode's library binary.")
|
if(NOT TARGET ODE::ODE${_precision})
|
||||||
|
add_library(ODE::ODE${_precision} UNKNOWN IMPORTED GLOBAL)
|
||||||
|
|
||||||
|
set_target_properties(ODE::ODE${_precision} PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${ODE_INCLUDE_DIR}")
|
||||||
|
|
||||||
|
if(EXISTS "${ODE${_PRECISION}_RELEASE_LIBRARY}")
|
||||||
|
set_property(TARGET ODE::ODE${_precision} APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS RELEASE)
|
||||||
|
set_target_properties(ODE::ODE${_precision} PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
||||||
|
IMPORTED_LOCATION_RELEASE "${ODE${_PRECISION}_RELEASE_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS "${ODE${_PRECISION}_DEBUG_LIBRARY}")
|
||||||
|
set_property(TARGET ODE::ODE${_precision} APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS DEBUG)
|
||||||
|
set_target_properties(ODE::ODE${_precision} PROPERTIES
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
|
||||||
|
IMPORTED_LOCATION_DEBUG "${ODE${_PRECISION}_DEBUG_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If this has a precision, we should be sure to define
|
||||||
|
# dIDESINGLE/dIDEDOUBLE to keep it consistent
|
||||||
|
if(_precision)
|
||||||
|
string(REPLACE "_" "dIDE" _precision_symbol "${_PRECISION}")
|
||||||
|
|
||||||
|
set_target_properties(ODE::ODE${_precision} PROPERTIES
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS "${_precision_symbol}")
|
||||||
|
|
||||||
|
unset(_precision_symbol)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach(_precision)
|
||||||
|
unset(_precision)
|
||||||
|
unset(_PRECISION)
|
||||||
|
|
||||||
|
# OKAY. If everything went well, we have ODE::ODE_single and/or
|
||||||
|
# ODE::ODE_double. We might even have an ODE::ODE, but if not, we need to
|
||||||
|
# alias one of the other two to it.
|
||||||
|
if(NOT TARGET ODE::ODE)
|
||||||
|
if(TARGET ODE::ODE_single)
|
||||||
|
set(_copy_from "ODE::ODE_single")
|
||||||
|
elseif(TARGET ODE::ODE_double)
|
||||||
|
set(_copy_from "ODE::ODE_double")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED _copy_from)
|
||||||
|
add_library(ODE::ODE UNKNOWN IMPORTED GLOBAL)
|
||||||
|
|
||||||
|
foreach(_prop
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES
|
||||||
|
INTERFACE_COMPILE_DEFINITIONS
|
||||||
|
IMPORTED_CONFIGURATIONS
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE
|
||||||
|
IMPORTED_LOCATION_RELEASE
|
||||||
|
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG
|
||||||
|
IMPORTED_LOCATION_DEBUG)
|
||||||
|
|
||||||
|
get_target_property(_value "${_copy_from}" "${_prop}")
|
||||||
|
if(DEFINED _value)
|
||||||
|
set_target_properties(ODE::ODE PROPERTIES "${_prop}" "${_value}")
|
||||||
|
endif()
|
||||||
|
unset(_value)
|
||||||
|
endforeach(_prop)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(_copy_from)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Translate library into library directory
|
if(TARGET ODE::ODE)
|
||||||
if(ODE_LIBRARY)
|
set(_HAS_ODE_LIBRARY ON)
|
||||||
unset(ODE_LIBRARY_DIR CACHE)
|
|
||||||
get_filename_component(ODE_LIBRARY_DIR "${ODE_LIBRARY}" PATH)
|
|
||||||
set(ODE_LIBRARY_DIR "${ODE_LIBRARY_DIR}" CACHE PATH "The path to libode's library directory.") # Library path
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(ODE_LIBRARY)
|
|
||||||
mark_as_advanced(ODE_LIBRARY_DIR)
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(ODE DEFAULT_MSG ODE_LIBRARY ODE_INCLUDE_DIR ODE_LIBRARY_DIR)
|
find_package_handle_standard_args(ODE DEFAULT_MSG ODE_INCLUDE_DIR _HAS_ODE_LIBRARY)
|
||||||
|
|
||||||
|
unset(_HAS_ODE_LIBRARY)
|
||||||
|
@ -336,7 +336,8 @@ find_package(ODE QUIET)
|
|||||||
|
|
||||||
package_option(ODE
|
package_option(ODE
|
||||||
"Enable this option to support game dynamics with the Open Dynamics Engine (ODE)."
|
"Enable this option to support game dynamics with the Open Dynamics Engine (ODE)."
|
||||||
LICENSE "BSD-3")
|
LICENSE "BSD-3"
|
||||||
|
IMPORTED_AS ODE::ODE)
|
||||||
|
|
||||||
config_package(ODE "Open Dynamics Engine")
|
config_package(ODE "Open Dynamics Engine")
|
||||||
|
|
||||||
|
@ -3,80 +3,80 @@ if(NOT HAVE_ODE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(P3ODE_HEADERS
|
set(P3ODE_HEADERS
|
||||||
ode_includes.h config_ode.h
|
ode_includes.h config_ode.h
|
||||||
odeWorld.I odeWorld.h
|
odeWorld.I odeWorld.h
|
||||||
odeMass.I odeMass.h
|
odeMass.I odeMass.h
|
||||||
odeBody.I odeBody.h
|
odeBody.I odeBody.h
|
||||||
odeJointGroup.I odeJointGroup.h
|
odeJointGroup.I odeJointGroup.h
|
||||||
odeJoint.I odeJoint.h
|
odeJoint.I odeJoint.h
|
||||||
odeUtil.h
|
odeUtil.h
|
||||||
odeSpace.I odeSpace.h
|
odeSpace.I odeSpace.h
|
||||||
odeGeom.I odeGeom.h
|
odeGeom.I odeGeom.h
|
||||||
odeSurfaceParameters.I odeSurfaceParameters.h
|
odeSurfaceParameters.I odeSurfaceParameters.h
|
||||||
odeContactGeom.I odeContactGeom.h
|
odeContactGeom.I odeContactGeom.h
|
||||||
odeContact.I odeContact.h
|
odeContact.I odeContact.h
|
||||||
odeAMotorJoint.I odeAMotorJoint.h
|
odeAMotorJoint.I odeAMotorJoint.h
|
||||||
odeBallJoint.I odeBallJoint.h
|
odeBallJoint.I odeBallJoint.h
|
||||||
odeContactJoint.I odeContactJoint.h
|
odeContactJoint.I odeContactJoint.h
|
||||||
odeFixedJoint.I odeFixedJoint.h
|
odeFixedJoint.I odeFixedJoint.h
|
||||||
odeHingeJoint.I odeHingeJoint.h
|
odeHingeJoint.I odeHingeJoint.h
|
||||||
odeHinge2Joint.I odeHinge2Joint.h
|
odeHinge2Joint.I odeHinge2Joint.h
|
||||||
odeLMotorJoint.I odeLMotorJoint.h
|
odeLMotorJoint.I odeLMotorJoint.h
|
||||||
odeNullJoint.I odeNullJoint.h
|
odeNullJoint.I odeNullJoint.h
|
||||||
odePlane2dJoint.I odePlane2dJoint.h
|
odePlane2dJoint.I odePlane2dJoint.h
|
||||||
odeSliderJoint.I odeSliderJoint.h
|
odeSliderJoint.I odeSliderJoint.h
|
||||||
odeUniversalJoint.I odeUniversalJoint.h
|
odeUniversalJoint.I odeUniversalJoint.h
|
||||||
odeJointCollection.I odeJointCollection.h
|
odeJointCollection.I odeJointCollection.h
|
||||||
odeSimpleSpace.I odeSimpleSpace.h
|
odeSimpleSpace.I odeSimpleSpace.h
|
||||||
odeHashSpace.I odeHashSpace.h
|
odeHashSpace.I odeHashSpace.h
|
||||||
odeQuadTreeSpace.I odeQuadTreeSpace.h
|
odeQuadTreeSpace.I odeQuadTreeSpace.h
|
||||||
odeSphereGeom.I odeSphereGeom.h
|
odeSphereGeom.I odeSphereGeom.h
|
||||||
odeBoxGeom.I odeBoxGeom.h
|
odeBoxGeom.I odeBoxGeom.h
|
||||||
odePlaneGeom.I odePlaneGeom.h
|
odePlaneGeom.I odePlaneGeom.h
|
||||||
odeCappedCylinderGeom.I odeCappedCylinderGeom.h
|
odeCappedCylinderGeom.I odeCappedCylinderGeom.h
|
||||||
odeCylinderGeom.I odeCylinderGeom.h
|
odeCylinderGeom.I odeCylinderGeom.h
|
||||||
odeRayGeom.I odeRayGeom.h
|
odeRayGeom.I odeRayGeom.h
|
||||||
odeTriMeshData.I odeTriMeshData.h
|
odeTriMeshData.I odeTriMeshData.h
|
||||||
odeTriMeshGeom.I odeTriMeshGeom.h
|
odeTriMeshGeom.I odeTriMeshGeom.h
|
||||||
odeCollisionEntry.I odeCollisionEntry.h
|
odeCollisionEntry.I odeCollisionEntry.h
|
||||||
odeHelperStructs.h)
|
odeHelperStructs.h)
|
||||||
|
|
||||||
set(P3ODE_SOURCES
|
set(P3ODE_SOURCES
|
||||||
config_ode.cxx
|
config_ode.cxx
|
||||||
odeWorld.cxx odeMass.cxx odeBody.cxx
|
odeWorld.cxx odeMass.cxx odeBody.cxx
|
||||||
odeJointGroup.cxx odeJoint.cxx
|
odeJointGroup.cxx odeJoint.cxx
|
||||||
odeUtil.cxx
|
odeUtil.cxx
|
||||||
odeSpace.cxx
|
odeSpace.cxx
|
||||||
odeGeom.cxx
|
odeGeom.cxx
|
||||||
odeSurfaceParameters.cxx
|
odeSurfaceParameters.cxx
|
||||||
odeContactGeom.cxx odeContact.cxx
|
odeContactGeom.cxx odeContact.cxx
|
||||||
odeAMotorJoint.cxx odeBallJoint.cxx
|
odeAMotorJoint.cxx odeBallJoint.cxx
|
||||||
odeContactJoint.cxx odeFixedJoint.cxx
|
odeContactJoint.cxx odeFixedJoint.cxx
|
||||||
odeHingeJoint.cxx odeHinge2Joint.cxx
|
odeHingeJoint.cxx odeHinge2Joint.cxx
|
||||||
odeLMotorJoint.cxx odeNullJoint.cxx
|
odeLMotorJoint.cxx odeNullJoint.cxx
|
||||||
odePlane2dJoint.cxx odeSliderJoint.cxx
|
odePlane2dJoint.cxx odeSliderJoint.cxx
|
||||||
odeUniversalJoint.cxx odeJointCollection.cxx
|
odeUniversalJoint.cxx odeJointCollection.cxx
|
||||||
odeSimpleSpace.cxx
|
odeSimpleSpace.cxx
|
||||||
odeHashSpace.cxx odeQuadTreeSpace.cxx
|
odeHashSpace.cxx odeQuadTreeSpace.cxx
|
||||||
odeSphereGeom.cxx odeBoxGeom.cxx
|
odeSphereGeom.cxx odeBoxGeom.cxx
|
||||||
odePlaneGeom.cxx odeCappedCylinderGeom.cxx
|
odePlaneGeom.cxx odeCappedCylinderGeom.cxx
|
||||||
odeCylinderGeom.cxx odeRayGeom.cxx
|
odeCylinderGeom.cxx odeRayGeom.cxx
|
||||||
odeTriMeshData.cxx odeTriMeshGeom.cxx
|
odeTriMeshData.cxx odeTriMeshGeom.cxx
|
||||||
odeCollisionEntry.cxx)
|
odeCollisionEntry.cxx)
|
||||||
|
|
||||||
set(P3ODE_IGATEEXT
|
set(P3ODE_IGATEEXT
|
||||||
odeBody_ext.h
|
odeBody_ext.h
|
||||||
odeBody_ext.I
|
odeBody_ext.I
|
||||||
odeGeom_ext.cxx
|
odeGeom_ext.cxx
|
||||||
odeGeom_ext.h
|
odeGeom_ext.h
|
||||||
odeGeom_ext.I
|
odeGeom_ext.I
|
||||||
odeJoint_ext.cxx
|
odeJoint_ext.cxx
|
||||||
odeJoint_ext.h
|
odeJoint_ext.h
|
||||||
odeSpace_ext.cxx
|
odeSpace_ext.cxx
|
||||||
odeSpace_ext.h
|
odeSpace_ext.h
|
||||||
odeSpace_ext.I
|
odeSpace_ext.I
|
||||||
odeUtil_ext.cxx
|
odeUtil_ext.cxx
|
||||||
odeUtil_ext.h)
|
odeUtil_ext.h)
|
||||||
|
|
||||||
set(P3ODE_IGATE_SOURCES "${P3ODE_HEADERS};${P3ODE_SOURCES}")
|
set(P3ODE_IGATE_SOURCES "${P3ODE_HEADERS};${P3ODE_SOURCES}")
|
||||||
list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeConvexGeom.h")
|
list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeConvexGeom.h")
|
||||||
@ -86,7 +86,6 @@ list(REMOVE_ITEM P3ODE_IGATE_SOURCES "odeHelperStructs.h")
|
|||||||
composite_sources(p3ode P3ODE_SOURCES)
|
composite_sources(p3ode P3ODE_SOURCES)
|
||||||
add_library(p3ode ${P3ODE_SOURCES} ${P3ODE_HEADERS})
|
add_library(p3ode ${P3ODE_SOURCES} ${P3ODE_HEADERS})
|
||||||
set_target_properties(p3ode PROPERTIES DEFINE_SYMBOL BUILDING_PANDAODE)
|
set_target_properties(p3ode PROPERTIES DEFINE_SYMBOL BUILDING_PANDAODE)
|
||||||
target_compile_definitions(p3ode PUBLIC dSINGLE)
|
|
||||||
target_link_libraries(p3ode p3igateruntime panda PKG::ODE)
|
target_link_libraries(p3ode p3igateruntime panda PKG::ODE)
|
||||||
target_interrogate(p3ode ${P3ODE_IGATE_SOURCES} EXTENSIONS ${P3ODE_IGATEEXT})
|
target_interrogate(p3ode ${P3ODE_IGATE_SOURCES} EXTENSIONS ${P3ODE_IGATEEXT})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user