Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • sw/simox/simox
  • uwkce_singer/simox
2 results
Show changes
Commits on Source (1559)
Showing
with 1005 additions and 518 deletions
build/
......@@ -3,6 +3,7 @@ build*
!.gitkeep
!.gitignore
.idea
.venv
*.bak
*#
......@@ -27,6 +28,7 @@ CMakeLists.txt.user*
*.dylib
moc_*
# eclipse stuff
.project
.pydevproject
......@@ -34,3 +36,19 @@ moc_*
.metadata
.cproject
.project
# qtcreator project stuff
*.pro
*.pro.user
.cmake/api/v1/query/cache-v2
.cmake/api/v1/query/codemodel-v2
.cmake/api/v1/query/cmakeFiles-v1
# vscode stuff
.vscode
# clangd
.cache
.clang-format
.clang-tidy
stages:
- build-and-test
- deploy
- post-deploy-test
- downstream
.build-and-test:
cache:
# https://docs.gitlab.com/ee/ci/caching/#share-caches-across-jobs-in-different-branches
key: one-key-to-rule-them-all
paths:
- .ccache
before_script:
# Ccache configuration and introspection.
- apt-get update
- apt-get install ccache --yes
- ccache --set-config=cache_dir="$CI_PROJECT_DIR/.ccache"
- ccache --max-size=5G
- ccache --show-stats
# Activate Axii.
- source /axii/scripts/install_axii.sh
script:
# Create workspace.
- axii workspace create ~/workspace workspace
- axii workspace activate workspace
- _axii_auto_env_refresh
# Use workspace configuration from project.
- cp "$CI_PROJECT_DIR/.gitlab/ci/armarx-workspace.json" "$ARMARX_WORKSPACE/armarx-workspace.json"
- cat "$ARMARX_WORKSPACE/armarx-workspace.json"
- axii workspace env
- _axii_auto_env_refresh
- echo "Workspace information:"
- axii workspace list-modules
- axii workspace list-modules --deps
- axii workspace info
- export PROJECT_PATH_IN_WORKSPACE="$simox__PATH"
# Symlink project directory into Axii workspace.
- mkdir -p "$(dirname $PROJECT_PATH_IN_WORKSPACE)"
- ln -s "$CI_PROJECT_DIR" "$PROJECT_PATH_IN_WORKSPACE"
# Upgrade.
- axii workspace system --accept-apt-install
- axii workspace update --prefer-https
- _axii_auto_env_refresh
# Upgrade.
- axii workspace upgrade -m simox
- _axii_auto_env_refresh
- ccache --show-stats
# Test.
# ToDo: Add and use `axii ws test -m simox`
- cd "$PROJECT_PATH_IN_WORKSPACE/build"
- ctest --output-on-failure --output-junit "$CI_PROJECT_DIR/report.xml" .
# Generate documentation.
- cd "$PROJECT_PATH_IN_WORKSPACE/build"
- make doc
- du -sh *
- du -sh doc/*
build-and-test-bionic:
stage: build-and-test
extends: .build-and-test
image: git.h2t.iar.kit.edu:5050/sw/armarx/meta/axii:latest-bionic
artifacts:
reports:
junit: report.xml
name: "Simox-Documentation-$CI_COMMIT_REF_NAME"
paths:
- build/doc/html/
build-and-test-jammy:
stage: build-and-test
extends: .build-and-test
image: git.h2t.iar.kit.edu:5050/sw/armarx/meta/axii:latest-jammy
docker-bionic:
stage: deploy
needs: ["build-and-test-bionic"]
image:
name: gcr.io/kaniko-project/executor:v1.9.0-debug
entrypoint: [""]
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/docker/bionic"
--destination "${CI_REGISTRY_IMAGE}:latest-bionic"
rules:
- if: $CI_COMMIT_BRANCH == "master"
docker-jammy:
stage: deploy
needs: ["build-and-test-jammy"]
image:
name: gcr.io/kaniko-project/executor:v1.9.0-debug
entrypoint: [""]
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/docker/jammy"
--destination "${CI_REGISTRY_IMAGE}:latest-jammy"
rules:
- if: $CI_COMMIT_BRANCH == "master"
.test-docker-image-common:
before_script:
- source /axii/scripts/install_axii.sh
- _axii_auto_env_refresh
script:
- echo "ArmarX Workspace = '$ARMARX_WORKSPACE'"
- printenv
- axii workspace list-modules
- axii workspace list-modules --deps
- axii workspace info
- echo "Simox directory = '$Simox_DIR'"
- which RobotViewer
test-docker-image-bionic:
stage: post-deploy-test
needs: ["docker-bionic"]
extends: .test-docker-image-common
image: git.h2t.iar.kit.edu:5050/sw/simox/simox:latest-bionic
rules:
- if: $CI_COMMIT_BRANCH == "master"
test-docker-image-jammy:
stage: post-deploy-test
needs: ["docker-jammy"]
extends: .test-docker-image-common
image: git.h2t.iar.kit.edu:5050/sw/simox/simox:latest-jammy
rules:
- if: $CI_COMMIT_BRANCH == "master"
armarx-core:
stage: downstream
variables:
TODO_ENV_VARIABLE: "This variable will be available to the CI pipeline of ArmarXCore."
trigger:
project: sw/armarx/armarx-core
# This is optional, but we could tell ArmarX which Simox branch to use.
branch: master
rules:
- if: $CI_COMMIT_BRANCH == "master"
/SimDynamics/ @rietsch @nefzer
/SimoxUtility @meixner @reister
/VirtualRobot @meixner @reister
/GraspPlanning @hyseni
/GeometricPlanning @reister
{
"modules": {
"tools/ccache/default": {},
"deps/doxygen": {},
"simox": {}
},
"global": {
"prepare": {
"cmake": {
"definitions": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
"CMAKE_C_COMPILER_LAUNCHER": "$CCACHE",
"CMAKE_CXX_COMPILER_LAUNCHER": "$CCACHE"
}
}
}
}
}
cmake_minimum_required(VERSION 3.10)
MESSAGE (STATUS "cmake version: ${CMAKE_VERSION}")
# If OS is Ubuntu 20 we nned to change some things
execute_process(COMMAND lsb_release -cs
OUTPUT_VARIABLE RELEASE_CODENAME
OUTPUT_STRIP_TRAILING_WHITESPACE
)
#######################################################################################
PROJECT(Simox LANGUAGES CXX VERSION 2.3.74.0)
MESSAGE (STATUS "** Simox version: ${Simox_VERSION}")
INCLUDE(${Simox_SOURCE_DIR}/CMakeModules/SimoxMacros.cmake)
#determine boost version
if(NOT "" STREQUAL "${Simox_BOOST_VERSION}")
#keep the value
elseif(NOT "" STREQUAL "$ENV{Simox_BOOST_VERSION}")
message(STATUS "Use boost version from env variable Simox_BOOST_VERSION")
SET(Simox_BOOST_VERSION $ENV{Simox_BOOST_VERSION})
elseif(RELEASE_CODENAME STREQUAL focal OR RELEASE_CODENAME STREQUAL odin OR RELEASE_CODENAME STREQUAL jolnir)
SET(Simox_BOOST_VERSION 1.71.0)
elseif(RELEASE_CODENAME STREQUAL impish)
SET(Simox_BOOST_VERSION 1.74.0)
elseif(RELEASE_CODENAME STREQUAL jammy OR RELEASE_CODENAME STREQUAL horus)
SET(Simox_BOOST_VERSION 1.74.0)
elseif(RELEASE_CODENAME STREQUAL noble) #Ubuntu 24
SET(Simox_BOOST_VERSION 1.83.0)
else()
SET(Simox_BOOST_VERSION 1.65.1)
endif()
message(STATUS "Using Boost Version ${Simox_BOOST_VERSION}")
#######################################################################################
#global config
# Set up build type
if(NOT "$ENV{CMAKE_UNITY_BUILD_BATCH_SIZE}" STREQUAL "")
message(STATUS "CMAKE_UNITY_BUILD_BATCH_SIZE -> $ENV{CMAKE_UNITY_BUILD_BATCH_SIZE}")
set(CMAKE_UNITY_BUILD ON)
set(CMAKE_UNITY_BUILD_BATCH_SIZE $ENV{CMAKE_UNITY_BUILD_BATCH_SIZE})
endif()
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
ENDIF()
endif()
#we want Release and RelWithDebInfo to use the same optimization level
string(REGEX MATCH "([ \t]|^)-O[^ \t]+([ \t]|^)" RELEASE_O_LEVEL ${CMAKE_CXX_FLAGS_RELEASE})
string(REGEX MATCH "([ \t]|^)-O[^ \t]+([ \t]|^)" RELWITHDEBINFO_O_LEVEL ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
if(NOT RELEASE_O_LEVEL STREQUAL RELWITHDEBINFO_O_LEVEL)
string(REPLACE "${RELWITHDEBINFO_O_LEVEL}" "${RELEASE_O_LEVEL}" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
message(STATUS "Changing o level of RelWithDebInfo to match o level of Release (from '${RELWITHDEBINFO_O_LEVEL}' to '${RELEASE_O_LEVEL}')")
message(STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO = ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
endif()
# cmake 3.10 does not understand c++2a, so we tell it we will handle the standard flag
set(CMAKE_CXX_STANDARD_DEFAULT)
add_definitions(-std=c++2a)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++2b" COMPILER_SUPPORTS_CXX2B)
if(COMPILER_SUPPORTS_CXX2B)
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has C++2b support.")
add_definitions(-std=c++2b)
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++2b support. Using C++2a instead.")
add_definitions(-std=c++2a)
endif()
list(APPEND CMAKE_MODULE_PATH ${Simox_SOURCE_DIR}/CMakeModules)
list(APPEND CMAKE_MODULE_PATH ${Simox_SOURCE_DIR}/CMakeModules/find_modules)
MESSAGE (STATUS "** Module path: " ${CMAKE_MODULE_PATH})
# we want a global automoc
FIND_PACKAGE(Qt5 5.5.0 COMPONENTS OpenGL Core Gui Widgets)
set(OpenGL_GL_PREFERENCE LEGACY)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(qwt QUIET)
FIND_PACKAGE (Eigen3 REQUIRED)
FIND_PACKAGE(Boost ${Simox_BOOST_VERSION} EXACT COMPONENTS
filesystem
system
program_options
thread
unit_test_framework
regex
REQUIRED)
MESSAGE (STATUS "Boost found at: ${Boost_INCLUDE_DIR}")
FIND_PACKAGE (difflib QUIET)
find_package(nlohmann_json 3.11.3 REQUIRED)
find_package(RBDL REQUIRED)
FIND_PACKAGE(Boost COMPONENTS unit_test_framework REQUIRED)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
#flags
add_compile_options(-fsigned-char)
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-Wpedantic)
#turn warnings about dangerous stuff into errors
add_compile_options(-Werror)
message(STATUS "Compiler version: ${CMAKE_CXX_COMPILER_VERSION}")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
add_compile_options(-fconcepts)
#turn warnings about dangerous stuff into errors
add_compile_options(-Werror)
add_compile_options(-Wno-error=unused-but-set-variable)
add_compile_options(-Wno-error=unused-variable)
add_compile_options(-Wno-error=unused-parameter)
add_compile_options(-Wno-error=deprecated-declarations)
add_compile_options(-Wno-error=sign-compare)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
add_compile_options(-Wno-error=deprecated-copy)
endif()
#######################################################################################
#options
OPTION (Simox_USE_RBDL "Use RBDL" OFF)
OPTION (Simox_USE_URDF "Use URDF" OFF)
OPTION (Simox_USE_RBDL_LIB "Use RBDL" ON)
OPTION (Simox_USE_NLOPT "Use NLOPT" ON)
OPTION(SimDynamics_USE_BULLET "Use Bullet Physics Engine" ON)
OPTION(Simox_USE_COIN_VISUALIZATION "Use Coin3D for visualization" ON)
......@@ -47,14 +132,19 @@ OPTION(Simox_USE_OPENSCENEGRAPH_VISUALIZATION "Use OpenSceneGraph for visualizat
OPTION(Simox_COLLISION_CHECKER_PQP "Build and use the PQP Collision Detection library (located in ExternalDependencies)" ON)
#######################################################################################
MESSAGE(STATUS "******************** Configuring Simox ************************")
set (Simox_BUILD_VirtualRobot TRUE CACHE BOOL "Build Virtual Robot library")
set (Simox_BUILD_Saba TRUE CACHE BOOL "Build Motion Planning library")
set (Simox_BUILD_GraspStudio TRUE CACHE BOOL "Build Grasp Planning library")
set (Simox_BUILD_SimDynamics TRUE CACHE BOOL "Build Dynamic Simulation")
set (Simox_BUILD_GeometricPlanning TRUE CACHE BOOL "Build Geometric Planning Library")
MESSAGE (STATUS "** SIMOX BUILD VirtualRobot: TRUE (can't e turned off)")
MESSAGE (STATUS "** SIMOX BUILD SimoxUtility: TRUE (can't be turned off)")
MESSAGE (STATUS "** SIMOX BUILD SimoxQtUtility: TRUE (can't be turned off)")
MESSAGE (STATUS "** SIMOX BUILD VirtualRobot: ${Simox_BUILD_VirtualRobot}")
MESSAGE (STATUS "** SIMOX BUILD Saba : ${Simox_BUILD_Saba}")
MESSAGE (STATUS "** SIMOX BUILD GraspStudio : ${Simox_BUILD_GraspStudio}")
MESSAGE (STATUS "** SIMOX BUILD SimDynamics : ${Simox_BUILD_SimDynamics}")
MESSAGE (STATUS "** SIMOX BUILD GeometricPlanning : ${GeometricPlanning}")
############################# SETUP PATHS #############################
if(WIN32 AND NOT CYGWIN)
set(INSTALL_CMAKE_DIR CMake CACHE PATH "Installation directory for CMake files")
......@@ -64,7 +154,7 @@ endif()
SET(Simox_LIB_DIR ${Simox_BINARY_DIR}/lib)
SET(Simox_BIN_DIR ${Simox_BINARY_DIR}/bin)
SET(Simox_DATA_DIR ${CurrentSimoxPath}/VirtualRobot/data)
SET(Simox_DATA_DIR ${Simox_SOURCE_DIR}/VirtualRobot/data)
MESSAGE (STATUS "** SIMOX LIB DIR: ${Simox_LIB_DIR}")
MESSAGE (STATUS "** SIMOX BIN DIR: ${Simox_BIN_DIR}")
......@@ -80,6 +170,9 @@ MESSAGE (STATUS "** SIMOX INSTALL DATA DIR : ${Simox_INSTALL_DATA_DIR}")
MESSAGE (STATUS "** SIMOX INSTALL HEADER DIR: ${Simox_INSTALL_HEADER_DIR}")
MESSAGE(STATUS "** Simox build directory: ${CMAKE_BINARY_DIR}")
###########################################################
include(SearchForTinyXML)
FIND_PACKAGE(urdfdom)
########################### IDE settings ################################
# use virtual folders for grouping projects in IDEs
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
......@@ -93,7 +186,7 @@ IF(UNIX)
set(Simox_OS_compile_options ${Simox_OS_compile_options} -fPIC)
ENDIF()
IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
IF("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
MESSAGE(STATUS "Configuring Debug build")
set(Simox_OS_compile_options ${Simox_OS_compile_options} -D_DEBUG)
ELSE()
......@@ -137,15 +230,29 @@ INCLUDE(CTest)
MESSAGE(STATUS "** Test output directory: ${Simox_TEST_DIR}")
ADD_DEFINITIONS(-DSimox_TEST_DIR=\"${Simox_TEST_DIR}/\")
#######################################################################################
add_subdirectory(VirtualRobot)
set (SIMOX_EXPORT_TARGET_LIST "")
if (Simox_USE_RBDL_LIB)
# message(STATUS "Using rbdl")
# add_subdirectory(3rdParty/rbdl)
# list (APPEND SIMOX_EXPORT_TARGET_LIST rbdl)
# list (APPEND Simox_LIBRARIES rbdl)
endif()
#######################################################################################
set (SIMOX_EXPORT_TARGET_LIST VirtualRobot)
list (APPEND Simox_LIBRARIES VirtualRobot)
list(APPEND SIMOX_EXPORT_TARGET_LIST ColCheckerPQP)
add_subdirectory(SimoxUtility)
list (APPEND SIMOX_EXPORT_TARGET_LIST SimoxUtility)
list (APPEND Simox_LIBRARIES SimoxUtility)
add_subdirectory(SimoxQtUtility)
list (APPEND SIMOX_EXPORT_TARGET_LIST SimoxQtUtility)
list (APPEND Simox_LIBRARIES SimoxQtUtility)
#######################################################################################
if (Simox_BUILD_VirtualRobot)
add_subdirectory(VirtualRobot)
list(APPEND SIMOX_EXPORT_TARGET_LIST VirtualRobot assimp_interface)
list(APPEND Simox_LIBRARIES VirtualRobot)
endif()
#######################################################################################
if (Simox_BUILD_Saba)
......@@ -161,6 +268,13 @@ if (Simox_BUILD_GraspStudio)
list (APPEND Simox_LIBRARIES GraspStudio)
endif()
#######################################################################################
if (Simox_BUILD_GeometricPlanning)
add_subdirectory(GeometricPlanning)
list(APPEND SIMOX_EXPORT_TARGET_LIST GeometricPlanning)
list (APPEND Simox_LIBRARIES GeometricPlanning)
endif()
#######################################################################################
if (Simox_BUILD_SimDynamics)
find_package(Bullet QUIET)
......@@ -177,6 +291,8 @@ if (Simox_BUILD_SimDynamics)
endif()
endif()
add_subdirectory(doc)
......@@ -186,8 +302,25 @@ MESSAGE (STATUS "** Simox: Generating CMake files for build and install setup")
# Add all targets to the build-tree export set
export(TARGETS ${SIMOX_EXPORT_TARGET_LIST}
FILE "${PROJECT_BINARY_DIR}/SimoxTargets.cmake")
export(
TARGETS
${SIMOX_EXPORT_TARGET_LIST}
NAMESPACE
Simox::
FILE
"${PROJECT_BINARY_DIR}/SimoxTargets.cmake"
)
export(
TARGETS
${SIMOX_EXPORT_TARGET_LIST}
# NAMESPACE
# Simox::
FILE
"${PROJECT_BINARY_DIR}/SimoxTargetsLegacy.cmake"
)
# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
......@@ -234,8 +367,20 @@ install(FILES
# Install the export set for use with the install-tree
install(EXPORT SimoxTargets DESTINATION
"${INSTALL_CMAKE_DIR}" COMPONENT dev)
install(
EXPORT
SimoxTargets
DESTINATION "${INSTALL_CMAKE_DIR}"
COMPONENT dev
)
install(
EXPORT SimoxTargets
FILE SimoxTargetsLegacy.cmake
DESTINATION "${INSTALL_CMAKE_DIR}"
COMPONENT dev
)
#######################################################################################
......@@ -276,10 +421,11 @@ SET(CPACK_PACKAGE_DESCRIPTION "Simox - A Robot Simulation, Motion and Grasp Plan
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simox - A Robot Simulation, Motion and Grasp Planning Toolbox")
SET(CPACK_PACKAGE_VENDOR "KIT")
SET(CPACK_PACKAGE_CONTACT "Nikolaus Vahrenkamp <vahrenkamp@kit.edu>")
SET(CPACK_PACKAGE_VERSION_MAJOR "${Simox_MAJOR_VERSION}")
SET(CPACK_PACKAGE_VERSION_MINOR "${Simox_MINOR_VERSION}")
message("simox version: ${Simox_VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MAJOR "${Simox_VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${Simox_VERSION_MINOR}")
#SET(CPACK_PACKAGE_VERSION_PATCH "${Simox_PATCH_VERSION}-r${Project_WC_REVISION}")
SET(CPACK_PACKAGE_VERSION_PATCH "${Simox_PATCH_VERSION}")
SET(CPACK_PACKAGE_VERSION_PATCH "${Simox_VERSION_PATCH}")
SET(CPACK_PACKAGE_FILE_NAME "simox_${Project_WC_REVISION}_${CPACK_DEBIAN_ARCHITECTURE}")
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "simox_${Project_WC_REVISION}")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
......@@ -294,7 +440,8 @@ set(CPACK_COMPONENT_APPLICATIONDATA_DISPLAY_NAME "Simox Data")
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Simox Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "Simox C++ Headers")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libbullet-dev, libbulletmultithreaded2.82, libqhull-dev, libnlopt-dev")
#set(CPACK_DEBIAN_PACKAGE_DEPENDS "libbullet-dev, libbulletmultithreaded2.82, libqhull-dev, libnlopt-dev")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
SET(CPACK_COMPONENTS_ALL Applications Headers Libraries ApplicationData)
INCLUDE(CPack)
......@@ -313,5 +460,3 @@ else()
add_custom_target(astyle
COMMENT "Unable to format source files: AStyle was not found!")
endif()
#pragma GCC diagnostic ignored "-Wunused-variable"
#include <btBulletCollisionCommon.h>
int main()
int
main()
{
btVector3 vec(0.0, 1.0, 0.0);
btStaticPlaneShape(vec, 0.0);
......
# Locate Bullet. Original version from osgbullet, http://code.google.com/p/osgbullet/
#
# This script defines:
# BULLET_FOUND, set to 1 if found
# BULLET_LIBRARIES
# BULLET_INCLUDE_DIRS
# BULLET_*_LIBRARY, one for each library (for example, "BULLET_BulletCollision_LIBRARY").
# BULLET_*_LIBRARY_debug, one for each library.
# BULLET_DEMOS_INCLUDE_DIR - Directory containing the Demos headers
# BULLET_OPENGL_INCLUDE_DIR - Include path for OpenGL/DemoApplication/Glut headers
#
# This script will look in standard locations for installed Bullet. However, if you
# install Bullet into a non-standard location, you can use the BULLET_ROOT
# variable (in environment or CMake) to specify the location.
#
# You can also use Bullet out of a source tree by specifying BULLET_SOURCE_DIR
# and BULLET_BUILD_DIR (in environment or CMake).
SET( BULLET_ROOT "" CACHE PATH "Bullet install dir, parent of both header files and binaries." )
SET( BULLET_BUILD_DIR "" CACHE PATH "Parent directory of Bullet binary file directories such as src/BulletCollision." )
SET( BULLET_SOURCE_DIR "" CACHE PATH "Parent directory of Bullet header file directories such as src or include." )
set(BULLET_SEARCH_PATHS)
macro(add_bullet_search_path p)
if(NOT "${p}" STREQUAL "")
set(BULLET_SEARCH_PATHS ${BULLET_SEARCH_PATHS} ${p})
endif()
endmacro()
add_bullet_search_path("C:/Program Files/BULLET_PHYSICS")
add_bullet_search_path("$ENV{Bullet_DIR}")
add_bullet_search_path("${Bullet_DIR}")
add_bullet_search_path("$ENV{BULLET_DIR}")
add_bullet_search_path("${BULLET_DIR}")
add_bullet_search_path("$ENV{BULLET_ROOT}")
add_bullet_search_path("${BULLET_ROOT}")
add_bullet_search_path("$ENV{BULLET_SOURCE_DIR}")
add_bullet_search_path("${BULLET_SOURCE_DIR}")
message(STATUS "Searching bullet using these base paths: ${BULLET_SEARCH_PATHS}")
#UNSET( BULLET_INCLUDE_DIRS CACHE )
MARK_AS_ADVANCED( BULLET_INCLUDE_DIRS )
FIND_PATH( BULLET_INCLUDE_DIRS btBulletCollisionCommon.h
PATHS
${BULLET_SEARCH_PATHS}
PATH_SUFFIXES
/BulletCollision
/src
../src
/include
/include/bullet
/src/BulletCollision
/include/BulletCollision
/include/bullet/BulletCollision
NO_DEFAULT_PATH
)
if(NOT BULLET_INCLUDE_DIRS)
FIND_PATH( BULLET_INCLUDE_DIRS btBulletCollisionCommon.h
PATH_SUFFIXES
bullet
)
endif()
MESSAGE (STATUS " **** BULLET_INCLUDE_DIRS: ${BULLET_INCLUDE_DIRS}")
IF( BULLET_INCLUDE_DIRS )
#SET( BULLET_DEMOS_INCLUDE_DIR ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL )
FIND_PATH( BULLET_OPENGL_INCLUDE_DIR DemoApplication.h
PATHS
${BULLET_INCLUDE_DIRS}
${BULLET_INCLUDE_DIRS}/..
${BULLET_INCLUDE_DIRS}/../OpenGL
${BULLET_INCLUDE_DIRS}/OpenGL
${BULLET_INCLUDE_DIRS}/../Demos/OpenGL
)
FIND_PATH( BULLET_DEMOS_INCLUDE_DIR GlutDemoApplication.h
PATHS
${BULLET_INCLUDE_DIRS}
${BULLET_INCLUDE_DIRS}/..
${BULLET_INCLUDE_DIRS}/../OpenGL
${BULLET_INCLUDE_DIRS}/OpenGL
${BULLET_INCLUDE_DIRS}/../Demos/OpenGL
)
MESSAGE (STATUS " **** BULLET_OPENGL_INCLUDE_DIR: ${BULLET_OPENGL_INCLUDE_DIR}")
MESSAGE (STATUS " **** BULLET_DEMOS_INCLUDE_DIR: ${BULLET_DEMOS_INCLUDE_DIR}")
ENDIF( BULLET_INCLUDE_DIRS )
MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME )
#UNSET( BULLET_${LIBNAME}_LIBRARY CACHE )
#UNSET( BULLET_${LIBNAME}_LIBRARY_debug CACHE )
MARK_AS_ADVANCED( BULLET_${LIBNAME}_LIBRARY )
MARK_AS_ADVANCED( BULLET_${LIBNAME}_LIBRARY_debug )
FIND_LIBRARY( BULLET_${LIBNAME}_LIBRARY
NAMES
${LIBNAME}
PATHS
${BULLET_SEARCH_PATHS}
PATH_SUFFIXES
./src/${DIRNAME}
./Extras/${DIRNAME}
./Demos/${DIRNAME}
./src/${DIRNAME}/Release
./Extras/${DIRNAME}/Release
./Demos/${DIRNAME}/Release
./libs/${DIRNAME}
./libs
./lib
./lib/Release # v2.76, new location for build tree libs on Windows
NO_DEFAULT_PATH
)
# check for defualt path if BULLET_ROOT path failed
FIND_LIBRARY( BULLET_${LIBNAME}_LIBRARY NAMES ${LIBNAME})
FIND_LIBRARY( BULLET_${LIBNAME}_LIBRARY_debug
NAMES
${LIBNAME}_d
${LIBNAME}_Debug
${LIBNAME}
PATHS
${BULLET_SEARCH_PATHS}
PATH_SUFFIXES
./src/${DIRNAME}
./Extras/${DIRNAME}
./Demos/${DIRNAME}
./src/${DIRNAME}/Debug
./Extras/${DIRNAME}/Debug
./Demos/${DIRNAME}/Debug
./libs/${DIRNAME}
./libs
./lib
./lib/Debug # v2.76, new location for build tree libs on Windows
NO_DEFAULT_PATH
)
# check for defualt path if BULLET_ROOT path failed
FIND_LIBRARY( BULLET_${LIBNAME}_LIBRARY_debug NAMES ${LIBNAME}_d ${LIBNAME}_Debug ${LIBNAME} )
#message( STATUS "${BULLET_${LIBNAME}_LIBRARY} and ${BULLET_${LIBNAME}_LIBRARY_debug}" )
#message( SEND_ERROR ${LIBNAME} )
IF( BULLET_${LIBNAME}_LIBRARY )
SET( BULLET_LIBRARIES ${BULLET_LIBRARIES}
"optimized" ${BULLET_${LIBNAME}_LIBRARY}
)
ENDIF( BULLET_${LIBNAME}_LIBRARY )
IF( BULLET_${LIBNAME}_LIBRARY_debug )
SET( BULLET_LIBRARIES ${BULLET_LIBRARIES}
"debug" ${BULLET_${LIBNAME}_LIBRARY_debug}
)
ENDIF( BULLET_${LIBNAME}_LIBRARY_debug )
ENDMACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME )
MACRO( FIND_BULLET_LIBRARY LIBNAME )
FIND_BULLET_LIBRARY_DIRNAME( ${LIBNAME} ${LIBNAME} )
ENDMACRO( FIND_BULLET_LIBRARY LIBNAME )
FIND_BULLET_LIBRARY( BulletDynamics )
FIND_BULLET_LIBRARY( BulletSoftBody )
FIND_BULLET_LIBRARY( BulletCollision )
FIND_BULLET_LIBRARY( BulletMultiThreaded )
FIND_BULLET_LIBRARY( LinearMath )
FIND_BULLET_LIBRARY_DIRNAME( OpenGLSupport OpenGL )
# Hide BULLET_LIBRARY in the GUI, since most users can just ignore it
MARK_AS_ADVANCED( BULLET_LIBRARIES )
MARK_AS_ADVANCED( BULLET_LIBRARIES_debug )
SET( BULLET_FOUND 0 )
IF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES )
SET( BULLET_FOUND 1 )
ENDIF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES )
# Possible future support for collision-only (no dynamics)
IF( BULLET_BulletDynamics_LIBRARY OR BULLET_BulletDynamics_LIBRARY_debug )
SET( BULLET_DYNAMICS_FOUND 1 )
ENDIF( BULLET_BulletDynamics_LIBRARY OR BULLET_BulletDynamics_LIBRARY_debug )
# - Find Coin3D (Open Inventor)
# Coin3D is an implementation of the Open Inventor API.
# It provides data structures and algorithms for 3D visualization
# http://www.coin3d.org/
#
# This module defines the following variables
# COIN3D_FOUND - system has Coin3D - Open Inventor
# COIN3D_INCLUDE_DIRS - where the Inventor include directory can be found
# COIN3D_LIBRARIES - Link to this to use Coin3D
#
# The Coin directory can be defined by the environment variable <Coin3D_DIR>
#=============================================================================
# Copyright 2008-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
IF (WIN32)
IF (CYGWIN)
FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h)
FIND_LIBRARY(COIN3D_LIBRARIES Coin)
ELSE (CYGWIN)
FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/include"
$ENV{Coin3D_DIR}/include
$ENV{COINDIR}/include
)
FIND_LIBRARY(COIN3D_LIBRARY_DEBUG coin3d
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/lib"
$ENV{Coin3D_DIR}/lib
$ENV{COINDIR}/lib
)
FIND_LIBRARY(COIN3D_LIBRARY_RELEASE coin3
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/lib"
$ENV{Coin3D_DIR}/lib
$ENV{COINDIR}/lib
)
IF (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE)
SET(COIN3D_LIBRARIES optimized ${COIN3D_LIBRARY_RELEASE}
debug ${COIN3D_LIBRARY_DEBUG})
ELSE (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE)
IF (COIN3D_LIBRARY_DEBUG)
SET (COIN3D_LIBRARIES ${COIN3D_LIBRARY_DEBUG})
ENDIF (COIN3D_LIBRARY_DEBUG)
IF (COIN3D_LIBRARY_RELEASE)
SET (COIN3D_LIBRARIES ${COIN3D_LIBRARY_RELEASE})
ENDIF (COIN3D_LIBRARY_RELEASE)
ENDIF (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE)
ENDIF (CYGWIN)
ELSE (WIN32)
IF(APPLE)
FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h
/Library/Frameworks/Inventor.framework/Headers
)
FIND_LIBRARY(COIN3D_LIBRARIES Coin
/Library/Frameworks/Inventor.framework/Libraries
)
SET(COIN3D_LIBRARIES "-framework Coin3d" CACHE STRING "Coin3D library for OSX")
ELSE(APPLE)
find_path( COIN3D_INCLUDE_DIRS NAMES Inventor/So.h PATHS $ENV{Coin3D_DIR}/include /usr/include /usr/include/Coin4 /usr/local/include NO_DEFAULT_PATH )
find_library( COIN3D_LIBRARIES NAMES Coin PATHS $ENV{Coin3D_DIR}/lib ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES} /usr/local/lib NO_DEFAULT_PATH )
#FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h $ENV{COIN3D_DIR}/include)
#FIND_LIBRARY(COIN3D_LIBRARIES Coin $ENV{COIN3D_DIR}/lib)
ENDIF(APPLE)
ENDIF (WIN32)
# handle the QUIETLY and REQUIRED arguments and set COIN3D_FOUND to TRUE if
# all listed variables are TRUE
#INCLUDE("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
INCLUDE( FindPackageHandleStandardArgs )
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Coin3D DEFAULT_MSG COIN3D_LIBRARIES COIN3D_INCLUDE_DIRS)
MARK_AS_ADVANCED(COIN3D_INCLUDE_DIRS COIN3D_LIBRARIES )
# - Try to find Eigen3 lib
#
# This module supports requiring a minimum version, e.g. you can do
# find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
# Eigen3_FOUND - system has eigen lib with correct version
# Eigen3_INCLUDE_DIR - the eigen include directory
# Eigen3_VERSION - eigen version
# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
# Copyright (c) 2011 Manfred Kroehnert <Manfred.Kroehnert@kit.edu> "No all uppercase variable names"
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.
if(NOT Eigen3_FIND_VERSION)
if(NOT Eigen3_FIND_VERSION_MAJOR)
set(Eigen3_FIND_VERSION_MAJOR 2)
endif(NOT Eigen3_FIND_VERSION_MAJOR)
if(NOT Eigen3_FIND_VERSION_MINOR)
set(Eigen3_FIND_VERSION_MINOR 91)
endif(NOT Eigen3_FIND_VERSION_MINOR)
if(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION_PATCH 0)
endif(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)
macro(_eigen3_check_version)
file(READ "${Eigen3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
set(Eigen3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
if(${Eigen3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(Eigen3_VERSION_OK FALSE)
else(${Eigen3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(Eigen3_VERSION_OK TRUE)
endif(${Eigen3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
if(NOT Eigen3_VERSION_OK)
message(STATUS "Eigen3 version ${Eigen3_VERSION} found in ${Eigen3_INCLUDE_DIR}, "
"but at least version ${Eigen3_FIND_VERSION} is required")
endif(NOT Eigen3_VERSION_OK)
endmacro(_eigen3_check_version)
if (Eigen3_INCLUDE_DIR)
# in cache already
_eigen3_check_version()
set(Eigen3_FOUND ${Eigen3_VERSION_OK})
else (Eigen3_INCLUDE_DIR)
find_path(Eigen3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
PATHS
${CMAKE_INSTALL_PREFIX}/include
${KDE4_INCLUDE_DIR}
${Eigen3_DIR}
$ENV{Eigen3_DIR}
/org/share/archive/SFB588_RefDist/eigen3/
PATH_SUFFIXES eigen3 eigen
)
if(Eigen3_INCLUDE_DIR)
_eigen3_check_version()
set(Eigen3_FOUND ${Eigen3_VERSION_OK})
endif(Eigen3_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Eigen3 DEFAULT_MSG Eigen3_INCLUDE_DIR Eigen3_VERSION_OK)
mark_as_advanced(Eigen3_INCLUDE_DIR)
endif(Eigen3_INCLUDE_DIR)
# Searches for RBDL includes and library files
#
# Sets the variables
# RBDL_FOUND
# RBDL_INCLUDE_DIR
# RBDL_LIBRARIES
SET (RBDL_FOUND FALSE)
FIND_PATH (RBDL_INCLUDE_DIR rbdl/rbdl.h
/usr/include
/usr/local/include
$ENV{HOME}/local/include
$ENV{RBDL_PATH}/src
$ENV{RBDL_PATH}/include
$ENV{RBDL_INCLUDE_PATH}
)
FIND_LIBRARY (RBDL_LIBRARY NAMES rbdl PATHS
/usr/lib
/usr/local/lib
$ENV{HOME}/local/lib
$ENV{RBDL_PATH}
$ENV{RBDL_LIBRARY_PATH}
)
FIND_LIBRARY (RBDL_LUAMODEL_LIBRARY NAMES rbdl_luamodel PATHS
/usr/lib
/usr/local/lib
$ENV{HOME}/local/lib
$ENV{RBDL_PATH}
$ENV{RBDL_LIBRARY_PATH}
)
IF (RBDL_INCLUDE_DIR AND RBDL_LIBRARY)
SET (RBDL_FOUND TRUE)
ENDIF (RBDL_INCLUDE_DIR AND RBDL_LIBRARY)
IF (RBDL_LIBRARY AND RBDL_LUAMODEL_LIBRARY)
SET (RBDL_LIBRARIES ${RBDL_LIBRARY} ${RBDL_LUAMODEL_LIBRARY})
ELSE (RBDL_LIBRARY AND RBDL_LUAMODEL_LIBRARY)
SET (RBDL_LIBRARIES ${RBDL_LIBRARY})
ENDIF(RBDL_LIBRARY AND RBDL_LUAMODEL_LIBRARY)
IF (RBDL_FOUND)
IF (NOT RBDL_FIND_QUIETLY)
MESSAGE(STATUS "Found RBDL: ${RBDL_LIBRARY}")
IF (RBDL_LUAMODEL_LIBRARY)
MESSAGE(STATUS "Found RBDL Addon Luamodel: ${RBDL_LUAMODEL_LIBRARY}")
ENDIF (RBDL_LUAMODEL_LIBRARY)
ENDIF (NOT RBDL_FIND_QUIETLY)
ELSE (RBDL_FOUND)
IF (RBDL_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find RBDL")
ENDIF (RBDL_FIND_REQUIRED)
ENDIF (RBDL_FOUND)
MARK_AS_ADVANCED (
RBDL_INCLUDE_DIR
RBDL_LIBRARIES
RBDL_LIBRARY
RBDL_LUAMODEL_LIBRARY
)
# - Find SoQt (Open Inventor Qt Integration)
# SoQt is an implementation of the Open Inventor API.
# It provides data structures and algorithms for 3D visualization
# http://www.coin3d.org/
#
# This module defines the following variables
# SoQt_FOUND - system has SoQt - Open Inventor Qt Integration
# SoQt_INCLUDE_DIRS - where the SoQt include directory can be found
# SoQt_LIBRARIES - Link to this to use SoQt
#
IF (WIN32)
IF (CYGWIN)
FIND_PATH(SoQt_INCLUDE_DIRS Inventor/Qt/SoQt.h)
FIND_LIBRARY(SoQt_LIBRARIES SoQt)
ELSE (CYGWIN)
FIND_PATH(SoQt_INCLUDE_DIRS Inventor/Qt/SoQt.h "$ENV{COINDIR}/include" "$ENV{Coin3D_DIR}/include")
FIND_LIBRARY(SoQt_LIBRARY_RELEASE soqt1 "$ENV{COINDIR}/lib" "$ENV{Coin3D_DIR}/lib")
FIND_LIBRARY(SoQt_LIBRARY_DEBUG soqt1d "$ENV{COINDIR}/lib" "$ENV{Coin3D_DIR}/lib")
IF (SoQt_LIBRARY_DEBUG AND SoQt_LIBRARY_RELEASE)
SET(SoQt_LIBRARIES optimized ${SoQt_LIBRARY_RELEASE}
debug ${SoQt_LIBRARY_DEBUG})
ELSE (SoQt_LIBRARY_DEBUG AND SoQt_LIBRARY_RELEASE)
IF (SoQt_LIBRARY_DEBUG)
SET (SoQt_LIBRARIES ${SoQt_LIBRARY_DEBUG})
ENDIF (SoQt_LIBRARY_DEBUG)
IF (SoQt_LIBRARY_RELEASE)
SET (SoQt_LIBRARIES ${SoQt_LIBRARY_RELEASE})
ENDIF (SoQt_LIBRARY_RELEASE)
ENDIF (SoQt_LIBRARY_DEBUG AND SoQt_LIBRARY_RELEASE)
ENDIF (CYGWIN)
ELSE (WIN32)
IF(APPLE)
FIND_PATH(SoQt_INCLUDE_DIRS Inventor/Qt/SoQt.h
/Library/Frameworks/Inventor.framework/Headers
)
FIND_LIBRARY(SoQt_LIBRARIES SoQt
/Library/Frameworks/Inventor.framework/Libraries
)
SET(SoQt_LIBRARIES "-framework SoQt" CACHE STRING "SoQt library for OSX")
ELSE(APPLE)
FIND_PATH(SoQt_INCLUDE_DIRS NAMES Inventor/Qt/SoQt.h PATHS "$ENV{SoQt_DIR}/include" "$ENV{COIN3D_DIR}/include" "$ENV{Coin3D_DIR}/include" /usr/include /usr/local/include NO_DEFAULT_PATH)
FIND_LIBRARY(SoQt_LIBRARIES NAMES SoQt PATHS "$ENV{SoQt_DIR}/lib" "$ENV{COIN3D_DIR}/lib" "$ENV{Coin3D_DIR}/lib" ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES} /usr/local/lib NO_DEFAULT_PATH)
ENDIF(APPLE)
ENDIF (WIN32)
# handle the QUIETLY and REQUIRED arguments and set SoQt_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SoQt DEFAULT_MSG SoQt_LIBRARIES SoQt_INCLUDE_DIRS)
MARK_AS_ADVANCED(SoQt_INCLUDE_DIRS SoQt_LIBRARIES )
......@@ -24,7 +24,9 @@ get_filename_component(Simox_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
# Our library dependencies (contains definitions for IMPORTED targets)
if(NOT TARGET Simox AND NOT Simox_BINARY_DIR)
include("${Simox_CMAKE_DIR}/SimoxTargets.cmake")
include("${Simox_CMAKE_DIR}/SimoxTargetsLegacy.cmake")
endif()
# These are IMPORTED targets created by SimoxTargets.cmake
set(Simox_LIBRARIES "@Simox_LIBRARIES@")
set(Simox_EXECUTABLE "@Simox_EXECUTABLE@")
......@@ -34,6 +36,12 @@ if(EXISTS "${Simox_CMAKE_DIR}/CMakeCache.txt")
# In build tree
message(STATUS "Using Simox Source-Build from: ${Simox_CMAKE_DIR}")
include("${Simox_CMAKE_DIR}/SimoxBuildTreeSettings.cmake")
# Provide access to CMake helper scripts, e.g., Find... scripts.
# They might be needed as they define specific targets.
list(APPEND CMAKE_MODULE_PATH "${Simox_MACROS_INCLUDE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${Simox_MACROS_INCLUDE_DIR}/find_modules")
else()
# Installed project
message(STATUS "Using Simox Binary Package from: ${Simox_CMAKE_DIR}")
......@@ -50,17 +58,32 @@ SET(Simox_VISUALIZATION "@Simox_VISUALIZATION@")
SET(Simox_USE_COIN_VISUALIZATION "@Simox_USE_COIN_VISUALIZATION@")
SET(Simox_USE_OPENSCENEGRAPH_VISUALIZATION "@Simox_USE_OPENSCENEGRAPH_VISUALIZATION@")
SET(Simox_USE_COLLADA "@Simox_USE_COLLADA@")
SET(Simox_USE_RBDL "@Simox_USE_RBDL@")
SET(Simox_USE_RBDL_LIB "@Simox_USE_RBDL_LIB@")
SET(Simox_USE_QT5 "ON") # this variable legacy support (Qt5 is now required)
SET(Simox_USE_NLOPT "@Simox_USE_NLOPT@")
SET(SimDynamics_USE_BULLET "@SimDynamics_USE_BULLET@")
SET(SimDynamics_USE_BULLET_DOUBLE_PRECISION "@SimDynamics_USE_BULLET_DOUBLE_PRECISION@")
SET(Simox_BOOST_VERSION "@Simox_BOOST_VERSION@")
FIND_PACKAGE(Eigen3 QUIET)
FIND_PACKAGE(Qt5 5.5.0 COMPONENTS OpenGL Core Gui Widgets QUIET)
FIND_PACKAGE(Boost COMPONENTS filesystem system program_options thread QUIET)
FIND_PACKAGE(Boost ${Simox_BOOST_VERSION} EXACT COMPONENTS
filesystem
system
program_options
thread
unit_test_framework
regex
QUIET)
find_package(difflib QUIET)
find_package(doctest QUIET)
find_package(nlohmann_json 3.11.3 REQUIRED)
find_package(RBDL QUIET)
find_package(pugixml QUIET)
FIND_PACKAGE(SoQt QUIET)
if (NOT (Simox_FIND_QUIETLY OR VirtualRobot_FIND_QUIETLY))
MESSAGE(STATUS " * Including ${Simox_MACROS_INCLUDE_DIR}/SimoxMacros.cmake")
......
......@@ -16,7 +16,8 @@ function(VirtualRobotQtApplication name srcs incs mocFiles uiFiles)
################################## EXECUTABLE ##############################
ADD_EXECUTABLE(${name} ${srcs} ${incs} ${generatedUiFiles} ${generatedMocFiles})
target_include_directories(${name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
TARGET_LINK_LIBRARIES(${name} PUBLIC VirtualRobot)
FIND_PACKAGE(SoQt REQUIRED)
TARGET_LINK_LIBRARIES(${name} PUBLIC VirtualRobot SoQt::SoQt)
endfunction()
......@@ -41,7 +42,7 @@ endfunction()
function(SimoxQtApplication name srcs incs mocFiles uiFiles)
VirtualRobotQtApplication("${name}" "${srcs}" "${incs}" "${mocFiles}" "${uiFiles}")
VirtualRobotQtApplication("${name}" "${srcs}" "${incs}" "${mocFiles}" "${uiFiles}")
# add Saba and GraspStudio
TARGET_LINK_LIBRARIES(${name} PUBLIC GraspStudio Saba)
endfunction()
......@@ -52,3 +53,84 @@ function(SimoxQtLibrary name srcs incs mocFiles uiFiles)
# add Saba and GraspStudio
TARGET_LINK_LIBRARIES(${name} PUBLIC GraspStudio Saba)
endfunction()
function(simox_subdirs RESULT DIRECTORY)
file(GLOB CHILDREN ${DIRECTORY}/*)
# message("## children of ${DIRECTORY}: ${CHILDREN}")
set(DIR_CHILDREN "")
foreach(CHILD ${CHILDREN})
if (IS_DIRECTORY "${CHILD}")
list(APPEND DIR_CHILDREN ${CHILD})
endif()
endforeach()
set(${RESULT} "${DIR_CHILDREN}" PARENT_SCOPE)
endfunction()
function(simox_subdirs_recursive RESULT DIRECTORY)
simox_subdirs(TOP_CHILDREN "${DIRECTORY}")
set(ALL_CHILDREN ${TOP_CHILDREN})
foreach(TOP_CHILD ${TOP_CHILDREN})
simox_subdirs_recursive(REC_CHILDREN ${TOP_CHILD})
list(APPEND ALL_CHILDREN ${REC_CHILDREN})
endforeach()
set(${RESULT} "${ALL_CHILDREN}" PARENT_SCOPE)
endfunction()
macro(simox_update_file file content) #macro since we want to provide simox_file_up_to_date
set(simox_file_up_to_date 0)
if(EXISTS "${file}")
file(SHA512 "${file}" _simox_file_sha)
string(SHA512 _simox_cont_sha "${content}")
if("${_simox_cont_sha}" STREQUAL "${_simox_file_sha}")
set(simox_file_up_to_date 1)
endif()
endif()
#write file
if(${simox_file_up_to_date} EQUAL 0)
file(WRITE "${file}" "${content}")
endif()
endmacro()
macro(simox_generate_subdir_headers dir prefix_to_remove out_headers)
string(REPLACE "//" "/" prefix_to_remove_fixed "${prefix_to_remove}/")
string(REPLACE "${prefix_to_remove_fixed}" "" dir_rel "${dir}")
_simox_generate_subdir_headers_impl("${dir}" "${prefix_to_remove_fixed}" ${out_headers})
endmacro()
macro(_simox_generate_subdir_headers_impl dir prefix_to_remove out_headers)
simox_subdirs(subdirs ${dir})
foreach(subdir ${subdirs})
#recurse
_simox_generate_subdir_headers_impl("${subdir}" "${prefix_to_remove}" ${out_headers})
file(GLOB headers ${subdir}/*.h)
list(LENGTH headers n)
string(REGEX REPLACE ".*/" "" subdir_name "${subdir}")
if(
NOT ${n} EQUAL 0 AND
NOT "${subdir_name}" STREQUAL "detail" AND
NOT "${subdir_name}" STREQUAL "_detail" AND
NOT "${subdir_name}" STREQUAL "internal" AND
NOT "${subdir_name}" STREQUAL "_internal"
)
set(subdir_header_abs "${subdir}.h")
string(REPLACE "${prefix_to_remove}" "" subdir_header "${subdir_header_abs}")
list(APPEND ${out_headers} ${subdir_header})
#create file content
set(content "#pragma once\n\n// This file is generated!\n\n")
foreach(header ${headers})
string(REPLACE "${subdir}/" "${subdir_name}/" h "${header}")
set(content "${content}#include \"${h}\" // IWYU pragma: export\n")
endforeach()
#check for file change
simox_update_file("${subdir_header_abs}" "${content}")
endif()
endforeach()
endmacro()
// This file is generated using cmake configure_file!
#pragma once
#include <type_traits> // IWYU pragma: keep
//implementation namespace
namespace simox::meta::member::method::@NAME@::impl
{
template<class Class, class RType, class...Ps>
RType type_fn(RType(Class::*)(Ps...));
template<class T>
using ret_t = decltype(type_fn(&T::@NAME@));
template<class T, class = void>
struct member_rtype {};
template<class T>
struct member_rtype<T, std::void_t<ret_t<T>>>
{
using type = ret_t<T>;
};
template<class T, class = void>
struct member_exists : std::false_type {};
template<class T>
struct member_exists<T, std::void_t<ret_t<T>>> : std::true_type {};
}
//meta fncs namespaced by class
namespace simox::meta::member::method::@NAME@
{
template<class T> using exists = impl::member_exists<T>;
template<class T> static constexpr bool exists_v = exists<T>::value;
template<class T> using return_type = impl::member_rtype<T>;
template<class T> using return_type_t = typename return_type<T>::type;
}
//exists_v
namespace simox::meta::member::method::exists_v
{
template<class T>
static constexpr bool @NAME@ = ::simox::meta::member::method::@NAME@::exists_v<T>;
}
//concept
namespace simox::meta::member::method::ccept
{
template<class T>
concept @NAME@ = ::simox::meta::member::method::@NAME@::exists_v<T>;
}
//return_type_t
namespace simox::meta::member::method::return_type_t
{
template<class T>
using @NAME@ = simox::meta::member::method::@NAME@::return_type_t<T>;
}
// This file is generated using cmake configure_file!
#pragma once
#include <type_traits> // IWYU pragma: keep
//implementation namespace
namespace simox::meta::member::static_method::@NAME@::impl
{
template<class RType, class...Ps>
RType type_fn(RType(*)(Ps...));
template<class T>
using ret_t = decltype(type_fn(&T::@NAME@));
template<class T, class = void>
struct member_rtype {};
template<class T>
struct member_rtype<T, std::void_t<ret_t<T>>>
{
using type = ret_t<T>;
};
template<class T, class = void>
struct member_exists : std::false_type {};
template<class T>
struct member_exists<T, std::void_t<ret_t<T>>> : std::true_type {};
}
//meta fncs namespaced by class
namespace simox::meta::member::static_method::@NAME@
{
template<class T> using exists = impl::member_exists<T>;
template<class T> static constexpr bool exists_v = exists<T>::value;
template<class T> using return_type = impl::member_rtype<T>;
template<class T> using return_type_t = typename return_type<T>::type;
}
//exists_v
namespace simox::meta::member::static_method::exists_v
{
template<class T>
static constexpr bool @NAME@ = ::simox::meta::member::static_method::@NAME@::exists_v<T>;
}
//concept
namespace simox::meta::member::static_method::ccept
{
template<class T>
concept @NAME@ = ::simox::meta::member::static_method::@NAME@::exists_v<T>;
}
//return_type_t
namespace simox::meta::member::static_method::return_type_t
{
template<class T>
using @NAME@ = simox::meta::member::static_method::@NAME@::return_type_t<T>;
}
// This file is generated using cmake configure_file!
#pragma once
#include <type_traits> // IWYU pragma: keep
//implementation namespace
namespace simox::meta::member::static_variable::@NAME@::impl
{
template<class Type>
Type type_fn(const Type*);
template<class T>
using var_t = decltype(type_fn(&T::@NAME@));
template<class T, class = void>
struct member_value_type {};
template<class T>
struct member_value_type<T, std::void_t<var_t<T>>>
{
using type = var_t<T>;
};
template<class T, class = void>
struct member_value_exists : std::false_type {};
template<class T>
struct member_value_exists<T, std::void_t<var_t<T>>> : std::true_type {};
}
//meta fncs namespaced by class
namespace simox::meta::member::static_variable::@NAME@
{
template<class T> using exists = impl::member_value_exists<T>;
template<class T> static constexpr bool exists_v = exists<T>::value;
template<class T> using type = impl::member_value_type<T>;
template<class T> using type_t = typename type<T>::type;
}
//exists_v
namespace simox::meta::member::static_variable::exists_v
{
template<class T>
static constexpr bool @NAME@ = ::simox::meta::member::static_variable::@NAME@::exists_v<T>;
}
//concept
namespace simox::meta::member::static_variable::ccept
{
template<class T>
concept @NAME@ = ::simox::meta::member::static_variable::@NAME@::exists_v<T>;
}
//type_t
namespace simox::meta::member::static_variable::type_t
{
template<class T>
using @NAME@ = ::simox::meta::member::static_variable::@NAME@::type_t<T>;
}
// This file is generated using cmake configure_file!
#define BOOST_TEST_MODULE SimoxUtility / meta / check_for_members_ @CATEGORY @_ @NAME @
#include <boost/test/included/unit_test.hpp> // IWYU pragma: keep
#include <SimoxUtility/meta/type_traits/member/method/@NAME@.h>
#include <SimoxUtility/meta/type_traits/member/static_method/@NAME@.h>
#include <SimoxUtility/meta/type_traits/member/static_variable/@NAME@.h>
#include <SimoxUtility/meta/type_traits/member/type/@NAME@.h>
#include <SimoxUtility/meta/type_traits/member/variable/@NAME@.h>
// ////////////////////////////////////////////////////////////////////////// //
//test stub
// *INDENT-OFF*
template <class T, class Texp, bool Exists>
struct test_method
{
static void test();
};
template <class T, class Texp, bool Exists>
struct test_static_method
{
static void test();
};
template <class T, class Texp, bool Exists>
struct test_variable
{
static void test();
};
template <class T, class Texp, bool Exists>
struct test_static_variable
{
static void test();
};
template <class T, class Texp, bool Exists>
struct test_type
{
static void test();
};
// *INDENT-ON*
// ////////////////////////////////////////////////////////////////////////// //
//core test function
template <class T, class Texp, bool Exists>
void
test_method<T, Texp, Exists>::test()
{
namespace ns = simox::meta::member::method;
static_assert(Exists == ns::exists_v::@NAME @<T>);
static_assert(Exists == ns::ccept ::@NAME @<T>);
if constexpr (Exists)
{
static_assert(std::is_same_v<Texp, ns::return_type_t::@NAME @<T>>);
}
}
template <class T, class Texp, bool Exists>
void
test_static_method<T, Texp, Exists>::test()
{
namespace ns = simox::meta::member::static_method;
static_assert(Exists == ns::exists_v::@NAME @<T>);
static_assert(Exists == ns::ccept ::@NAME @<T>);
if constexpr (Exists)
{
static_assert(std::is_same_v<Texp, ns::return_type_t::@NAME @<T>>);
}
}
template <class T, class Texp, bool Exists>
void
test_variable<T, Texp, Exists>::test()
{
namespace ns = simox::meta::member::variable;
static_assert(Exists == ns::exists_v::@NAME @<T>);
static_assert(Exists == ns::ccept ::@NAME @<T>);
if constexpr (Exists)
{
static_assert(std::is_same_v<Texp, ns::type_t::@NAME @<T>>);
}
}
template <class T, class Texp, bool Exists>
void
test_static_variable<T, Texp, Exists>::test()
{
namespace ns = simox::meta::member::static_variable;
static_assert(Exists == ns::exists_v::@NAME @<T>);
static_assert(Exists == ns::ccept ::@NAME @<T>);
if constexpr (Exists)
{
static_assert(std::is_same_v<Texp, ns::type_t::@NAME @<T>>);
}
}
template <class T, class Texp, bool Exists>
void
test_type<T, Texp, Exists>::test()
{
namespace ns = simox::meta::member::type;
static_assert(Exists == ns::exists_v::@NAME @<T>);
static_assert(Exists == ns::ccept ::@NAME @<T>);
if constexpr (Exists)
{
static_assert(std::is_same_v<Texp, ns::type_t::@NAME @<T>>);
}
}
// ////////////////////////////////////////////////////////////////////////// //
// default impl
class nonprimitive
{
};
// *INDENT-OFF*
template <class T>
struct with_variable
{
T @NAME @ = {};
};
template <class T>
struct with_variable_2
{
T @NAME @_2 = {};
};
template <class T>
struct with_static_variable
{
static constexpr T @NAME @ = {};
};
template <class T>
struct with_static_variable_2
{
static constexpr T @NAME @_2 = {};
};
template <class T>
struct with_type
{
using @NAME @ = T;
};
template <class T>
struct with_type_2
{
using @NAME @_2 = T;
};
template <class T>
struct with_method
{
T @NAME @();
};
template <class T>
struct with_method_2
{
T @NAME @_2();
};
template <class T>
struct with_static_method
{
static T @NAME @();
};
template <class T>
struct with_static_method_2
{
static T @NAME @_2();
};
// *INDENT-ON*
enum member_type
{
variable,
static_variable,
method,
static_method,
type,
};
template <template <class, class, bool> class Tmp, class T, member_type MT>
void
test_all_for_type()
{
Tmp<with_static_variable<T>, T, MT == member_type::static_variable>::test();
Tmp<with_static_variable_2<T>, T, false>::test();
Tmp<with_variable<T>, T, MT == member_type::variable>::test();
Tmp<with_variable_2<T>, T, false>::test();
Tmp<with_type<T>, T, MT == member_type::type>::test();
Tmp<with_type_2<T>, T, false>::test();
Tmp<with_method<T>, T, MT == member_type::method>::test();
Tmp<with_method_2<T>, T, false>::test();
Tmp<with_static_method<T>, T, MT == member_type::static_method>::test();
Tmp<with_static_method_2<T>, T, false>::test();
}
template <class T>
void
test_all()
{
test_all_for_type<test_method, T, member_type::method>();
test_all_for_type<test_static_method, T, member_type::static_method>();
test_all_for_type<test_variable, T, member_type::variable>();
test_all_for_type<test_static_variable, T, member_type::static_variable>();
test_all_for_type<test_type, T, member_type::type>();
}
BOOST_AUTO_TEST_CASE(test_check_for_members_ @NAME @)
{
test_all<int>();
test_all<nonprimitive>();
}
// This file is generated using cmake configure_file!
#pragma once
#include <type_traits> // IWYU pragma: keep
//implementation namespace
namespace simox::meta::member::type::@NAME@::impl
{
template<class T, class = void>
struct member_type_exists : std::false_type
{};
template<class T>
struct member_type_exists < T, std::void_t < typename T::@NAME@ > > : std::true_type
{};
template<class T, class = void>
struct member_type_type
{};
template<class T>
struct member_type_type < T, std::void_t < typename T::@NAME@ > >
{
using type = typename T::@NAME@;
};
}
//meta fncs namespaced by class
namespace simox::meta::member::type::@NAME@
{
template<class T> using exists = impl::member_type_exists<T>;
template<class T> static constexpr bool exists_v = exists<T>::value;
template<class T> using type = impl::member_type_type<T>;
template<class T> using type_t = typename type<T>::type;
}
//exists_v
namespace simox::meta::member::type::exists_v
{
template<class T>
static constexpr bool @NAME@ = ::simox::meta::member::type::@NAME@::exists_v<T>;
}
//concept
namespace simox::meta::member::type::ccept
{
template<class T>
concept @NAME@ = ::simox::meta::member::type::@NAME@::exists_v<T>;
}
//type_t
namespace simox::meta::member::type::type_t
{
template<class T>
using @NAME@ = ::simox::meta::member::type::@NAME@::type_t<T>;
}
// This file is generated using cmake configure_file!
#pragma once
#include <type_traits> // IWYU pragma: keep
//implementation namespace
namespace simox::meta::member::variable::@NAME@::impl
{
template<class Class, class Type>
Type type_fn(Type Class::*);
template<class T>
using var_t = decltype(type_fn(&T::@NAME@));
template<class T, class = void>
struct member_type {};
template<class T>
struct member_type<T, std::void_t<var_t<T>>>
{
using type = var_t<T>;
};
template<class T, class = void>
struct member_exists : std::false_type {};
template<class T>
struct member_exists<T, std::void_t<var_t<T>>> : std::true_type {};
}
//meta fncs namespaced by class
namespace simox::meta::member::variable::@NAME@
{
template<class T> using exists = impl::member_exists<T>;
template<class T> static constexpr bool exists_v = exists<T>::value;
template<class T> using type = impl::member_type<T>;
template<class T> using type_t = typename type<T>::type;
}
//exists_v
namespace simox::meta::member::variable::exists_v
{
template<class T>
static constexpr bool @NAME@ = ::simox::meta::member::variable::@NAME@::exists_v<T>;
}
//concept
namespace simox::meta::member::variable::ccept
{
template<class T>
concept @NAME@ = ::simox::meta::member::variable::@NAME@::exists_v<T>;
}
//type_t
namespace simox::meta::member::variable::type_t
{
template<class T>
using @NAME@ = simox::meta::member::variable::@NAME@::type_t<T>;
}