瀏覽代碼

cmake: Link with resolve and dlopen when nessecary

- FreeBSD and Dragonfly are include in libc
- Linux and Mac need explicit linkage
Xenofon Karamanos 7 月之前
父節點
當前提交
97cea8b7ff
共有 5 個文件被更改,包括 21 次插入15 次删除
  1. 15 3
      cmake/defs.cmake
  2. 1 0
      cmake/os-specific/darwin.cmake
  3. 4 0
      cmake/os-specific/linux.cmake
  4. 1 9
      src/CMakeLists.txt
  5. 0 3
      utils/kamcmd/CMakeLists.txt

+ 15 - 3
cmake/defs.cmake

@@ -5,6 +5,15 @@
 
 
 add_library(common INTERFACE)
 add_library(common INTERFACE)
 
 
+# This interface is populated by common and some extra module specific flags
+# See end of file
+add_library(common_modules INTERFACE)
+
+# This interface is populated by common compiler flags and some os specific
+# flags. See each os specific file for more details.
+add_library(common_utils INTERFACE)
+
+#
 set(OS ${CMAKE_SYSTEM_NAME})
 set(OS ${CMAKE_SYSTEM_NAME})
 message(STATUS "OS: ${OS}")
 message(STATUS "OS: ${OS}")
 
 
@@ -336,11 +345,14 @@ target_compile_definitions(
             $<$<BOOL:${STATISTICS}>:STATISTICS>)
             $<$<BOOL:${STATISTICS}>:STATISTICS>)
 target_link_libraries(common INTERFACE common_compiler_flags)
 target_link_libraries(common INTERFACE common_compiler_flags)
 
 
-# -----------------------
-add_library(common_modules INTERFACE)
+# ----------------------
+# Common modules
+# ---------------------
 target_compile_options(common_modules INTERFACE -fPIC)
 target_compile_options(common_modules INTERFACE -fPIC)
 # TODO: Do we need all the option from common as well?
 # TODO: Do we need all the option from common as well?
 target_link_libraries(common_modules INTERFACE common)
 target_link_libraries(common_modules INTERFACE common)
 
 
-add_library(common_utils INTERFACE)
+# ----------------------
+# Common utils
+# ---------------------
 target_link_libraries(common_utils INTERFACE common_compiler_flags)
 target_link_libraries(common_utils INTERFACE common_compiler_flags)

+ 1 - 0
cmake/os-specific/darwin.cmake

@@ -19,6 +19,7 @@ target_compile_definitions(
             HAVE_IP_MREQN)
             HAVE_IP_MREQN)
 
 
 target_link_libraries(common INTERFACE resolv)
 target_link_libraries(common INTERFACE resolv)
+target_link_libraries(common_utils INTERFACE resolv)
 
 
 if(NOT ${USE_FAST_LOCK})
 if(NOT ${USE_FAST_LOCK})
   target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX USE_SYSV_SEM)
   target_compile_definitions(common INTERFACE USE_PTHREAD_MUTEX USE_SYSV_SEM)

+ 4 - 0
cmake/os-specific/linux.cmake

@@ -1,5 +1,6 @@
 # Linux specific flags
 # Linux specific flags
 message(STATUS "Configuring for Linux")
 message(STATUS "Configuring for Linux")
+
 target_compile_definitions(
 target_compile_definitions(
   common
   common
   INTERFACE HAVE_GETHOSTBYNAME2
   INTERFACE HAVE_GETHOSTBYNAME2
@@ -12,6 +13,9 @@ target_compile_definitions(
             HAVE_SCHED_SETSCHEDULER
             HAVE_SCHED_SETSCHEDULER
             HAVE_IP_MREQN)
             HAVE_IP_MREQN)
 
 
+target_link_libraries(common INTERFACE ${CMAKE_DL_LIBS} resolv)
+target_link_libraries(common_utils INTERFACE resolv)
+
 if(${RAW_SOCKS})
 if(${RAW_SOCKS})
   target_compile_definitions(common INTERFACE USE_RAW_SOCKS)
   target_compile_definitions(common INTERFACE USE_RAW_SOCKS)
 endif()
 endif()

+ 1 - 9
src/CMakeLists.txt

@@ -113,15 +113,7 @@ target_include_directories(kamailio PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/core)
 # )
 # )
 # message(STATUS "kamailio target sources are: ${kamailio_SRC_PROPERTY}")
 # message(STATUS "kamailio target sources are: ${kamailio_SRC_PROPERTY}")
 
 
-target_link_libraries(
-  kamailio
-  PUBLIC common
-         m
-         Threads::Threads # Pthread library
-         # Use of ${CMAKE_DL_LIBS}
-         ${CMAKE_DL_LIBS} # dl -- dlopen and more
-         resolv # resolv
-)
+target_link_libraries(kamailio PUBLIC common m Threads::Threads)
 
 
 # Add the MODS_DIR definition required by main.c ---
 # Add the MODS_DIR definition required by main.c ---
 target_compile_definitions(
 target_compile_definitions(

+ 0 - 3
utils/kamcmd/CMakeLists.txt

@@ -27,9 +27,6 @@ include(${CMAKE_SOURCE_DIR}/cmake/utils.cmake)
 
 
 target_sources(${NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/kamcmd.c
 target_sources(${NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/kamcmd.c
                                ${CMAKE_CURRENT_SOURCE_DIR}/parse_listen_id.c)
                                ${CMAKE_CURRENT_SOURCE_DIR}/parse_listen_id.c)
-# target_include_directories(${NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
-# target_link_libraries(${NAME} PRIVATE common)
-target_link_libraries(${NAME} PRIVATE resolv)
 target_link_libraries(${NAME} PRIVATE common_utils)
 target_link_libraries(${NAME} PRIVATE common_utils)
 
 
 target_compile_definitions(
 target_compile_definitions(