From 618fb2ed2f3095e655bd7f944e0404a0f5270e05 Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 2 Apr 2021 22:17:58 -0600 Subject: [PATCH] CMake: macOS builds into bin dir and moves libraries there; A previous change modified the rpath to always be @executable_path. This patch moves all libraries next to the executable, so that they can load properly with the new rpath. For better organization, everything is nested into a bin directory. This is congruent with how linux works. Bundled builds remain the same -- they are using @executable_path like before, and libraries get moved next to the executable inside the .app. --- CMakeLists.txt | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 656e76c3..b1bb773e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -616,34 +616,36 @@ elseif(APPLE) INSTALL_RPATH "@executable_path" ) if(LOVR_BUILD_BUNDLE) - function(move_lib) - if(TARGET ${ARGV0}) - add_custom_command(TARGET lovr POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - $ - ${CMAKE_CURRENT_BINARY_DIR}/lovr.app/Contents/MacOS/$ # Bad - ) - endif() - endfunction() - - move_lib(${LOVR_GLFW}) - move_lib(${LOVR_LUA}) - move_lib(${LOVR_ODE}) - move_lib(${LOVR_OPENVR}) - move_lib(${LOVR_MSDF}) - move_lib(${LOVR_OCULUS_AUDIO}) - move_lib(${LOVR_PHONON}) - foreach(target ${ALL_PLUGIN_TARGETS}) - move_lib(${target}) - endforeach() - + set(EXE_DIR ${CMAKE_CURRENT_BINARY_DIR}/lovr.app/Contents/MacOS) target_sources(lovr PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.icns") set_target_properties(lovr PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Info.plist" RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.icns" ) + else() + set(EXE_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin) + set_target_properties(lovr PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") endif() + function(move_lib) + if(TARGET ${ARGV0}) + add_custom_command(TARGET lovr POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + $ + ${EXE_DIR}/$ + ) + endif() + endfunction() + move_lib(${LOVR_GLFW}) + move_lib(${LOVR_LUA}) + move_lib(${LOVR_ODE}) + move_lib(${LOVR_OPENVR}) + move_lib(${LOVR_MSDF}) + move_lib(${LOVR_OCULUS_AUDIO}) + move_lib(${LOVR_PHONON}) + foreach(target ${ALL_PLUGIN_TARGETS}) + move_lib(${target}) + endforeach() elseif(EMSCRIPTEN) target_sources(lovr PRIVATE src/core/os_web.c) target_compile_definitions(lovr PRIVATE LOVR_WEBGL)