22e3217fc0
The `mjCOctree::ComputeSdfCoeffs` function has been replaced by `mjCOctree::ComputeSdf`. The new implementation removes the dependency on the `triangle_mesh_distance` library. Instead, it uses a provided `mjCBoundingVolumeHierarchy` to perform closest point queries on the mesh. The signed distance is computed by finding the closest triangle face via the BVH and determining the sign based on the dot product of the vector from the closest point on the triangle to the octree vertex and the triangle's normal. Optional Laplacian smoothing has been added to the SDF coefficients. This helps smooth out potential discontinuities at octree level boundaries. PiperOrigin-RevId: 875093374 Change-Id: I6fa53243a2dda107ccf255bc6b876ca5a4554d4f
368 lines
10 KiB
CMake
368 lines
10 KiB
CMake
# Copyright 2021 DeepMind Technologies Limited
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Build configuration for third party libraries used in MuJoCo.
|
|
|
|
set(MUJOCO_DEP_VERSION_lodepng
|
|
17d08dd26cac4d63f43af217ebd70318bfb8189c
|
|
CACHE STRING "Version of `lodepng` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_tinyxml2
|
|
e6caeae85799003f4ca74ff26ee16a789bc2af48
|
|
CACHE STRING "Version of `tinyxml2` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_tinyobjloader
|
|
1421a10d6ed9742f5b2c1766d22faa6cfbc56248
|
|
CACHE STRING "Version of `tinyobjloader` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_MarchingCubeCpp
|
|
f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d
|
|
CACHE STRING "Version of `MarchingCubeCpp` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_ccd
|
|
7931e764a19ef6b21b443376c699bbc9c6d4fba8 # v2.1
|
|
CACHE STRING "Version of `ccd` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_qhull
|
|
62ccc56af071eaa478bef6ed41fd7a55d3bb2d80
|
|
CACHE STRING "Version of `qhull` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_Eigen3
|
|
75bcd155c40cb48e647c87c3f29052360255bc9e
|
|
CACHE STRING "Version of `Eigen3` to be fetched."
|
|
)
|
|
|
|
set(MUJOCO_DEP_VERSION_abseil
|
|
255c84dadd029fd8ad25c5efb5933e47beaa00c7 # LTS 20250814.1
|
|
CACHE STRING "Version of `abseil` to be fetched."
|
|
)
|
|
|
|
set(MUJOCO_DEP_VERSION_gtest
|
|
52eb8108c5bdec04579160ae17225d66034bd723 # v1.17.0
|
|
CACHE STRING "Version of `gtest` to be fetched."
|
|
)
|
|
|
|
set(MUJOCO_DEP_VERSION_benchmark
|
|
5c55f5d4f45a1b09c5d98aa63a671993ebd42c69
|
|
CACHE STRING "Version of `benchmark` to be fetched."
|
|
)
|
|
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_lodepng)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_MarchingCubeCpp)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_tinyxml2)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_tinyobjloader)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_ccd)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_qhull)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_Eigen3)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_abseil)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_gtest)
|
|
mark_as_advanced(MUJOCO_DEP_VERSION_benchmark)
|
|
|
|
include(FetchContent)
|
|
include(FindOrFetch)
|
|
|
|
# Override the BUILD_SHARED_LIBS setting, just for building third party libs (since we always want
|
|
# static libraries). The ccd CMakeLists.txt doesn't expose an option to build a static ccd library,
|
|
# unless BUILD_SHARED_LIBS is set.
|
|
|
|
# We force all the dependencies to be compiled as static libraries.
|
|
# TODO(fraromano) Revisit this choice when adding support for install.
|
|
set(BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS})
|
|
set(BUILD_SHARED_LIBS
|
|
OFF
|
|
CACHE INTERNAL "Build SHARED libraries"
|
|
)
|
|
|
|
if(NOT TARGET lodepng)
|
|
FetchContent_Declare(
|
|
lodepng
|
|
GIT_REPOSITORY https://github.com/lvandeve/lodepng.git
|
|
GIT_TAG ${MUJOCO_DEP_VERSION_lodepng}
|
|
)
|
|
|
|
FetchContent_GetProperties(lodepng)
|
|
if(NOT lodepng_POPULATED)
|
|
FetchContent_Populate(lodepng)
|
|
# This is not a CMake project.
|
|
set(LODEPNG_SRCS ${lodepng_SOURCE_DIR}/lodepng.cpp)
|
|
set(LODEPNG_HEADERS ${lodepng_SOURCE_DIR}/lodepng.h)
|
|
add_library(lodepng STATIC ${LODEPNG_HEADERS} ${LODEPNG_SRCS})
|
|
target_compile_options(lodepng PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
|
|
target_link_options(lodepng PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
|
|
if(NOT EMSCRIPTEN)
|
|
target_include_directories(lodepng PUBLIC ${lodepng_SOURCE_DIR})
|
|
else()
|
|
target_include_directories(lodepng PUBLIC $<BUILD_INTERFACE:${lodepng_SOURCE_DIR}> $<INSTALL_INTERFACE:include>)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT TARGET marchingcubecpp)
|
|
FetchContent_Declare(
|
|
marchingcubecpp
|
|
GIT_REPOSITORY https://github.com/aparis69/MarchingCubeCpp.git
|
|
GIT_TAG ${MUJOCO_DEP_VERSION_MarchingCubeCpp}
|
|
)
|
|
|
|
FetchContent_GetProperties(marchingcubecpp)
|
|
if(NOT marchingcubecpp_POPULATED)
|
|
FetchContent_Populate(marchingcubecpp)
|
|
include_directories(${marchingcubecpp_SOURCE_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
set(QHULL_ENABLE_TESTING OFF)
|
|
# Patch changes in https://github.com/qhull/qhull/pull/173.patch
|
|
set(QHULL_PATCH_COMMAND
|
|
git apply --reject --whitespace=fix ${mujoco_SOURCE_DIR}/cmake/qhull-support-emscripten.patch
|
|
)
|
|
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
qhull
|
|
LIBRARY_NAME
|
|
qhull
|
|
GIT_REPO
|
|
https://github.com/qhull/qhull.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_qhull}
|
|
TARGETS
|
|
qhull
|
|
EXCLUDE_FROM_ALL
|
|
PATCH_COMMAND ${QHULL_PATCH_COMMAND}
|
|
)
|
|
# MuJoCo includes a file from libqhull_r which is not exported by the qhull include directories.
|
|
# Add it to the target.
|
|
target_include_directories(
|
|
qhullstatic_r INTERFACE $<BUILD_INTERFACE:${qhull_SOURCE_DIR}/src/libqhull_r>
|
|
)
|
|
target_compile_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
|
|
target_link_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
|
|
|
|
set(tinyxml2_BUILD_TESTING OFF)
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
tinyxml2
|
|
LIBRARY_NAME
|
|
tinyxml2
|
|
GIT_REPO
|
|
https://github.com/leethomason/tinyxml2.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_tinyxml2}
|
|
TARGETS
|
|
tinyxml2
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
target_compile_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
|
|
target_link_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
|
|
|
|
# update cmake_minimum_required version for compatibility with newer version of cmake
|
|
if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM)
|
|
set(CMAKE_POLICY_VERSION_MINIMUM ${MUJOCO_CMAKE_MIN_REQ})
|
|
set(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED ON)
|
|
endif()
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
tinyobjloader
|
|
LIBRARY_NAME
|
|
tinyobjloader
|
|
GIT_REPO
|
|
https://github.com/tinyobjloader/tinyobjloader.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_tinyobjloader}
|
|
TARGETS
|
|
tinyobjloader
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
unset(CMAKE_POLICY_VERSION_MINIMUM)
|
|
unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
endif()
|
|
|
|
set(ENABLE_DOUBLE_PRECISION ON)
|
|
set(CCD_HIDE_ALL_SYMBOLS ON)
|
|
|
|
# Patch changes in https://github.com/danfis/libccd/pull/83.patch
|
|
set(CCD_PATCH_COMMAND
|
|
git apply --reject --whitespace=fix ${mujoco_SOURCE_DIR}/cmake/ccd-support-emscripten.patch
|
|
)
|
|
|
|
# update cmake_minimum_required version for compatibility with newer version of cmake
|
|
if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM)
|
|
set(CMAKE_POLICY_VERSION_MINIMUM ${MUJOCO_CMAKE_MIN_REQ})
|
|
set(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED ON)
|
|
endif()
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
ccd
|
|
LIBRARY_NAME
|
|
ccd
|
|
GIT_REPO
|
|
https://github.com/danfis/libccd.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_ccd}
|
|
TARGETS
|
|
ccd
|
|
EXCLUDE_FROM_ALL
|
|
PATCH_COMMAND ${CCD_PATCH_COMMAND}
|
|
)
|
|
if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
unset(CMAKE_POLICY_VERSION_MINIMUM)
|
|
unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
endif()
|
|
target_compile_options(ccd PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
|
|
target_link_options(ccd PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
|
|
|
|
# libCCD has an unconditional `#define _CRT_SECURE_NO_WARNINGS` on Windows.
|
|
# TODO(stunya): Remove this after https://github.com/danfis/libccd/pull/77 is merged.
|
|
if(WIN32)
|
|
if(MSVC)
|
|
# C4005 is the MSVC equivalent of -Wmacro-redefined.
|
|
target_compile_options(ccd PRIVATE /wd4005)
|
|
else()
|
|
target_compile_options(ccd PRIVATE -Wno-macro-redefined)
|
|
endif()
|
|
endif()
|
|
|
|
if(MUJOCO_BUILD_TESTS OR MUJOCO_BUILD_STUDIO OR MUJOCO_USE_FILAMENT)
|
|
set(ABSL_PROPAGATE_CXX_STD ON)
|
|
|
|
# This specific version of Abseil does not have the following variable. We need to work with BUILD_TESTING
|
|
set(BUILD_TESTING_OLD ${BUILD_TESTING})
|
|
set(BUILD_TESTING
|
|
OFF
|
|
CACHE INTERNAL "Build tests."
|
|
)
|
|
|
|
set(ABSL_BUILD_TESTING OFF)
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
absl
|
|
LIBRARY_NAME
|
|
abseil-cpp
|
|
GIT_REPO
|
|
https://github.com/abseil/abseil-cpp.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_abseil}
|
|
TARGETS
|
|
absl::core_headers
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
set(BUILD_TESTING
|
|
${BUILD_TESTING_OLD}
|
|
CACHE BOOL "Build tests." FORCE
|
|
)
|
|
endif()
|
|
|
|
if(MUJOCO_BUILD_TESTS)
|
|
|
|
# Avoid linking errors on Windows by dynamically linking to the C runtime.
|
|
set(gtest_force_shared_crt
|
|
ON
|
|
CACHE BOOL "" FORCE
|
|
)
|
|
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
GTest
|
|
LIBRARY_NAME
|
|
googletest
|
|
GIT_REPO
|
|
https://github.com/google/googletest.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_gtest}
|
|
TARGETS
|
|
gtest
|
|
gmock
|
|
gtest_main
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
|
|
set(BENCHMARK_EXTRA_FETCH_ARGS "")
|
|
if(WIN32 AND NOT MSVC)
|
|
set(BENCHMARK_EXTRA_FETCH_ARGS
|
|
PATCH_COMMAND
|
|
"sed"
|
|
"-i"
|
|
"-e"
|
|
"s/-Wformat=2/-Wformat/g"
|
|
"${CMAKE_BINARY_DIR}/_deps/benchmark-src/CMakeLists.txt"
|
|
)
|
|
endif()
|
|
|
|
set(BENCHMARK_ENABLE_TESTING OFF)
|
|
|
|
findorfetch(
|
|
USE_SYSTEM_PACKAGE
|
|
OFF
|
|
PACKAGE_NAME
|
|
benchmark
|
|
LIBRARY_NAME
|
|
benchmark
|
|
GIT_REPO
|
|
https://github.com/google/benchmark.git
|
|
GIT_TAG
|
|
${MUJOCO_DEP_VERSION_benchmark}
|
|
TARGETS
|
|
benchmark::benchmark
|
|
benchmark::benchmark_main
|
|
${BENCHMARK_EXTRA_FETCH_ARGS}
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
endif()
|
|
|
|
if(MUJOCO_TEST_PYTHON_UTIL)
|
|
add_compile_definitions(EIGEN_MPL2_ONLY)
|
|
if(NOT TARGET eigen)
|
|
# Support new IN_LIST if() operator.
|
|
set(CMAKE_POLICY_DEFAULT_CMP0057 NEW)
|
|
|
|
FetchContent_Declare(
|
|
Eigen3
|
|
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
|
|
GIT_TAG ${MUJOCO_DEP_VERSION_Eigen3}
|
|
)
|
|
|
|
FetchContent_GetProperties(Eigen3)
|
|
if(NOT Eigen3_POPULATED)
|
|
FetchContent_Populate(Eigen3)
|
|
|
|
# Mark the library as IMPORTED as a workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/15415
|
|
add_library(Eigen3::Eigen INTERFACE IMPORTED)
|
|
set_target_properties(
|
|
Eigen3::Eigen PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${eigen3_SOURCE_DIR}"
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Reset BUILD_SHARED_LIBS to its previous value
|
|
set(BUILD_SHARED_LIBS
|
|
${BUILD_SHARED_LIBS_OLD}
|
|
CACHE BOOL "Build MuJoCo as a shared library" FORCE
|
|
)
|