From 75c5e5cc26ae202bc0560fdfc38a3ecce1188ad7 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 3 Jan 2018 21:43:51 +0800 Subject: [PATCH] cmake: pass static linkflags to the linker who links libcommon Signed-off-by: Kefu Chai --- src/CMakeLists.txt | 21 ++++++++++++++++----- src/librados/CMakeLists.txt | 12 ++++++++---- src/libradosstriper/CMakeLists.txt | 7 ++++++- src/librbd/CMakeLists.txt | 4 ++++ 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5485929b41abc..3c5d70867b179 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -682,7 +682,14 @@ if(WITH_DPDK) endif(WITH_DPDK) add_library(common STATIC ${ceph_common_objs}) -target_link_libraries(common ${ceph_common_deps}) +target_link_libraries(common + PRIVATE ${ceph_common_deps}) +if(WITH_STATIC_LIBSTDCXX) + # the apps linking against libcommon are daemons also written in C++, so we + # need to link them against libstdc++. + target_link_libraries(common + INTERFACE "-static-libstdc++ -static-libgcc") +endif() add_library(ceph-common SHARED ${ceph_common_objs}) target_link_libraries(ceph-common ${ceph_common_deps}) @@ -691,10 +698,10 @@ set_target_properties(ceph-common PROPERTIES SOVERSION 0 INSTALL_RPATH "") if(WITH_STATIC_LIBSTDCXX) + # link libstdc++ into ceph-common to avoid including libstdc++ in every apps, + # to reduce the size of the app linking against ceph-common. set_target_properties(ceph-common PROPERTIES LINK_FLAGS "-static-libstdc++ -static-libgcc") - set_target_properties(common PROPERTIES - LINK_FLAGS "-static-libstdc++ -static-libgcc") endif() install(TARGETS ceph-common DESTINATION ${CMAKE_INSTALL_PKGLIBDIR}) @@ -978,6 +985,10 @@ if(WITH_LIBCEPHFS) add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs}) target_link_libraries(cephfs PRIVATE client ceph-common ${CRYPTO_LIBS} ${EXTRALIBS}) + if(WITH_STATIC_LIBSTDCXX) + target_link_libraries(cephfs + INTERFACE "-static-libstdc++ -static-libgcc") + endif() if(ENABLE_SHARED) set_target_properties(cephfs PROPERTIES OUTPUT_NAME cephfs @@ -998,7 +1009,7 @@ if(WITH_LIBCEPHFS) ceph_syn.cc client/SyntheticClient.cc) add_executable(ceph-syn ${ceph_syn_srcs}) - target_link_libraries(ceph-syn client global-static common) + target_link_libraries(ceph-syn client global-static ceph-common) set(mount_ceph_srcs mount/mount.ceph.c) @@ -1019,7 +1030,7 @@ if(WITH_FUSE) client/fuse_ll.cc) add_executable(ceph-fuse ${ceph_fuse_srcs}) target_link_libraries(ceph-fuse ${ALLOC_LIBS} ${FUSE_LIBRARIES} - client common global-static) + client ceph-common global-static) set_target_properties(ceph-fuse PROPERTIES COMPILE_FLAGS "-I${FUSE_INCLUDE_DIRS}") install(TARGETS ceph-fuse DESTINATION bin) install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) diff --git a/src/librados/CMakeLists.txt b/src/librados/CMakeLists.txt index 7a11903b08c8f..ee0ca49f5d48f 100644 --- a/src/librados/CMakeLists.txt +++ b/src/librados/CMakeLists.txt @@ -12,8 +12,6 @@ if(ENABLE_SHARED) $ $ $) - target_link_libraries(librados PRIVATE osdc ceph-common cls_lock_client - ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS}) set_target_properties(librados PROPERTIES OUTPUT_NAME rados VERSION 2.0.0 @@ -28,9 +26,15 @@ else(ENABLE_SHARED) add_library(librados STATIC $ $) - target_link_libraries(librados osdc ceph-common cls_lock_client - ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS}) endif(ENABLE_SHARED) +target_link_libraries(librados PRIVATE + osdc ceph-common cls_lock_client + ${BLKID_LIBRARIES} ${CRYPTO_LIBS} ${EXTRALIBS}) +if(WITH_STATIC_LIBSTDCXX) + target_link_libraries(librados + INTERFACE "-static-libstdc++ -static-libgcc") +endif() +target_link_libraries(librados ${rados_libs}) install(TARGETS librados DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(WITH_EMBEDDED) diff --git a/src/libradosstriper/CMakeLists.txt b/src/libradosstriper/CMakeLists.txt index 5372a6d115dec..e447dd3aeccd4 100644 --- a/src/libradosstriper/CMakeLists.txt +++ b/src/libradosstriper/CMakeLists.txt @@ -5,7 +5,12 @@ set(libradosstriper_srcs add_library(radosstriper ${CEPH_SHARED} ${libradosstriper_srcs} $) -target_link_libraries(radosstriper librados cls_lock_client osdc ceph-common pthread ${CRYPTO_LIBS} ${EXTRALIBS}) +target_link_libraries(radosstriper + PRIVATE librados cls_lock_client osdc ceph-common pthread ${CRYPTO_LIBS} ${EXTRALIBS}) +if(WITH_STATIC_LIBSTDCXX) + target_link_libraries(radosstriper + INTERFACE "-static-libstdc++ -static-libgcc") +endif() set_target_properties(radosstriper PROPERTIES OUPUT_NAME radosstriper VERSION 1.0.0 diff --git a/src/librbd/CMakeLists.txt b/src/librbd/CMakeLists.txt index 4d61cd2ef87c5..72c7f4b11148d 100644 --- a/src/librbd/CMakeLists.txt +++ b/src/librbd/CMakeLists.txt @@ -147,6 +147,10 @@ if(HAVE_UDEV) target_link_libraries(librbd PRIVATE udev) endif() +if(WITH_STATIC_LIBSTDCXX) + target_link_libraries(librbd INTERFACE + "-static-libstdc++ -static-libgcc") +endif() if(ENABLE_SHARED) set_target_properties(librbd PROPERTIES OUTPUT_NAME rbd -- 2.39.5