diff --git a/python/mujoco/CMakeLists.txt b/python/mujoco/CMakeLists.txt index 151ef8ff..eae0311c 100644 --- a/python/mujoco/CMakeLists.txt +++ b/python/mujoco/CMakeLists.txt @@ -454,7 +454,8 @@ mujoco_pybind11_module(_simulate simulate.cc) target_link_libraries( _simulate PRIVATE mujoco - mujoco::libsimulate + mujoco::libmujoco_simulate + glfw errors_header raw structs_header diff --git a/sample/cmake/SampleDependencies.cmake b/sample/cmake/SampleDependencies.cmake index 5365ab10..c03dd6d1 100644 --- a/sample/cmake/SampleDependencies.cmake +++ b/sample/cmake/SampleDependencies.cmake @@ -98,7 +98,7 @@ if(MUJOCO_EXTRAS_STATIC_GLFW) unset(BUILD_SHARED_LIBS_OLD) endif() -if(NOT SAMPLE_STANDALONE) +if(NOT SAMPLE_STANDALONE AND NOT MUJOCO_SAMPLES_USE_SYSTEM_GLFW) target_compile_options(glfw PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS}) target_link_options(glfw PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS}) endif() diff --git a/simulate/CMakeLists.txt b/simulate/CMakeLists.txt index aaede15c..568e638a 100644 --- a/simulate/CMakeLists.txt +++ b/simulate/CMakeLists.txt @@ -47,6 +47,7 @@ option(SIMULATE_GLFW_DYNAMIC_SYMBOLS "Whether to resolve GLFW symbols dynamicall # Check if we are building as standalone project. set(SIMULATE_STANDALONE OFF) set(_INSTALL_SIMULATE ON) + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(SIMULATE_STANDALONE ON) # If standalone, do not install the samples. @@ -93,7 +94,7 @@ if(NOT TARGET 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}) + add_library(lodepng OBJECT ${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}) @@ -114,7 +115,7 @@ if(APPLE) target_link_libraries(platform_ui_adapter PUBLIC "-framework CoreVideo") endif() target_include_directories( - platform_ui_adapter PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + platform_ui_adapter PUBLIC $ $ ) target_link_libraries(platform_ui_adapter PUBLIC mujoco::mujoco) @@ -123,23 +124,30 @@ if(SIMULATE_GLFW_DYNAMIC_SYMBOLS) endif() add_library(mujoco::platform_ui_adapter ALIAS platform_ui_adapter) -add_library(libsimulate STATIC $) -set_target_properties(libsimulate PROPERTIES OUTPUT_NAME simulate) -add_library(mujoco::libsimulate ALIAS libsimulate) +add_library(libmujoco_simulate STATIC $ $) +set_target_properties(libmujoco_simulate PROPERTIES OUTPUT_NAME simulate) +add_library(mujoco::libmujoco_simulate ALIAS libmujoco_simulate) +set_target_properties(libmujoco_simulate PROPERTIES PUBLIC_HEADER "simulate.h;platform_ui_adapter.h;glfw_adapter.h;glfw_dispatch.h;glfw_corevideo.h;array_safety.h") + target_sources( - libsimulate - PUBLIC simulate.h - PRIVATE simulate.cc array_safety.h + libmujoco_simulate + PRIVATE simulate.cc ) -target_include_directories(libsimulate PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_compile_options(libsimulate PRIVATE ${MUJOCO_SIMULATE_COMPILE_OPTIONS}) -target_link_libraries(libsimulate PUBLIC lodepng mujoco::platform_ui_adapter mujoco::mujoco) -target_link_options(libsimulate PRIVATE ${MUJOCO_SIMULATE_LINK_OPTIONS}) +target_include_directories(libmujoco_simulate + PUBLIC + $ + $ + PRIVATE + ${lodepng_SOURCE_DIR} +) +target_compile_options(libmujoco_simulate PRIVATE ${MUJOCO_SIMULATE_COMPILE_OPTIONS}) +target_link_libraries(libmujoco_simulate PUBLIC mujoco::mujoco) +target_link_options(libmujoco_simulate PRIVATE ${MUJOCO_SIMULATE_LINK_OPTIONS}) if(APPLE) - target_sources(libsimulate PRIVATE macos_gui.mm) - target_link_libraries(libsimulate PUBLIC "-framework Cocoa") + target_sources(libmujoco_simulate PRIVATE macos_gui.mm) + target_link_libraries(libmujoco_simulate PUBLIC "-framework Cocoa") endif() # Build simulate executable @@ -167,13 +175,16 @@ if(SIMULATE_BUILD_EXECUTABLE) target_link_libraries( simulate - libsimulate + libmujoco_simulate mujoco::mujoco glfw Threads::Threads - lodepng ) + if(APPLE) + target_link_libraries(simulate "-framework CoreVideo") + endif() + if (MUJOCO_WITH_USD) target_link_libraries( simulate @@ -263,16 +274,6 @@ if(SIMULATE_BUILD_EXECUTABLE) ) endif() - install( - TARGETS simulate - EXPORT ${PROJECT_NAME} - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT simulate - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate - BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT simulate - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT simulate - ) - if(NOT MUJOCO_SIMULATE_USE_SYSTEM_GLFW) # We downloaded GLFW. Depending if it is a static or shared LIBRARY we might # need to install it. @@ -288,5 +289,26 @@ if(SIMULATE_BUILD_EXECUTABLE) ) endif() endif() + + install( + TARGETS simulate + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT simulate + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate + BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT simulate + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" COMPONENT simulate + ) + + # Specify public headers for libmujoco_simulate + + install( + TARGETS libmujoco_simulate + EXPORT mujoco + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT simulate + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT simulate + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/simulate" COMPONENT simulate + ) endif() endif() diff --git a/simulate/cmake/SimulateDependencies.cmake b/simulate/cmake/SimulateDependencies.cmake index 4e910520..7885f5f9 100644 --- a/simulate/cmake/SimulateDependencies.cmake +++ b/simulate/cmake/SimulateDependencies.cmake @@ -98,7 +98,7 @@ if(MUJOCO_EXTRAS_STATIC_GLFW) unset(BUILD_SHARED_LIBS_OLD) endif() -if(NOT SIMULATE_STANDALONE) +if(NOT SIMULATE_STANDALONE AND NOT MUJOCO_SIMULATE_USE_SYSTEM_GLFW) target_compile_options(glfw PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS}) target_link_options(glfw PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS}) endif()