From c1790754d31bec0731ed5fddc9d5b9ff22ee19cd Mon Sep 17 00:00:00 2001 From: Cyberhan123 <38837039+Cyberhan123@users.noreply.github.com> Date: Mon, 29 Jun 2026 00:48:57 +0800 Subject: [PATCH] feat: enhanced third-party integrations (#1632) * feat: add installation support and configuration files for stable-diffusion * fix: correct public header setting and update version variable in pkg-config * fix stable-diffusion install package metadata --------- Co-authored-by: leejet --- CMakeLists.txt | 60 ++++++++++++++++++++++++-- cmake/stable-diffusion-config.cmake.in | 37 ++++++++++++++++ cmake/stable-diffusion.pc.in | 11 +++++ examples/cli/CMakeLists.txt | 2 +- 4 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 cmake/stable-diffusion-config.cmake.in create mode 100644 cmake/stable-diffusion.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index b16a33e0..f15fdbf2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -331,7 +331,8 @@ endif() add_subdirectory(thirdparty) -target_link_libraries(${SD_LIB} PUBLIC ggml zip) +target_sources(${SD_LIB} PRIVATE $) +target_link_libraries(${SD_LIB} PUBLIC ggml) target_include_directories(${SD_LIB} PUBLIC . src include) target_include_directories(${SD_LIB} PRIVATE src/core) target_include_directories(${SD_LIB} PUBLIC . thirdparty) @@ -342,7 +343,58 @@ if (SD_BUILD_EXAMPLES) add_subdirectory(examples) endif() -set(SD_PUBLIC_HEADERS include/stable-diffusion.h) -set_target_properties(${SD_LIB} PROPERTIES PUBLIC_HEADER "${SD_PUBLIC_HEADERS}") -install(TARGETS ${SD_LIB} LIBRARY PUBLIC_HEADER) + +# +# install +# + +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +set(SD_INSTALL_VERSION "${SDCPP_BUILD_VERSION}") +set(SD_INSTALL_COMMIT "${SDCPP_BUILD_COMMIT}") +set(SD_SHARED_LIB ${SD_BUILD_SHARED_LIBS}) + +set(SD_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files") +set(SD_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files") +set(SD_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files") + +set(SD_PUBLIC_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/include/stable-diffusion.h) + +set_target_properties(${SD_LIB} + PROPERTIES + PUBLIC_HEADER "${SD_PUBLIC_HEADERS}") + + +install(TARGETS ${SD_LIB} + ARCHIVE + LIBRARY + RUNTIME + PUBLIC_HEADER) + + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/stable-diffusion-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stable-diffusion + PATH_VARS SD_INCLUDE_INSTALL_DIR + SD_LIB_INSTALL_DIR + SD_BIN_INSTALL_DIR ) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion-version.cmake + VERSION ${SD_INSTALL_VERSION} + COMPATIBILITY SameMajorVersion) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion-version.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/stable-diffusion) + +configure_file(cmake/stable-diffusion.pc.in + "${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion.pc" + @ONLY) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/stable-diffusion.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) diff --git a/cmake/stable-diffusion-config.cmake.in b/cmake/stable-diffusion-config.cmake.in new file mode 100644 index 00000000..c3d7433c --- /dev/null +++ b/cmake/stable-diffusion-config.cmake.in @@ -0,0 +1,37 @@ +set(SD_VERSION "@SD_INSTALL_VERSION@") +set(SD_BUILD_COMMIT "@SD_INSTALL_COMMIT@") +set(SD_SHARED_LIB @SD_SHARED_LIB@) + +@PACKAGE_INIT@ + +set_and_check(SD_INCLUDE_DIR "@PACKAGE_SD_INCLUDE_INSTALL_DIR@") +set_and_check(SD_LIB_DIR "@PACKAGE_SD_LIB_INSTALL_DIR@") +set(SD_BIN_DIR "@PACKAGE_SD_BIN_INSTALL_DIR@") + +include(CMakeFindDependencyMacro) +find_dependency(ggml REQUIRED HINTS "${SD_LIB_DIR}/cmake") + +if(NOT TARGET stable-diffusion) + find_library(stable-diffusion_LIBRARY stable-diffusion + REQUIRED + HINTS "${SD_LIB_DIR}" + NO_CMAKE_FIND_ROOT_PATH + ) + + add_library(stable-diffusion UNKNOWN IMPORTED) + set_target_properties(stable-diffusion + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${SD_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES "ggml::ggml" + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${stable-diffusion_LIBRARY}" + INTERFACE_COMPILE_FEATURES "c_std_11;cxx_std_17" + POSITION_INDEPENDENT_CODE ON) + + if(SD_SHARED_LIB) + target_compile_definitions(stable-diffusion + INTERFACE SD_BUILD_SHARED_LIB) + endif() +endif() + +check_required_components(stable-diffusion) diff --git a/cmake/stable-diffusion.pc.in b/cmake/stable-diffusion.pc.in new file mode 100644 index 00000000..dad257b9 --- /dev/null +++ b/cmake/stable-diffusion.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: stable-diffusion +Description: Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ +Version: @SDCPP_BUILD_VERSION@ +Libs: -L${libdir} -lstable-diffusion +Libs.private: -lggml -lggml-base +Cflags: -I${includedir} diff --git a/examples/cli/CMakeLists.txt b/examples/cli/CMakeLists.txt index 6b1266cf..a97cb1ca 100644 --- a/examples/cli/CMakeLists.txt +++ b/examples/cli/CMakeLists.txt @@ -15,7 +15,7 @@ target_include_directories(${TARGET} PRIVATE "${PROJECT_SOURCE_DIR}/src" ) install(TARGETS ${TARGET} RUNTIME) -target_link_libraries(${TARGET} PRIVATE stable-diffusion zip ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE stable-diffusion ${CMAKE_THREAD_LIBS_INIT}) if(SD_WEBP) target_compile_definitions(${TARGET} PRIVATE SD_USE_WEBP) target_link_libraries(${TARGET} PRIVATE webp libwebpmux)