]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: always create static lib librados_a
authorKefu Chai <kchai@redhat.com>
Thu, 20 Oct 2016 07:21:19 +0000 (15:21 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 20 Oct 2016 08:54:10 +0000 (16:54 +0800)
so tests referencing internal symbols can use librados_a instead of
librados to avoid violating ODR (one definition rule).

Fixes: http://tracker.ceph.com/issues/17260
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/librados/CMakeLists.txt

index 6d950a6d242206f511bd48d1ffb9055d3defd740..4ce8a92c040cff17cd2ca958150dcfe234e138d6 100644 (file)
@@ -4,18 +4,24 @@ add_library(librados_objs OBJECT
   RadosClient.cc)
 add_library(librados_api_obj OBJECT
   librados.cc)
-add_library(librados ${CEPH_SHARED}
+add_library(rados_a STATIC
   $<TARGET_OBJECTS:librados_api_obj>
   $<TARGET_OBJECTS:librados_objs>
   $<TARGET_OBJECTS:common_buffer_obj>)
-add_dependencies(librados osdc)
+target_link_libraries(rados_a osdc common cls_lock_client
+    ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS})
 if(WITH_LTTNG)
   add_dependencies(librados_api_obj librados-tp)
 endif()
-# LINK_PRIVATE instead of PRIVATE is used to backward compatibility with cmake 2.8.11
-target_link_libraries(librados LINK_PRIVATE osdc common cls_lock_client
-  ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS})
 if(ENABLE_SHARED)
+  add_library(librados ${CEPH_SHARED}
+    $<TARGET_OBJECTS:librados_api_obj>
+    $<TARGET_OBJECTS:librados_objs>
+    $<TARGET_OBJECTS:common_buffer_obj>)
+  add_dependencies(librados osdc)
+  # LINK_PRIVATE instead of PRIVATE is used to backward compatibility with cmake 2.8.11
+  target_link_libraries(librados LINK_PRIVATE osdc common cls_lock_client
+    ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS})
   set_target_properties(librados PROPERTIES
     OUTPUT_NAME rados
     VERSION 2.0.0
@@ -25,5 +31,7 @@ if(ENABLE_SHARED)
     #  VISIBILITY_INLINES_HIDDEN ON
     COMPILE_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden"
     LINK_FLAGS "-Wl,--exclude-libs,ALL")
+else(ENABLE_SHARED)
+  add_library(librados ALIAS rados_a)
 endif(ENABLE_SHARED)
 install(TARGETS librados DESTINATION ${CMAKE_INSTALL_LIBDIR})