Skip to content

Commit 304e16c

Browse files
Merge pull request #1274 from paullouisageneau/cmake-build-shared-libraries
CMake: Comply with BUILD_SHARED_LIBS option
2 parents 7209b95 + 0ca00b6 commit 304e16c

File tree

3 files changed

+82
-49
lines changed

3 files changed

+82
-49
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

+76-47
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)
@@ -230,45 +231,14 @@ set(BENCHMARK_UWP_RESOURCES
230231
${CMAKE_CURRENT_SOURCE_DIR}/test/uwp/benchmark/Windows_TemporaryKey.pfx
231232
)
232233

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-
264234
if(RTC_UPDATE_VERSION_HEADER)
265235
configure_file (
266236
${PROJECT_SOURCE_DIR}/cmake/version.h.in
267237
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/version.h
268238
)
269239
endif()
270240

271-
add_library(datachannel SHARED
241+
add_library(datachannel
272242
${LIBDATACHANNEL_SOURCES}
273243
${LIBDATACHANNEL_HEADERS}
274244
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -278,15 +248,12 @@ set_target_properties(datachannel PROPERTIES
278248
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
279249
CXX_STANDARD 17
280250
CXX_VISIBILITY_PRESET default)
281-
282251
if(APPLE)
283252
set_target_properties(datachannel PROPERTIES
284253
VERSION ${PROJECT_VERSION_MAJOR}
285254
SOVERSION ${PROJECT_VERSION_MAJOR})
286255
endif()
287256

288-
target_compile_definitions(datachannel PRIVATE RTC_EXPORTS)
289-
290257
add_library(datachannel-static STATIC EXCLUDE_FROM_ALL
291258
${LIBDATACHANNEL_SOURCES}
292259
${LIBDATACHANNEL_HEADERS}
@@ -295,24 +262,84 @@ add_library(datachannel-static STATIC EXCLUDE_FROM_ALL
295262
set_target_properties(datachannel-static PROPERTIES
296263
VERSION ${PROJECT_VERSION}
297264
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()
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+
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+
301322
target_include_directories(datachannel PUBLIC
302323
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
303324
$<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>)
308332

309333
target_include_directories(datachannel-static PUBLIC
310334
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
311335
$<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>)
316343

317344
if(WIN32)
318345
target_link_libraries(datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +376,7 @@ else()
349376
else()
350377
if(NOT TARGET srtp2)
351378
add_subdirectory(deps/libsrtp EXCLUDE_FROM_ALL)
379+
install(TARGETS srtp2)
352380
endif()
353381
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354382
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -426,9 +454,10 @@ else()
426454
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuice)
427455
else()
428456
add_subdirectory(deps/libjuice EXCLUDE_FROM_ALL)
457+
install(TARGETS juice)
429458
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430459
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)
432461
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433462
endif()
434463
endif()

0 commit comments

Comments
 (0)