1
- cmake_minimum_required (VERSION 3.7 )
1
+ cmake_minimum_required (VERSION 3.13 )
2
2
project (libdatachannel
3
3
VERSION 0.21.2
4
4
LANGUAGES CXX)
@@ -7,10 +7,12 @@ set(PROJECT_DESCRIPTION "C/C++ WebRTC network library featuring Data Channels, M
7
7
include (GNUInstallDirs)
8
8
9
9
# Options
10
+ option (BUILD_SHARED_LIBS "Build shared library" ON )
11
+ option (BUILD_SHARED_DEPS_LIBS "Build submodules as shared libraries" OFF )
10
12
option (USE_GNUTLS "Use GnuTLS instead of OpenSSL" OFF )
11
13
option (USE_MBEDTLS "Use Mbed TLS instead of OpenSSL" OFF )
12
14
option (USE_NICE "Use libnice instead of libjuice" OFF )
13
- option (PREFER_SYSTEM_LIB "Prefer system libraries over deps folder " OFF )
15
+ option (PREFER_SYSTEM_LIB "Prefer system libraries over submodules " OFF )
14
16
option (USE_SYSTEM_SRTP "Use system libSRTP" ${PREFER_SYSTEM_LIB} )
15
17
option (USE_SYSTEM_JUICE "Use system libjuice" ${PREFER_SYSTEM_LIB} )
16
18
option (USE_SYSTEM_USRSCTP "Use system libusrsctp" ${PREFER_SYSTEM_LIB} )
@@ -49,7 +51,6 @@ endif()
49
51
50
52
list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} /cmake/Modules)
51
53
set (CMAKE_POSITION_INDEPENDENT_CODE ON )
52
- set (BUILD_SHARED_LIBS OFF ) # to force usrsctp to be built static
53
54
54
55
if (WIN32 )
55
56
add_definitions (-DWIN32_LEAN_AND_MEAN)
@@ -234,41 +235,14 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
234
235
set (THREADS_PREFER_PTHREAD_FLAG TRUE )
235
236
find_package (Threads REQUIRED)
236
237
237
- if (USE_SYSTEM_PLOG)
238
- find_package (plog REQUIRED)
239
- else ()
240
- set (CMAKE_POLICY_DEFAULT_CMP0048 NEW)
241
- add_subdirectory (deps/plog EXCLUDE_FROM_ALL )
242
- endif ()
243
-
244
- if (SCTP_DEBUG)
245
- add_definitions (-DSCTP_DEBUG)
246
- endif ()
247
-
248
- if (USE_SYSTEM_USRSCTP)
249
- find_package (Usrsctp REQUIRED)
250
- else ()
251
- option (sctp_build_shared_lib OFF )
252
- option (sctp_build_programs OFF )
253
- option (sctp_inet OFF )
254
- option (sctp_inet6 OFF )
255
- option (sctp_werror OFF )
256
- set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
257
- add_subdirectory (deps/usrsctp EXCLUDE_FROM_ALL )
258
- if (MSYS OR MINGW)
259
- target_compile_definitions (usrsctp PUBLIC -DSCTP_STDINT_INCLUDE=<stdint.h>)
260
- endif ()
261
- add_library (Usrsctp::Usrsctp ALIAS usrsctp)
262
- endif ()
263
-
264
238
if (RTC_UPDATE_VERSION_HEADER)
265
239
configure_file (
266
240
${PROJECT_SOURCE_DIR} /cmake/version .h.in
267
241
${CMAKE_CURRENT_SOURCE_DIR} /include /rtc/version .h
268
242
)
269
243
endif ()
270
244
271
- add_library (datachannel SHARED
245
+ add_library (datachannel
272
246
${LIBDATACHANNEL_SOURCES}
273
247
${LIBDATACHANNEL_HEADERS}
274
248
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -278,13 +252,11 @@ set_target_properties(datachannel PROPERTIES
278
252
SOVERSION ${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR}
279
253
CXX_STANDARD 17
280
254
CXX_VISIBILITY_PRESET default)
281
-
282
255
if (APPLE )
283
256
set_target_properties (datachannel PROPERTIES
284
257
VERSION ${PROJECT_VERSION_MAJOR}
285
258
SOVERSION ${PROJECT_VERSION_MAJOR} )
286
259
endif ()
287
-
288
260
target_compile_definitions (datachannel PRIVATE RTC_EXPORTS)
289
261
290
262
add_library (datachannel-static STATIC EXCLUDE_FROM_ALL
@@ -298,21 +270,67 @@ set_target_properties(datachannel-static PROPERTIES
298
270
target_compile_definitions (datachannel-static PRIVATE RTC_EXPORTS)
299
271
target_compile_definitions (datachannel-static PUBLIC RTC_STATIC)
300
272
273
+ if (NOT BUILD_SHARED_DEPS_LIBS)
274
+ set (BUILD_SHARED_LIBS OFF )
275
+ endif ()
276
+
277
+ if (USE_SYSTEM_PLOG)
278
+ find_package (plog REQUIRED)
279
+ else ()
280
+ set (CMAKE_POLICY_DEFAULT_CMP0048 NEW)
281
+ add_subdirectory (deps/plog EXCLUDE_FROM_ALL )
282
+ endif ()
283
+
284
+ if (SCTP_DEBUG)
285
+ add_definitions (-DSCTP_DEBUG)
286
+ endif ()
287
+
288
+ if (USE_SYSTEM_USRSCTP)
289
+ find_package (Usrsctp REQUIRED)
290
+ else ()
291
+ option (sctp_build_shared_lib OFF )
292
+ option (sctp_build_programs OFF )
293
+ option (sctp_inet OFF )
294
+ option (sctp_inet6 OFF )
295
+ option (sctp_werror OFF )
296
+ set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
297
+ add_subdirectory (deps/usrsctp EXCLUDE_FROM_ALL )
298
+ if (MSYS OR MINGW)
299
+ target_compile_definitions (usrsctp PUBLIC -DSCTP_STDINT_INCLUDE=<stdint.h>)
300
+ endif ()
301
+ add_library (Usrsctp::Usrsctp ALIAS usrsctp)
302
+
303
+ # usrsctp lacks an export set
304
+ set_target_properties (usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "" )
305
+ install (TARGETS usrsctp EXPORT UsrsctpTargets)
306
+ install (EXPORT UsrsctpTargets
307
+ FILE UsrsctpTargets.cmake
308
+ NAMESPACE Usrsctp::
309
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/usrsctp
310
+ EXCLUDE_FROM_ALL )
311
+ endif ()
312
+
301
313
target_include_directories (datachannel PUBLIC
302
314
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
303
315
$<INSTALL_INTERFACE:include >)
304
- target_include_directories (datachannel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc)
305
- target_include_directories (datachannel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /src)
306
- target_link_libraries (datachannel PRIVATE Threads::Threads)
307
- target_link_libraries (datachannel PRIVATE Usrsctp::Usrsctp plog::plog)
316
+ target_include_directories (datachannel PRIVATE
317
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
318
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
319
+ target_link_libraries (datachannel PRIVATE
320
+ Threads::Threads
321
+ Usrsctp::Usrsctp
322
+ $<BUILD_INTERFACE:plog::plog>)
308
323
309
324
target_include_directories (datachannel-static PUBLIC
310
325
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
311
326
$<INSTALL_INTERFACE:include >)
312
- target_include_directories (datachannel-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc)
313
- target_include_directories (datachannel-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /src)
314
- target_link_libraries (datachannel-static PRIVATE Threads::Threads)
315
- target_link_libraries (datachannel-static PRIVATE Usrsctp::Usrsctp plog::plog)
327
+ target_include_directories (datachannel-static PRIVATE
328
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
329
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
330
+ target_link_libraries (datachannel-static PRIVATE
331
+ Threads::Threads
332
+ Usrsctp::Usrsctp
333
+ $<BUILD_INTERFACE:plog::plog>)
316
334
317
335
if (WIN32 )
318
336
target_link_libraries (datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +367,7 @@ else()
349
367
else ()
350
368
if (NOT TARGET srtp2)
351
369
add_subdirectory (deps/libsrtp EXCLUDE_FROM_ALL )
370
+ install (TARGETS srtp2)
352
371
endif ()
353
372
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354
373
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -426,9 +445,10 @@ else()
426
445
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuice)
427
446
else ()
428
447
add_subdirectory (deps/libjuice EXCLUDE_FROM_ALL )
448
+ install (TARGETS juice)
429
449
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430
450
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431
- target_link_libraries (datachannel PRIVATE LibJuice::LibJuiceStatic )
451
+ target_link_libraries (datachannel PRIVATE LibJuice::LibJuice )
432
452
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433
453
endif ()
434
454
endif ()
0 commit comments