From d661841789f350674de72875775b01b128364ee8 Mon Sep 17 00:00:00 2001 From: Cyberhan123 <255542417@qq.com> Date: Thu, 11 Jun 2026 11:19:06 +0800 Subject: [PATCH 1/2] feat: add installation support and configuration files for stable-diffusion --- CMakeLists.txt | 43 ++++++++++++++++++++++++++ cmake/stable-diffusion-config.cmake.in | 30 ++++++++++++++++++ cmake/stable-diffusion.pc.in | 10 ++++++ 3 files changed, 83 insertions(+) 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 150ecde1c..1c09c0d66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -339,4 +339,47 @@ endif() set(SD_PUBLIC_HEADERS include/stable-diffusion.h) set_target_properties(${SD_LIB} PROPERTIES PUBLIC_HEADER "${SD_PUBLIC_HEADERS}") +# +# install +# + +include(CMakePackageConfigHelpers) + +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} LIBRARY 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 ${SDCPP_BUILD_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) \ No newline at end of file diff --git a/cmake/stable-diffusion-config.cmake.in b/cmake/stable-diffusion-config.cmake.in new file mode 100644 index 000000000..7b224924e --- /dev/null +++ b/cmake/stable-diffusion-config.cmake.in @@ -0,0 +1,30 @@ +set(SD_VERSION @SD_INSTALL_VERSION@) +set(SD_BUILD_COMMIT @SD_BUILD_COMMIT@) +set(SD_BUILD_NUMBER @SD_BUILD_NUMBER@) +set(SD_SHARED_LIB @BUILD_SHARED_LIBS@) + +@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_and_check(SD_BIN_DIR "@PACKAGE_SD_BIN_INSTALL_DIR@") + +find_package(ggml REQUIRED HINTS ${SD_LIB_DIR}/cmake) + +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;ggml::ggml-base;" + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${stable-diffusion_LIBRARY}" + INTERFACE_COMPILE_FEATURES "c_std_11;cxx_std_17" + POSITION_INDEPENDENT_CODE ON) + +check_required_components(Stable-diffusion) \ No newline at end of file diff --git a/cmake/stable-diffusion.pc.in b/cmake/stable-diffusion.pc.in new file mode 100644 index 000000000..f0a5ebc7d --- /dev/null +++ b/cmake/stable-diffusion.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_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: @SD_INSTALL_VERSION@ +Libs: -L${libdir} -lggml -lggml-base -lstable-diffusion +Cflags: -I${includedir} \ No newline at end of file From 04ed1ea9740ba56b0d4d36c29671cb2eeead4424 Mon Sep 17 00:00:00 2001 From: Cyberhan123 <255542417@qq.com> Date: Thu, 11 Jun 2026 11:38:09 +0800 Subject: [PATCH 2/2] fix: correct public header setting and update version variable in pkg-config --- CMakeLists.txt | 3 +-- cmake/stable-diffusion-config.cmake.in | 2 +- cmake/stable-diffusion.pc.in | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c09c0d66..044000f22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -336,8 +336,7 @@ 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 diff --git a/cmake/stable-diffusion-config.cmake.in b/cmake/stable-diffusion-config.cmake.in index 7b224924e..97d03f04a 100644 --- a/cmake/stable-diffusion-config.cmake.in +++ b/cmake/stable-diffusion-config.cmake.in @@ -27,4 +27,4 @@ set_target_properties(stable-diffusion INTERFACE_COMPILE_FEATURES "c_std_11;cxx_std_17" POSITION_INDEPENDENT_CODE ON) -check_required_components(Stable-diffusion) \ No newline at end of file +check_required_components(stable-diffusion) \ No newline at end of file diff --git a/cmake/stable-diffusion.pc.in b/cmake/stable-diffusion.pc.in index f0a5ebc7d..f9045b5d6 100644 --- a/cmake/stable-diffusion.pc.in +++ b/cmake/stable-diffusion.pc.in @@ -5,6 +5,6 @@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ Name: stable-diffusion Description: Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ -Version: @SD_INSTALL_VERSION@ +Version: @SDCPP_BUILD_VERSION@ Libs: -L${libdir} -lggml -lggml-base -lstable-diffusion Cflags: -I${includedir} \ No newline at end of file