diff --git a/CMakeLists.txt b/CMakeLists.txt index 89fb92846..2d6c03da3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,31 @@ endif() set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +if(APPLE) + function(sd_set_macos_rpaths target) + get_target_property(target_type ${target} TYPE) + if(target_type STREQUAL "EXECUTABLE") + set(runtime_paths "@executable_path" "@executable_path/../lib") + elseif(target_type STREQUAL "SHARED_LIBRARY" OR target_type STREQUAL "MODULE_LIBRARY") + set(runtime_paths "@loader_path" "@loader_path/../lib") + set_target_properties(${target} PROPERTIES + MACOSX_RPATH ON + INSTALL_NAME_DIR "@rpath" + BUILD_WITH_INSTALL_NAME_DIR ON + ) + else() + return() + endif() + + # Release artifacts zip the build output directly, so keep macOS rpaths relocatable. + set_target_properties(${target} PROPERTIES + BUILD_RPATH "${runtime_paths}" + INSTALL_RPATH "${runtime_paths}" + BUILD_WITH_INSTALL_RPATH ON + ) + endfunction() +endif() + if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(SD_STANDALONE ON) else() @@ -237,6 +262,10 @@ else() add_library(${SD_LIB} STATIC ${SD_LIB_SOURCES}) endif() +if(APPLE) + sd_set_macos_rpaths(${SD_LIB}) +endif() + if(SD_SYCL) message("-- Use SYCL as backend stable-diffusion") set(GGML_SYCL ON) diff --git a/examples/cli/CMakeLists.txt b/examples/cli/CMakeLists.txt index cbc485bbe..6b1266cf5 100644 --- a/examples/cli/CMakeLists.txt +++ b/examples/cli/CMakeLists.txt @@ -7,6 +7,9 @@ add_executable(${TARGET} image_metadata.cpp main.cpp ) +if(APPLE) + sd_set_macos_rpaths(${TARGET}) +endif() target_include_directories(${TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/.." "${PROJECT_SOURCE_DIR}/src" diff --git a/examples/server/CMakeLists.txt b/examples/server/CMakeLists.txt index b70b525e5..5c462258b 100644 --- a/examples/server/CMakeLists.txt +++ b/examples/server/CMakeLists.txt @@ -74,6 +74,9 @@ add_executable(${TARGET} routes_sdapi.cpp routes_sdcpp.cpp ) +if(APPLE) + sd_set_macos_rpaths(${TARGET}) +endif() if(HAVE_FRONTEND_BUILD) add_dependencies(${TARGET} ${TARGET}_frontend)