3b08f39747
PiperOrigin-RevId: 935674769 Change-Id: I4ad9c7494f499bc1016b99df78053337db439309
393 lines
11 KiB
CMake
393 lines
11 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
|
|
d1c2fc0caa5f644f3a0f220290d4a868c68ed4f6
|
|
CACHE STRING "Version of `qhull` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_miniz
|
|
d10b03cc73475af673df40f06e5cefd1d5f940d9
|
|
CACHE STRING "Version of `miniz` to be fetched."
|
|
)
|
|
set(MUJOCO_DEP_VERSION_Eigen3
|
|
ea13a98decd497a8c5588fb5de71b57bcf10d864
|
|
CACHE STRING "Version of `Eigen3` to be fetched."
|
|
)
|
|
|
|
set(MUJOCO_DEP_VERSION_abseil
|
|
5650e9cf76d3be4318d5fa3af38ee483ddfd5e4a # LTS 20260526.0
|
|
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
|
|
834a61fc65e8b7885fcf177f1230ae4b897118fa
|
|
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(DEFINED BUILD_TESTS)
|
|
set(_OLD_BUILD_TESTS "${BUILD_TESTS}")
|
|
set(_BUILD_TESTS_WAS_DEFINED TRUE)
|
|
else()
|
|
set(_BUILD_TESTS_WAS_DEFINED FALSE)
|
|
endif()
|
|
set(BUILD_TESTS OFF)
|
|
fetchpackage(
|
|
PACKAGE_NAME miniz
|
|
GIT_REPO https://github.com/richgel999/miniz.git
|
|
GIT_TAG ${MUJOCO_DEP_VERSION_miniz}
|
|
TARGETS miniz
|
|
)
|
|
if(_BUILD_TESTS_WAS_DEFINED)
|
|
set(BUILD_TESTS "${_OLD_BUILD_TESTS}")
|
|
else()
|
|
unset(BUILD_TESTS)
|
|
endif()
|
|
unset(_BUILD_TESTS_WAS_DEFINED)
|
|
|
|
|
|
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
|
|
)
|