2016-02-29 04:09:39 -08:00
|
|
|
# ============================================================================
|
|
|
|
#
|
2016-08-11 20:38:53 -07:00
|
|
|
# CMake file for PeerConnect
|
2016-02-29 04:09:39 -08:00
|
|
|
#
|
|
|
|
# ============================================================================
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
2016-08-11 20:38:53 -07:00
|
|
|
project(peerconnect)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# The version number.
|
|
|
|
# ============================================================================
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(PACKAGE "peerconnect")
|
2016-02-29 04:09:39 -08:00
|
|
|
set(CPACK_PACKAGE_NAME "${PACKAGE}")
|
|
|
|
set(CPACK_PACKAGE_VERSION_MAJOR "0")
|
2016-03-16 21:32:33 -07:00
|
|
|
set(CPACK_PACKAGE_VERSION_MINOR "0")
|
|
|
|
set(CPACK_PACKAGE_VERSION_PATCH "1")
|
2016-02-29 04:09:39 -08:00
|
|
|
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
|
|
|
#set(CPACK_PACKAGE_VENDOR "")
|
|
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}")
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
option(PC_WITH_STATIC "Build the static version of the library" ON)
|
|
|
|
option(PC_WITH_SHARED "Build the shared version of the library" ON)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
if (NOT (PC_WITH_STATIC OR PC_WITH_SHARED))
|
2016-02-29 04:09:39 -08:00
|
|
|
message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
|
|
|
|
endif()
|
|
|
|
|
2016-05-01 16:18:40 -07:00
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# The output directory.
|
|
|
|
# ============================================================================
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
|
|
|
|
|
|
message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'")
|
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# Platform or compiler specific configurations
|
|
|
|
# ============================================================================
|
2016-04-09 13:18:27 -07:00
|
|
|
|
2016-02-29 04:09:39 -08:00
|
|
|
if (MSVC)
|
|
|
|
# Use /MT or /MTd instead of /MD or /MDd
|
|
|
|
foreach(flag_var
|
|
|
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
|
|
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
|
|
if(${flag_var} MATCHES "/MD")
|
|
|
|
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
|
|
endif(${flag_var} MATCHES "/MD")
|
|
|
|
endforeach(flag_var)
|
2016-06-24 20:13:50 -07:00
|
|
|
elseif (APPLE)
|
2016-06-24 21:59:56 -07:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fvisibility=hidden")
|
2016-06-24 20:13:50 -07:00
|
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
|
|
|
|
elseif (UNIX)
|
2016-06-24 22:38:47 -07:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
|
|
|
|
2016-03-02 02:10:47 -08:00
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# Find external dependencies
|
|
|
|
# ============================================================================
|
|
|
|
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
|
2016-06-24 20:13:50 -07:00
|
|
|
include(Mergestaticlibs)
|
2016-03-02 02:10:47 -08:00
|
|
|
|
|
|
|
# WebRTC
|
|
|
|
find_package(WebRTC)
|
|
|
|
|
2016-04-16 22:44:24 -07:00
|
|
|
# Websocketpp
|
2016-04-09 13:18:27 -07:00
|
|
|
find_package(Websocketpp)
|
|
|
|
|
2016-04-16 22:44:24 -07:00
|
|
|
# standalone asio for websocketpp
|
|
|
|
find_package(Asio)
|
2016-03-02 02:10:47 -08:00
|
|
|
|
|
|
|
|
2016-02-29 04:09:39 -08:00
|
|
|
# ============================================================================
|
|
|
|
# Headers and sources.
|
|
|
|
# ============================================================================
|
|
|
|
set(HEADERS
|
2016-08-11 20:38:53 -07:00
|
|
|
"src/peerconnect.h"
|
2016-09-05 23:42:38 -07:00
|
|
|
"src/common.h"
|
2016-06-24 20:13:50 -07:00
|
|
|
"src/control.h"
|
|
|
|
"src/controlobserver.h"
|
|
|
|
"src/peer.h"
|
|
|
|
"src/signalconnection.h"
|
|
|
|
"src/fakeaudiocapturemodule.h"
|
2016-08-16 10:49:24 -07:00
|
|
|
"src/logging.h"
|
2016-06-24 20:13:50 -07:00
|
|
|
)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
|
|
|
set(SOURCES
|
2016-08-11 20:38:53 -07:00
|
|
|
"src/peerconnect.cc"
|
2016-06-24 20:13:50 -07:00
|
|
|
"src/control.cc"
|
|
|
|
"src/peer.cc"
|
|
|
|
"src/signalconnection.cc"
|
|
|
|
"src/fakeaudiocapturemodule.cc"
|
2016-08-16 10:49:24 -07:00
|
|
|
"src/logging.cc"
|
2016-06-24 20:13:50 -07:00
|
|
|
)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# Target settings
|
|
|
|
# ============================================================================
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(_PC_INTERNAL_DEFINES
|
2016-06-24 20:13:50 -07:00
|
|
|
${WEBRTC_DEFINES}
|
|
|
|
${WEBSOCKETPP_DEFINES}
|
|
|
|
)
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(_PC_INTERNAL_INCLUDE_DIR
|
2016-06-24 20:13:50 -07:00
|
|
|
"${WEBRTC_INCLUDE_DIR}"
|
|
|
|
"${ASIO_INCLUDE_DIR}"
|
|
|
|
"${WEBSOCKETPP_INCLUDE_DIIR}"
|
|
|
|
"${PROJECT_BINARY_DIR}"
|
|
|
|
"${PROJECT_SOURCE_DIR}/src"
|
|
|
|
)
|
2016-04-09 13:18:27 -07:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(_PC_INTERNAL_LIBRARIES
|
2016-06-24 20:13:50 -07:00
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL}"
|
|
|
|
"${WEBRTC_LIBRARIES_EXTERNAL}"
|
2016-04-09 16:27:10 -07:00
|
|
|
)
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(PC_INCLUDE_DIRECTORY
|
2016-06-24 20:13:50 -07:00
|
|
|
"${PROJECT_BINARY_DIR}"
|
|
|
|
"${PROJECT_SOURCE_DIR}/src"
|
|
|
|
)
|
2016-02-29 04:09:39 -08:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
if (PC_WITH_STATIC)
|
|
|
|
add_library(peerconnect STATIC ${HEADERS} ${SOURCES})
|
2016-06-24 20:13:50 -07:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
target_compile_definitions(peerconnect PRIVATE ${_PC_INTERNAL_DEFINES})
|
|
|
|
target_include_directories(peerconnect PRIVATE ${_PC_INTERNAL_INCLUDE_DIR} )
|
2016-02-29 04:09:39 -08:00
|
|
|
|
|
|
|
if (WIN32)
|
|
|
|
# Windows uses the same .lib ending for static libraries and shared
|
|
|
|
# library linker files, so rename the static library.
|
2016-08-11 20:38:53 -07:00
|
|
|
set_target_properties(peerconnect PROPERTIES OUTPUT_NAME peerconnect_static)
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
2016-05-01 16:18:40 -07:00
|
|
|
|
2016-06-24 20:13:50 -07:00
|
|
|
if (MSVC)
|
2016-08-11 20:38:53 -07:00
|
|
|
MERGE_STATIC_LIBRARIES( peerconnect
|
2016-06-24 20:13:50 -07:00
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_RELEASE}"
|
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_DEBUG}")
|
|
|
|
elseif (APPLE)
|
2016-08-11 20:38:53 -07:00
|
|
|
MERGE_STATIC_LIBRARIES(peerconnect
|
2016-06-24 20:13:50 -07:00
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_RELEASE}"
|
2016-06-24 21:59:56 -07:00
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_DEBUG}")
|
2016-06-24 20:13:50 -07:00
|
|
|
elseif (UNIX)
|
2016-08-11 20:38:53 -07:00
|
|
|
MERGE_STATIC_LIBRARIES(peerconnect
|
2016-06-24 20:13:50 -07:00
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_RELEASE}"
|
|
|
|
"${WEBRTC_LIBRARIES_INTERNAL_DEBUG}")
|
|
|
|
endif(MSVC)
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
if (PC_WITH_SHARED)
|
|
|
|
add_library(peerconnect_shared SHARED ${HEADERS} ${SOURCES})
|
2016-02-29 04:09:39 -08:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
target_compile_definitions(peerconnect_shared PRIVATE ${_PC_INTERNAL_DEFINES})
|
|
|
|
target_include_directories(peerconnect_shared PRIVATE ${_PC_INTERNAL_INCLUDE_DIR} )
|
2016-02-29 04:09:39 -08:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set_target_properties(peerconnect_shared PROPERTIES OUTPUT_NAME peerconnect)
|
|
|
|
target_link_libraries(peerconnect_shared ${_PC_INTERNAL_LIBRARIES})
|
2016-03-10 22:04:46 -08:00
|
|
|
|
2016-02-29 04:09:39 -08:00
|
|
|
if (WIN32)
|
2016-04-09 13:43:16 -07:00
|
|
|
# # Compile as DLL (export function declarations)
|
|
|
|
# set_property(
|
2016-08-11 20:38:53 -07:00
|
|
|
# TARGET peerconnect_shared
|
2016-04-09 13:43:16 -07:00
|
|
|
# PROPERTY COMPILE_DEFINITIONS)
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if (APPLE)
|
2016-08-11 20:38:53 -07:00
|
|
|
set_property(TARGET peerconnect_shared PROPERTY MACOSX_RPATH YES)
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
2016-05-01 16:18:40 -07:00
|
|
|
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
|
|
|
|
2016-03-10 22:04:46 -08:00
|
|
|
|
2016-03-02 02:42:29 -08:00
|
|
|
# ============================================================================
|
2016-08-11 20:38:53 -07:00
|
|
|
# Variables for parent project including peerconnect using add_subdirectory()
|
2016-03-02 02:42:29 -08:00
|
|
|
# ============================================================================
|
2016-03-02 02:10:47 -08:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
set(PEERCONNECT_INCLUDE_DIRECTORY ${PC_INCLUDE_DIRECTORY}
|
|
|
|
CACHE STRING "PeerConnect include directories")
|
|
|
|
if (PC_WITH_STATIC)
|
|
|
|
set(PEERCONNECT_LIBRARIES_STATIC peerconnect ${WEBRTC_LIBRARIES_EXTERNAL}
|
|
|
|
CACHE STRING "PeerConnect static library")
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
2016-08-11 20:38:53 -07:00
|
|
|
if (PC_WITH_SHARED)
|
|
|
|
set(PEERCONNECT_LIBRARIES_SHARED peerconnect_shared ${WEBRTC_LIBRARIES_EXTERNAL}
|
|
|
|
CACHE STRING "PeerConnect shared library")
|
2016-02-29 04:09:39 -08:00
|
|
|
endif()
|
2016-03-02 03:39:40 -08:00
|
|
|
|
|
|
|
|
|
|
|
# ============================================================================
|
2016-05-01 16:18:40 -07:00
|
|
|
# Test
|
2016-03-02 03:39:40 -08:00
|
|
|
# ============================================================================
|
|
|
|
|
2016-04-09 13:43:16 -07:00
|
|
|
add_executable(test_main src/test/test_main.cc)
|
2016-08-11 20:38:53 -07:00
|
|
|
add_dependencies(test_main peerconnect)
|
2016-03-16 21:32:33 -07:00
|
|
|
|
2016-08-11 20:38:53 -07:00
|
|
|
target_include_directories(test_main PRIVATE ${PEERCONNECT_INCLUDE_DIRECTORY})
|
|
|
|
target_link_libraries(test_main ${PEERCONNECT_LIBRARIES_STATIC})
|
2016-05-01 16:18:40 -07:00
|
|
|
set_target_properties (test_main PROPERTIES FOLDER test)
|
2016-03-16 22:15:48 -07:00
|
|
|
|
2016-03-02 07:09:39 -08:00
|
|
|
add_test(test_main test_main)
|
2016-05-01 16:18:40 -07:00
|
|
|
|
|
|
|
|
|
|
|
# ============================================================================
|
|
|
|
# Example
|
|
|
|
# ============================================================================
|
|
|
|
|
2016-05-08 21:09:14 -07:00
|
|
|
# echo server
|
|
|
|
add_executable(echo_server examples/echo_server/main.cc)
|
2016-08-11 20:38:53 -07:00
|
|
|
add_dependencies(echo_server peerconnect)
|
|
|
|
target_include_directories(echo_server PRIVATE ${PEERCONNECT_INCLUDE_DIRECTORY})
|
|
|
|
target_link_libraries(echo_server ${PEERCONNECT_LIBRARIES_STATIC})
|
2016-05-08 21:09:14 -07:00
|
|
|
set_target_properties (echo_server PROPERTIES FOLDER examples)
|
|
|
|
|
|
|
|
# echo client
|
|
|
|
add_executable(echo_client examples/echo_client/main.cc)
|
2016-08-11 20:38:53 -07:00
|
|
|
add_dependencies(echo_client peerconnect)
|
|
|
|
target_include_directories(echo_client PRIVATE ${PEERCONNECT_INCLUDE_DIRECTORY})
|
|
|
|
target_link_libraries(echo_client ${PEERCONNECT_LIBRARIES_STATIC})
|
2016-05-08 21:09:14 -07:00
|
|
|
set_target_properties (echo_client PROPERTIES FOLDER examples)
|
2016-06-01 20:40:36 -07:00
|
|
|
|
|
|
|
# p2p netcat
|
|
|
|
add_executable(p2p_netcat examples/p2p_netcat/main.cc)
|
2016-08-11 20:38:53 -07:00
|
|
|
add_dependencies(p2p_netcat peerconnect)
|
|
|
|
target_include_directories(p2p_netcat PRIVATE ${PEERCONNECT_INCLUDE_DIRECTORY})
|
|
|
|
target_link_libraries(p2p_netcat ${PEERCONNECT_LIBRARIES_STATIC})
|
2016-06-01 20:40:36 -07:00
|
|
|
set_target_properties (p2p_netcat PROPERTIES FOLDER examples)
|
2016-08-11 20:38:53 -07:00
|
|
|
set_target_properties (p2p_netcat PROPERTIES OUTPUT_NAME pnc)
|