Skip to content

Commit 46824b8

Browse files
Make datachannel target comply with BUILD_SHARED_LIBS option
1 parent 6cc706f commit 46824b8

File tree

6 files changed

+70
-48
lines changed

6 files changed

+70
-48
lines changed

.github/workflows/build-nomedia.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,7 @@ jobs:
3636
set CL=/MP
3737
nmake
3838
- name: test
39-
run: build/tests.exe
39+
run: |
40+
cd build
41+
./tests
4042

.github/workflows/build-openssl.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,7 @@ jobs:
5252
set CL=/MP
5353
nmake
5454
- name: test
55-
run: build/tests.exe
55+
run: |
56+
cd build
57+
./tests
5658

CMakeLists.txt

+62-42
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.7)
1+
cmake_minimum_required(VERSION 3.13)
22
project(libdatachannel
33
VERSION 0.21.2
44
LANGUAGES CXX)
@@ -7,10 +7,12 @@ set(PROJECT_DESCRIPTION "C/C++ WebRTC network library featuring Data Channels, M
77
include(GNUInstallDirs)
88

99
# Options
10+
option(BUILD_SHARED_LIBS "Build shared library" ON)
11+
option(BUILD_SHARED_DEPS_LIBS "Build submodules as shared libraries" OFF)
1012
option(USE_GNUTLS "Use GnuTLS instead of OpenSSL" OFF)
1113
option(USE_MBEDTLS "Use Mbed TLS instead of OpenSSL" OFF)
1214
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)
1416
option(USE_SYSTEM_SRTP "Use system libSRTP" ${PREFER_SYSTEM_LIB})
1517
option(USE_SYSTEM_JUICE "Use system libjuice" ${PREFER_SYSTEM_LIB})
1618
option(USE_SYSTEM_USRSCTP "Use system libusrsctp" ${PREFER_SYSTEM_LIB})
@@ -49,7 +51,6 @@ endif()
4951

5052
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
5153
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
52-
set(BUILD_SHARED_LIBS OFF) # to force usrsctp to be built static
5354

5455
if(WIN32)
5556
add_definitions(-DWIN32_LEAN_AND_MEAN)
@@ -234,41 +235,14 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
234235
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
235236
find_package(Threads REQUIRED)
236237

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-
264238
if(RTC_UPDATE_VERSION_HEADER)
265239
configure_file (
266240
${PROJECT_SOURCE_DIR}/cmake/version.h.in
267241
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/version.h
268242
)
269243
endif()
270244

271-
add_library(datachannel SHARED
245+
add_library(datachannel
272246
${LIBDATACHANNEL_SOURCES}
273247
${LIBDATACHANNEL_HEADERS}
274248
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -278,13 +252,11 @@ set_target_properties(datachannel PROPERTIES
278252
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
279253
CXX_STANDARD 17
280254
CXX_VISIBILITY_PRESET default)
281-
282255
if(APPLE)
283256
set_target_properties(datachannel PROPERTIES
284257
VERSION ${PROJECT_VERSION_MAJOR}
285258
SOVERSION ${PROJECT_VERSION_MAJOR})
286259
endif()
287-
288260
target_compile_definitions(datachannel PRIVATE RTC_EXPORTS)
289261

290262
add_library(datachannel-static STATIC EXCLUDE_FROM_ALL
@@ -298,21 +270,67 @@ set_target_properties(datachannel-static PROPERTIES
298270
target_compile_definitions(datachannel-static PRIVATE RTC_EXPORTS)
299271
target_compile_definitions(datachannel-static PUBLIC RTC_STATIC)
300272

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+
301313
target_include_directories(datachannel PUBLIC
302314
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
303315
$<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>)
308323

309324
target_include_directories(datachannel-static PUBLIC
310325
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
311326
$<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>)
316334

317335
if(WIN32)
318336
target_link_libraries(datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +367,7 @@ else()
349367
else()
350368
if(NOT TARGET srtp2)
351369
add_subdirectory(deps/libsrtp EXCLUDE_FROM_ALL)
370+
install(TARGETS srtp2)
352371
endif()
353372
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354373
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -426,9 +445,10 @@ else()
426445
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuice)
427446
else()
428447
add_subdirectory(deps/libjuice EXCLUDE_FROM_ALL)
448+
install(TARGETS juice)
429449
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430450
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)
432452
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433453
endif()
434454
endif()

examples/client-benchmark/CMakeLists.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ set(GETOPT_SOURCES
1616

1717
if(WIN32)
1818
add_executable(datachannel-client-benchmark ${CLIENT_SOURCES} ${GETOPT_SOURCES})
19-
target_compile_definitions(datachannel-client-benchmark PUBLIC STATIC_GETOPT)
2019
else()
2120
add_executable(datachannel-client-benchmark ${CLIENT_SOURCES})
2221
endif()
@@ -34,7 +33,7 @@ target_link_libraries(datachannel-client-benchmark LibDataChannel::LibDataChanne
3433
if(MSVC)
3534
add_custom_command(TARGET datachannel-client-benchmark POST_BUILD
3635
COMMAND ${CMAKE_COMMAND} -E copy_if_different
37-
"$<TARGET_FILE_DIR:datachannel>/datachannel.dll"
36+
"$<TARGET_FILE_DIR:datachannel>/datachannel.dll" # TODO
3837
$<TARGET_FILE_DIR:datachannel-client-benchmark>
3938
)
4039
endif()

examples/client/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ if(WIN32)
3030
else()
3131
add_executable(datachannel-client ${CLIENT_SOURCES} ${GETOPT_SOURCES})
3232
endif()
33-
target_compile_definitions(datachannel-client PUBLIC STATIC_GETOPT)
3433
else()
3534
add_executable(datachannel-client ${CLIENT_SOURCES})
3635
endif()

examples/client/getopt.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7171
#define null_argument 0 /*Argument Null*/
7272
#define no_argument 0 /*Argument Switch Only*/
7373
#define required_argument 1 /*Argument Required*/
74-
#define optional_argument 2 /*Argument Optional*/
74+
#define optional_argument 2 /*Argument Optional*/
7575

7676
// Shorter Options
7777
#define ARG_NULL 0 /*Argument Null*/

0 commit comments

Comments
 (0)