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,15 +248,12 @@ 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
256
288
- target_compile_definitions (datachannel PRIVATE RTC_EXPORTS)
289
-
290
257
add_library (datachannel-static STATIC EXCLUDE_FROM_ALL
291
258
${LIBDATACHANNEL_SOURCES}
292
259
${LIBDATACHANNEL_HEADERS}
@@ -295,24 +262,84 @@ add_library(datachannel-static STATIC EXCLUDE_FROM_ALL
295
262
set_target_properties (datachannel-static PROPERTIES
296
263
VERSION ${PROJECT_VERSION}
297
264
CXX_STANDARD 17)
265
+
266
+ target_compile_definitions (datachannel PRIVATE RTC_EXPORTS)
267
+ if (NOT BUILD_SHARED_LIBS )
268
+ target_compile_definitions (datachannel PUBLIC RTC_STATIC)
269
+ endif ()
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
+ set (CMAKE_THREAD_PREFER_PTHREAD TRUE )
278
+ set (THREADS_PREFER_PTHREAD_FLAG TRUE )
279
+ find_package (Threads REQUIRED)
280
+
281
+ if (USE_SYSTEM_PLOG)
282
+ find_package (plog REQUIRED)
283
+ else ()
284
+ set (CMAKE_POLICY_DEFAULT_CMP0048 NEW)
285
+ add_subdirectory (deps/plog EXCLUDE_FROM_ALL )
286
+ endif ()
287
+
288
+ if (SCTP_DEBUG)
289
+ add_definitions (-DSCTP_DEBUG)
290
+ endif ()
291
+
292
+ if (USE_SYSTEM_USRSCTP)
293
+ find_package (Usrsctp REQUIRED)
294
+ else ()
295
+ option (sctp_build_shared_lib OFF )
296
+ option (sctp_build_programs OFF )
297
+ option (sctp_inet OFF )
298
+ option (sctp_inet6 OFF )
299
+ option (sctp_werror OFF )
300
+ set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
301
+ add_subdirectory (deps/usrsctp EXCLUDE_FROM_ALL )
302
+ if (MSYS OR MINGW)
303
+ target_compile_definitions (usrsctp PUBLIC -DSCTP_STDINT_INCLUDE=<stdint.h>)
304
+ endif ()
305
+ add_library (Usrsctp::Usrsctp ALIAS usrsctp)
306
+
307
+ # usrsctp lacks an export set
308
+ install (TARGETS usrsctp EXPORT UsrsctpTargets)
309
+ install (EXPORT UsrsctpTargets
310
+ FILE UsrsctpTargets.cmake
311
+ NAMESPACE Usrsctp::
312
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/usrsctp
313
+ EXCLUDE_FROM_ALL )
314
+
315
+ # Fix directories
316
+ set_target_properties (usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "" )
317
+ target_include_directories (usrsctp INTERFACE
318
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /deps/usrsctp/usrsctplib>
319
+ $<INSTALL_INTERFACE:>)
320
+ endif ()
321
+
301
322
target_include_directories (datachannel PUBLIC
302
323
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
303
324
$<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)
325
+ target_include_directories (datachannel PRIVATE
326
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
327
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
328
+ target_link_libraries (datachannel PRIVATE
329
+ Threads::Threads
330
+ Usrsctp::Usrsctp
331
+ $<BUILD_INTERFACE:plog::plog>)
308
332
309
333
target_include_directories (datachannel-static PUBLIC
310
334
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
311
335
$<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)
336
+ target_include_directories (datachannel-static PRIVATE
337
+ ${CMAKE_CURRENT_SOURCE_DIR} /include /rtc
338
+ ${CMAKE_CURRENT_SOURCE_DIR} /src)
339
+ target_link_libraries (datachannel-static PRIVATE
340
+ Threads::Threads
341
+ Usrsctp::Usrsctp
342
+ $<BUILD_INTERFACE:plog::plog>)
316
343
317
344
if (WIN32 )
318
345
target_link_libraries (datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +376,7 @@ else()
349
376
else ()
350
377
if (NOT TARGET srtp2)
351
378
add_subdirectory (deps/libsrtp EXCLUDE_FROM_ALL )
379
+ install (TARGETS srtp2)
352
380
endif ()
353
381
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354
382
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -426,9 +454,10 @@ else()
426
454
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuice)
427
455
else ()
428
456
add_subdirectory (deps/libjuice EXCLUDE_FROM_ALL )
457
+ install (TARGETS juice)
429
458
target_compile_definitions (datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430
459
target_compile_definitions (datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431
- target_link_libraries (datachannel PRIVATE LibJuice::LibJuiceStatic )
460
+ target_link_libraries (datachannel PRIVATE LibJuice::LibJuice )
432
461
target_link_libraries (datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433
462
endif ()
434
463
endif ()
0 commit comments