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)
@@ -230,45 +231,14 @@ set(BENCHMARK_UWP_RESOURCES
230
231
${CMAKE_CURRENT_SOURCE_DIR} /test /uwp/benchmark/Windows_TemporaryKey.pfx
231
232
)
232
233
233
- set (CMAKE_THREAD_PREFER_PTHREAD TRUE )
234
- set (THREADS_PREFER_PTHREAD_FLAG TRUE )
235
- find_package (Threads REQUIRED)
236
-
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
234
if (RTC_UPDATE_VERSION_HEADER)
265
235
configure_file (
266
236
${PROJECT_SOURCE_DIR} /cmake/version .h.in
267
237
${CMAKE_CURRENT_SOURCE_DIR} /include /rtc/version .h
268
238
)
269
239
endif ()
270
240
271
- add_library (datachannel SHARED
241
+ add_library (datachannel
272
242
${LIBDATACHANNEL_SOURCES}
273
243
${LIBDATACHANNEL_HEADERS}
274
244
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -278,13 +248,11 @@ set_target_properties(datachannel PROPERTIES
278
248
SOVERSION ${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR}
279
249
CXX_STANDARD 17
280
250
CXX_VISIBILITY_PRESET default)
281
-
282
251
if (APPLE )
283
252
set_target_properties (datachannel PROPERTIES
284
253
VERSION ${PROJECT_VERSION_MAJOR}
285
254
SOVERSION ${PROJECT_VERSION_MAJOR} )
286
255
endif ()
287
-
288
256
target_compile_definitions (datachannel PRIVATE RTC_EXPORTS)
289
257
290
258
add_library (datachannel-static STATIC EXCLUDE_FROM_ALL
@@ -298,21 +266,76 @@ set_target_properties(datachannel-static PROPERTIES
298
266
target_compile_definitions (datachannel-static PRIVATE RTC_EXPORTS)
299
267
target_compile_definitions (datachannel-static PUBLIC RTC_STATIC)
300
268
269
+ if (NOT BUILD_SHARED_DEPS_LIBS)
270
+ set (BUILD_SHARED_LIBS OFF )
271
+ endif ()
272
+
273
+ set (CMAKE_THREAD_PREFER_PTHREAD TRUE )
274
+ set (THREADS_PREFER_PTHREAD_FLAG TRUE )
275
+ find_package (Threads REQUIRED)
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
+ install (TARGETS usrsctp EXPORT UsrsctpTargets)
305
+ install (EXPORT UsrsctpTargets
306
+ FILE UsrsctpTargets.cmake
307
+ NAMESPACE Usrsctp::
308
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/usrsctp
309
+ EXCLUDE_FROM_ALL )
310
+
311
+ # Fix directories
312
+ set_target_properties (usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "" )
313
+ target_include_directories (usrsctp INTERFACE
314
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /deps/usrsctp/usrsctplib>
315
+ $<INSTALL_INTERFACE:>)
316
+ endif ()
317
+
301
318
target_include_directories (datachannel PUBLIC
302
319
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
303
320
$<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)
321
+ target_include_directories (datachannel PRIVATE
322
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
323
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
324
+ target_link_libraries (datachannel PRIVATE
325
+ Threads::Threads
326
+ Usrsctp::Usrsctp
327
+ $<BUILD_INTERFACE:plog::plog>)
308
328
309
329
target_include_directories (datachannel-static PUBLIC
310
330
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
311
331
$<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)
332
+ target_include_directories (datachannel-static PRIVATE
333
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
334
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
335
+ target_link_libraries (datachannel-static PRIVATE
336
+ Threads::Threads
337
+ Usrsctp::Usrsctp
338
+ $<BUILD_INTERFACE:plog::plog>)
316
339
317
340
if (WIN32 )
318
341
target_link_libraries (datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +372,7 @@ else()
349
372
else ()
350
373
if (NOT TARGET srtp2)
351
374
add_subdirectory (deps/libsrtp EXCLUDE_FROM_ALL )
375
+ install (TARGETS srtp2)
352
376
endif ()
353
377
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354
378
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -426,9 +450,10 @@ else()
426
450
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuice)
427
451
else ()
428
452
add_subdirectory (deps/libjuice EXCLUDE_FROM_ALL )
453
+ install (TARGETS juice)
429
454
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430
455
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431
- target_link_libraries (datachannel PRIVATE LibJuice::LibJuiceStatic )
456
+ target_link_libraries (datachannel PRIVATE LibJuice::LibJuice )
432
457
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433
458
endif ()
434
459
endif ()
0 commit comments