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,6 +7,7 @@ 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 libraries" ON )
10
11
option (USE_GNUTLS "Use GnuTLS instead of OpenSSL" OFF )
11
12
option (USE_MBEDTLS "Use Mbed TLS instead of OpenSSL" OFF )
12
13
option (USE_NICE "Use libnice instead of libjuice" OFF )
@@ -49,7 +50,6 @@ endif()
49
50
50
51
list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} /cmake/Modules)
51
52
set (CMAKE_POSITION_INDEPENDENT_CODE ON )
52
- set (BUILD_SHARED_LIBS OFF ) # to force usrsctp to be built static
53
53
54
54
if (WIN32 )
55
55
add_definitions (-DWIN32_LEAN_AND_MEAN)
@@ -254,11 +254,24 @@ else()
254
254
option (sctp_inet6 OFF )
255
255
option (sctp_werror OFF )
256
256
set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
257
+ set (OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} )
258
+ set (BUILD_SHARED_LIBS OFF ) # to force usrsctp to be built static
257
259
add_subdirectory (deps/usrsctp EXCLUDE_FROM_ALL )
260
+ set (BUILD_SHARED_LIBS ${OLD_BUILD_SHARED_LIBS} )
258
261
if (MSYS OR MINGW)
259
262
target_compile_definitions (usrsctp PUBLIC -DSCTP_STDINT_INCLUDE=<stdint.h>)
260
263
endif ()
261
264
add_library (Usrsctp::Usrsctp ALIAS usrsctp)
265
+ if (NOT BUILD_SHARED_LIBS )
266
+ # usrsctp lacks an export set
267
+ set_target_properties (usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "" )
268
+ install (TARGETS usrsctp EXPORT UsrsctpTargets)
269
+ install (EXPORT UsrsctpTargets
270
+ FILE UsrsctpTargets.cmake
271
+ NAMESPACE Usrsctp::
272
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/usrsctp
273
+ EXCLUDE_FROM_ALL )
274
+ endif ()
262
275
endif ()
263
276
264
277
if (RTC_UPDATE_VERSION_HEADER)
@@ -268,7 +281,7 @@ if(RTC_UPDATE_VERSION_HEADER)
268
281
)
269
282
endif ()
270
283
271
- add_library (datachannel SHARED
284
+ add_library (datachannel
272
285
${LIBDATACHANNEL_SOURCES}
273
286
${LIBDATACHANNEL_HEADERS}
274
287
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -301,18 +314,24 @@ target_compile_definitions(datachannel-static PUBLIC RTC_STATIC)
301
314
target_include_directories (datachannel PUBLIC
302
315
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
303
316
$<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)
317
+ target_include_directories (datachannel PRIVATE
318
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
319
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
320
+ target_link_libraries (datachannel PRIVATE
321
+ Threads::Threads
322
+ Usrsctp::Usrsctp
323
+ $<BUILD_INTERFACE:plog::plog>)
308
324
309
325
target_include_directories (datachannel-static PUBLIC
310
326
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
311
327
$<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)
328
+ target_include_directories (datachannel-static PRIVATE
329
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
330
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
331
+ target_link_libraries (datachannel-static PRIVATE
332
+ Threads::Threads
333
+ Usrsctp::Usrsctp
334
+ $<BUILD_INTERFACE:plog::plog>)
316
335
317
336
if (WIN32 )
318
337
target_link_libraries (datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +368,7 @@ else()
349
368
else ()
350
369
if (NOT TARGET srtp2)
351
370
add_subdirectory (deps/libsrtp EXCLUDE_FROM_ALL )
371
+ install (TARGETS srtp2)
352
372
endif ()
353
373
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354
374
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -369,22 +389,22 @@ if (USE_GNUTLS)
369
389
endif ()
370
390
target_compile_definitions (datachannel PRIVATE USE_GNUTLS=1)
371
391
target_compile_definitions (datachannel-static PRIVATE USE_GNUTLS=1)
372
- target_link_libraries (datachannel PRIVATE GnuTLS::GnuTLS)
373
- target_link_libraries (datachannel-static PRIVATE GnuTLS::GnuTLS)
392
+ target_link_libraries (datachannel PUBLIC GnuTLS::GnuTLS)
393
+ target_link_libraries (datachannel-static PUBLIC GnuTLS::GnuTLS)
374
394
if (NOT NO_WEBSOCKET)
375
395
# Needed for SHA1, it should be present as GnuTLS cryptography backend
376
396
find_package (Nettle REQUIRED)
377
- target_link_libraries (datachannel PRIVATE Nettle::Nettle)
378
- target_link_libraries (datachannel-static PRIVATE Nettle::Nettle)
397
+ target_link_libraries (datachannel PUBLIC Nettle::Nettle)
398
+ target_link_libraries (datachannel-static PUBLIC Nettle::Nettle)
379
399
endif ()
380
400
elseif (USE_MBEDTLS)
381
401
if (NOT TARGET MbedTLS::MbedTLS)
382
402
find_package (MbedTLS 3 REQUIRED)
383
403
endif ()
384
404
target_compile_definitions (datachannel PRIVATE USE_MBEDTLS=1)
385
405
target_compile_definitions (datachannel-static PRIVATE USE_MBEDTLS=1)
386
- target_link_libraries (datachannel PRIVATE MbedTLS::MbedTLS)
387
- target_link_libraries (datachannel-static PRIVATE MbedTLS::MbedTLS)
406
+ target_link_libraries (datachannel PUBLIC MbedTLS::MbedTLS)
407
+ target_link_libraries (datachannel-static PUBLIC MbedTLS::MbedTLS)
388
408
else ()
389
409
if (APPLE )
390
410
# This is a bug in CMake that causes it to prefer the system version over
@@ -405,8 +425,8 @@ else()
405
425
find_package (OpenSSL REQUIRED)
406
426
target_compile_definitions (datachannel PRIVATE USE_GNUTLS=0)
407
427
target_compile_definitions (datachannel-static PRIVATE USE_GNUTLS=0)
408
- target_link_libraries (datachannel PRIVATE OpenSSL::SSL)
409
- target_link_libraries (datachannel-static PRIVATE OpenSSL::SSL)
428
+ target_link_libraries (datachannel PUBLIC OpenSSL::SSL)
429
+ target_link_libraries (datachannel-static PUBLIC OpenSSL::SSL)
410
430
endif ()
411
431
412
432
if (USE_NICE)
@@ -426,9 +446,10 @@ else()
426
446
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuice)
427
447
else ()
428
448
add_subdirectory (deps/libjuice EXCLUDE_FROM_ALL )
449
+ install (TARGETS juice)
429
450
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430
451
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431
- target_link_libraries (datachannel PRIVATE LibJuice::LibJuiceStatic )
452
+ target_link_libraries (datachannel PRIVATE LibJuice::LibJuice )
432
453
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433
454
endif ()
434
455
endif ()
0 commit comments