Procházet zdrojové kódy

feat: shared library support (BUILD_SHARED_LIBS)

Standalone builds produce libsmartbotic-db-client.so with soversion 1
and proto objects bundled in. Server and CLI link the shared lib.

Submodule builds produce static .a as before — no changes needed in
consumer projects.
fszontagh před 3 měsíci
rodič
revize
7764a1b233
4 změnil soubory, kde provedl 42 přidání a 8 odebrání
  1. 3 0
      CMakeLists.txt
  2. 28 3
      client/CMakeLists.txt
  3. 6 4
      proto/CMakeLists.txt
  4. 5 1
      service/CMakeLists.txt

+ 3 - 0
CMakeLists.txt

@@ -17,6 +17,9 @@ else()
     set(SMARTBOTIC_DB_STANDALONE OFF)
 endif()
 
+# Shared libraries for standalone (packaging), static for embedded (submodule)
+option(BUILD_SHARED_LIBS "Build shared libraries" ${SMARTBOTIC_DB_STANDALONE})
+
 # C++ settings
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)

+ 28 - 3
client/CMakeLists.txt

@@ -1,8 +1,19 @@
 # Smartbotic Database Client Library
 
-add_library(smartbotic-db-client STATIC
-    src/client.cpp
-)
+if(BUILD_SHARED_LIBS)
+    add_library(smartbotic-db-client SHARED
+        src/client.cpp
+        $<TARGET_OBJECTS:smartbotic_db_proto>
+    )
+    set_target_properties(smartbotic-db-client PROPERTIES
+        VERSION ${SMARTBOTIC_DB_VERSION}
+        SOVERSION 1
+    )
+else()
+    add_library(smartbotic-db-client STATIC
+        src/client.cpp
+    )
+endif()
 
 target_include_directories(smartbotic-db-client PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -29,3 +40,17 @@ endif()
 
 # Export alias
 add_library(smartbotic::db-client ALIAS smartbotic-db-client)
+
+# Installation (standalone/packaging only)
+if(SMARTBOTIC_DB_STANDALONE)
+    include(GNUInstallDirs)
+
+    install(TARGETS smartbotic-db-client
+        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    )
+
+    install(DIRECTORY include/smartbotic
+        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+    )
+endif()

+ 6 - 4
proto/CMakeLists.txt

@@ -40,10 +40,12 @@ add_custom_command(
 )
 
 # Create proto library
-add_library(smartbotic_db_proto STATIC
-    ${PROTO_SRCS}
-    ${GRPC_SRCS}
-)
+if(BUILD_SHARED_LIBS)
+    add_library(smartbotic_db_proto OBJECT ${PROTO_SRCS} ${GRPC_SRCS})
+    set_target_properties(smartbotic_db_proto PROPERTIES POSITION_INDEPENDENT_CODE ON)
+else()
+    add_library(smartbotic_db_proto STATIC ${PROTO_SRCS} ${GRPC_SRCS})
+endif()
 
 target_include_directories(smartbotic_db_proto PUBLIC
     $<BUILD_INTERFACE:${PROTO_OUTPUT_DIR}>

+ 5 - 1
service/CMakeLists.txt

@@ -36,8 +36,12 @@ target_include_directories(smartbotic-database PRIVATE
 )
 
 # Link dependencies
+if(BUILD_SHARED_LIBS)
+    target_link_libraries(smartbotic-database PRIVATE smartbotic-db-client)
+else()
+    target_link_libraries(smartbotic-database PRIVATE smartbotic_db_proto)
+endif()
 target_link_libraries(smartbotic-database PRIVATE
-    smartbotic_db_proto
     OpenSSL::SSL
     OpenSSL::Crypto
 )