123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- # 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.
- cmake_minimum_required(VERSION 3.16)
- # INTERPROCEDURAL_OPTIMIZATION is enforced when enabled.
- set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
- # Default to GLVND if available.
- set(CMAKE_POLICY_DEFAULT_CMP0072 NEW)
- # This line has to appear before 'PROJECT' in order to be able to disable incremental linking
- set(MSVC_INCREMENTAL_DEFAULT ON)
- project(
- mujoco_samples
- VERSION 3.2.5
- DESCRIPTION "MuJoCo samples binaries"
- HOMEPAGE_URL "https://mujoco.org"
- )
- enable_language(C)
- enable_language(CXX)
- if(APPLE)
- enable_language(OBJC)
- enable_language(OBJCXX)
- endif()
- # Check if we are building as standalone project.
- set(SAMPLE_STANDALONE OFF)
- set(_INSTALL_SAMPLES ON)
- if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
- set(SAMPLE_STANDALONE ON)
- # If standalone, do not install the samples.
- set(_INSTALL_SAMPLES OFF)
- endif()
- list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
- if(SAMPLE_STANDALONE)
- include(SampleOptions)
- else()
- enforce_mujoco_macosx_min_version()
- endif()
- include(SampleDependencies)
- set(MUJOCO_SAMPLE_COMPILE_OPTIONS "${AVX_COMPILE_OPTIONS}" "${EXTRA_COMPILE_OPTIONS}")
- set(MUJOCO_SAMPLE_LINK_OPTIONS "${EXTRA_LINK_OPTIONS}")
- if(MUJOCO_HARDEN)
- if(WIN32)
- set(MUJOCO_SAMPLE_LINK_OPTIONS "${MUJOCO_SAMPLE_LINK_OPTIONS}" -Wl,/DYNAMICBASE)
- else()
- set(MUJOCO_SAMPLE_COMPILE_OPTIONS "${MUJOCO_SAMPLE_COMPILE_OPTIONS}" -fPIE)
- if(APPLE)
- set(MUJOCO_SAMPLE_LINK_OPTIONS "${MUJOCO_SAMPLE_LINK_OPTIONS}" -Wl,-pie)
- else()
- set(MUJOCO_SAMPLE_LINK_OPTIONS "${MUJOCO_SAMPLE_LINK_OPTIONS}" -pie)
- endif()
- endif()
- endif()
- # Build sample binaries
- add_executable(compile compile.cc)
- target_compile_options(compile PUBLIC ${MUJOCO_SAMPLE_COMPILE_OPTIONS})
- target_link_libraries(compile Threads::Threads)
- target_link_options(compile PRIVATE ${MUJOCO_SAMPLE_LINK_OPTIONS})
- add_executable(testspeed testspeed.cc)
- target_compile_options(testspeed PUBLIC ${MUJOCO_SAMPLE_COMPILE_OPTIONS})
- target_link_libraries(testspeed Threads::Threads)
- target_link_options(testspeed PRIVATE ${MUJOCO_SAMPLE_LINK_OPTIONS})
- target_link_libraries(compile mujoco::mujoco)
- target_link_libraries(testspeed mujoco::mujoco)
- # Build samples that require GLFW.
- add_executable(basic basic.cc)
- target_compile_options(basic PUBLIC ${MUJOCO_SAMPLE_COMPILE_OPTIONS})
- target_link_libraries(
- basic
- mujoco::mujoco
- glfw
- Threads::Threads
- )
- target_link_options(basic PRIVATE ${MUJOCO_SAMPLE_LINK_OPTIONS})
- add_executable(record record.cc array_safety.h)
- target_compile_options(record PUBLIC ${MUJOCO_SAMPLE_COMPILE_OPTIONS})
- target_link_libraries(
- record
- mujoco::mujoco
- glfw
- Threads::Threads
- )
- target_link_options(record PRIVATE ${MUJOCO_SAMPLE_LINK_OPTIONS})
- if(APPLE AND MUJOCO_BUILD_MACOS_FRAMEWORKS)
- embed_in_bundle(basic simulate)
- embed_in_bundle(compile simulate)
- embed_in_bundle(record simulate)
- embed_in_bundle(testspeed simulate)
- endif()
- # Do not install if macOS Bundles are created as RPATH is managed manually there.
- if(APPLE AND MUJOCO_BUILD_MACOS_FRAMEWORKS)
- set(_INSTALL_SAMPLES OFF)
- endif()
- if(_INSTALL_SAMPLES)
- include(TargetAddRpath)
- # Add support to RPATH for the samples.
- target_add_rpath(
- TARGETS
- basic
- compile
- record
- testspeed
- INSTALL_DIRECTORY
- "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}"
- LIB_DIRS
- "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
- DEPENDS
- MUJOCO_ENABLE_RPATH
- )
- install(
- TARGETS basic
- compile
- record
- testspeed
- EXPORT ${PROJECT_NAME}
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT samples
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT samples
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT samples
- BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT samples
- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT samples
- )
- if(NOT MUJOCO_SAMPLES_USE_SYSTEM_GLFW)
- # We downloaded GLFW. Depending if it is a static or shared LIBRARY we might
- # need to install it.
- get_target_property(MJ_GLFW_LIBRARY_TYPE glfw TYPE)
- if(MJ_GLFW_LIBRARY_TYPE STREQUAL SHARED_LIBRARY)
- install(
- TARGETS glfw
- EXPORT ${PROJECT_NAME}
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT samples
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT samples
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT samples
- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT samples
- )
- endif()
- endif()
- endif()
|