123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- # 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
- b4ed2cd7ecf61d29076169b49199371456d4f90b
- CACHE STRING "Version of `lodepng` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_tinyxml2
- 9a89766acc42ddfa9e7133c7d81a5bda108a0ade
- 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
- 0c8fc90d2037588024d9964515c1e684f6007ecc
- CACHE STRING "Version of `qhull` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_Eigen3
- b396a6fbb2e173f52edb3360485dedf3389ef830
- CACHE STRING "Version of `Eigen3` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_abseil
- 4447c7562e3bc702ade25105912dce503f0c4010 # LTS 20240722.0
- CACHE STRING "Version of `abseil` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_gtest
- b514bdc898e2951020cbdca1304b75f5950d1f59 # v1.15.2
- CACHE STRING "Version of `gtest` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_benchmark
- 7c8ed6b082aa3c7a3402f18e50da4480421d08fd # v1.8.4
- CACHE STRING "Version of `benchmark` to be fetched."
- )
- set(MUJOCO_DEP_VERSION_sdflib
- 1927bee6bb8225258a39c8cbf14e18a4d50409ae
- CACHE STRING "Version of `SdfLib` 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)
- mark_as_advanced(MUJOCO_DEP_VERSION_sdflib)
- 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})
- target_include_directories(lodepng PUBLIC ${lodepng_SOURCE_DIR})
- 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)
- 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
- )
- # 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})
- 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
- )
- option(SDFLIB_USE_ASSIMP OFF)
- option(SDFLIB_USE_OPENMP OFF)
- option(SDFLIB_USE_ENOKI OFF)
- findorfetch(
- USE_SYSTEM_PACKAGE
- OFF
- PACKAGE_NAME
- sdflib
- LIBRARY_NAME
- sdflib
- GIT_REPO
- https://github.com/UPC-ViRVIG/SdfLib.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_sdflib}
- TARGETS
- SdfLib
- EXCLUDE_FROM_ALL
- )
- target_compile_options(SdfLib PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
- target_link_options(SdfLib PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
- set(ENABLE_DOUBLE_PRECISION ON)
- set(CCD_HIDE_ALL_SYMBOLS ON)
- 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
- )
- 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)
- 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
- )
- # 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/-std=c++11/-std=c++14/g"
- "-e"
- "s/HAVE_CXX_FLAG_STD_CXX11/HAVE_CXX_FLAG_STD_CXX14/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
- )
|