premiere-libtorrent/CMakeLists.txt

411 lines
9.7 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
2008-09-28 02:18:03 +02:00
project(libtorrent)
set (SOVERSION "10")
set (VERSION "1.2.0")
2008-09-28 02:18:03 +02:00
list(APPEND CMAKE_MODULE_PATH ${libtorrent_SOURCE_DIR}/cmake/Modules)
2008-09-28 02:18:03 +02:00
set(sources
web_connection_base
2008-09-28 02:18:03 +02:00
alert
alert_manager
allocator
announce_entry
2008-09-28 02:18:03 +02:00
assert
bandwidth_limit
bandwidth_manager
bandwidth_queue_entry
bdecode
bitfield
2014-07-06 21:18:00 +02:00
block_cache
bloom_filter
chained_buffer
choker
close_reason
cpuid
2014-10-15 05:01:39 +02:00
crc32c
2008-09-28 02:18:03 +02:00
create_torrent
disk_buffer_holder
entry
error_code
file_storage
file_progress
2008-09-28 02:18:03 +02:00
lazy_bdecode
escape_string
string_util
2008-09-28 02:18:03 +02:00
file
gzip
hasher
2015-04-21 02:23:00 +02:00
hex
2008-09-28 02:18:03 +02:00
http_connection
http_stream
http_parser
2009-08-20 05:19:12 +02:00
i2p_stream
2008-09-28 02:18:03 +02:00
identify_client
ip_filter
ip_voter
2014-07-06 21:18:00 +02:00
performance_counters
peer_class
peer_class_set
2008-09-28 02:18:03 +02:00
peer_connection
bt_peer_connection
web_peer_connection
2008-12-30 04:54:07 +01:00
http_seed_connection
2015-07-02 06:13:26 +02:00
peer_connection_handle
2008-09-28 02:18:03 +02:00
instantiate_connection
merkle
2008-09-28 02:18:03 +02:00
natpmp
2014-07-06 21:18:00 +02:00
part_file
2010-11-29 02:33:05 +01:00
packet_buffer
2008-09-28 02:18:03 +02:00
piece_picker
2014-07-06 21:18:00 +02:00
platform_util
proxy_base
2014-10-26 08:34:31 +01:00
peer_list
2010-03-16 07:14:22 +01:00
puff
random
receive_buffer
read_resume_data
2014-07-06 21:18:00 +02:00
request_blocks
resolve_links
2014-10-15 05:01:39 +02:00
resolver
2008-09-28 02:18:03 +02:00
session
session_call
session_handle
2008-09-28 02:18:03 +02:00
session_impl
session_settings
proxy_settings
2014-07-06 21:18:00 +02:00
session_stats
settings_pack
sha1_hash
socket_io
socket_type
2008-09-28 02:18:03 +02:00
socks5_stream
stat
2014-07-06 21:18:00 +02:00
stat_cache
2008-09-28 02:18:03 +02:00
storage
2009-11-25 07:55:34 +01:00
time
timestamp_history
2008-09-28 02:18:03 +02:00
torrent
torrent_handle
torrent_info
2014-07-06 21:18:00 +02:00
torrent_peer
torrent_peer_allocator
torrent_status
2008-09-28 02:18:03 +02:00
tracker_manager
http_tracker_connection
utf8
2008-09-28 02:18:03 +02:00
udp_tracker_connection
udp_socket
upnp
utp_socket_manager
2012-05-16 06:23:47 +02:00
utp_stream
2008-09-28 02:18:03 +02:00
file_pool
lsd
2014-07-06 21:18:00 +02:00
disk_io_job
disk_job_pool
disk_buffer_pool
2008-09-28 02:18:03 +02:00
disk_io_thread
2016-06-16 02:49:28 +02:00
disk_io_thread_pool
2008-09-28 02:18:03 +02:00
enum_net
broadcast_socket
magnet_uri
parse_url
ConvertUTF
2014-05-03 23:10:44 +02:00
xml_parse
version
ffs
2008-09-28 02:18:03 +02:00
# -- extensions --
ut_pex
ut_metadata
smart_ban
)
2008-09-29 01:10:17 +02:00
# -- kademlia --
2008-09-28 02:18:03 +02:00
set(kademlia_sources
dht_storage
2014-10-15 05:01:39 +02:00
dos_blocker
2008-09-28 02:18:03 +02:00
dht_tracker
msg
2008-09-28 02:18:03 +02:00
node
node_entry
2008-09-28 02:18:03 +02:00
refresh
rpc_manager
find_data
2015-09-22 20:10:57 +02:00
put_data
2008-09-28 02:18:03 +02:00
node_id
routing_table
traversal_algorithm
2014-05-10 09:10:17 +02:00
item
get_peers
get_item
ed25519
2008-09-28 02:18:03 +02:00
)
# -- ed25519 --
set(ed25519_sources
add_scalar
fe
ge
key_exchange
keypair
sc
sign
verify
)
2014-05-10 09:10:17 +02:00
set(includes include ed25519/src)
2008-09-28 02:18:03 +02:00
2008-09-29 01:10:17 +02:00
option(shared "build libtorrent as a shared library" ON)
2014-05-10 09:10:17 +02:00
option(static_runtime "build libtorrent with static runtime" OFF)
2008-09-29 01:10:17 +02:00
option(pool-allocators "Uses a pool allocator for disk and piece buffers" ON)
option(encryption "link against openssl and enable encryption" ON)
option(dht "enable support for Mainline DHT" ON)
option(unicode "enable unicode support" ON)
option(deprecated-functions "enable deprecated functions for backwards compatibility" ON)
option(disk-stats "enable disk activity logging feature" OFF)
2009-02-13 08:10:27 +01:00
option(exceptions "build with exception support" ON)
option(libiconv "enable linking against system libiconv" OFF)
option(logging "build with logging" ON)
option(build_tests "build tests" OFF)
2008-09-29 01:10:17 +02:00
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release FORCE)
2014-05-10 09:10:17 +02:00
endif()
# add_definitions() doesn't seem to let you say wich build type to apply it to
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DTORRENT_DEBUG")
2014-05-10 09:10:17 +02:00
if(UNIX)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
endif()
2014-07-12 08:20:16 +02:00
if (build_tests)
# this will make some internal functions available in the
# DLL interface, for the tests to access
add_definitions(-DTORRENT_EXPORT_EXTRA)
endif (build_tests)
find_package(Threads REQUIRED)
2014-11-17 04:41:01 +01:00
include_directories(${includes})
add_definitions(-DTORRENT_BUILDING_LIBRARY)
if (disk-stats)
add_definitions(-DTORRENT_DISK_STATS)
endif (disk-stats)
if (libiconv)
find_package(Iconv REQUIRED)
add_definitions(-DTORRENT_USE_ICONV)
include_directories(SYSTEM ${ICONV_INCLUDE_DIR})
endif (libiconv)
2008-09-29 01:10:17 +02:00
if (encryption)
list(APPEND sources pe_crypto)
2014-07-12 08:20:16 +02:00
if(NOT DEFINED OPENSSL_INCLUDE_DIR OR NOT DEFINED OPENSSL_LIBRARIES)
FIND_PACKAGE(OpenSSL REQUIRED)
endif()
add_definitions(-DTORRENT_USE_OPENSSL)
add_definitions(-DTORRENT_USE_LIBCRYPTO)
2014-07-12 08:20:16 +02:00
include_directories(${OPENSSL_INCLUDE_DIR})
else()
add_definitions(-DTORRENT_DISABLE_ENCRYPTION)
if (NOT WIN32 AND NOT APPLE)
list(APPEND sources sha1)
endif()
2008-09-29 01:10:17 +02:00
endif (encryption)
2008-09-28 02:18:03 +02:00
if (NOT logging)
add_definitions(-DTORRENT_DISABLE_LOGGING)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
foreach(s ${sources})
list(APPEND sources2 src/${s})
endforeach(s)
2008-09-29 01:10:17 +02:00
if (dht)
2008-09-28 02:18:03 +02:00
foreach(s ${kademlia_sources})
list(APPEND sources2 src/kademlia/${s})
endforeach(s)
foreach(s ${ed25519_sources})
list(APPEND sources2 ed25519/src/${s})
endforeach(s)
list(APPEND sources2 src/hasher512)
if (NOT encryption AND NOT WIN32 AND NOT APPLE)
list(APPEND sources2 src/sha512)
endif()
2014-05-10 09:10:17 +02:00
else()
2008-09-28 02:18:03 +02:00
add_definitions(-DTORRENT_DISABLE_DHT)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
2008-09-29 01:10:17 +02:00
if (shared)
2012-11-01 04:51:50 +01:00
add_definitions(-DTORRENT_BUILDING_SHARED)
2010-03-16 07:14:22 +01:00
add_library(torrent-rasterbar SHARED ${sources2})
if(NOT MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")
endif()
else()
2014-05-10 09:10:17 +02:00
if(static_runtime)
# fix /MT flag:
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_RELEASE
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME ON)
2014-05-10 09:10:17 +02:00
endif()
set(Boost_USE_STATIC_LIBS ON)
2010-03-16 07:14:22 +01:00
add_library(torrent-rasterbar STATIC ${sources2})
2014-05-10 09:10:17 +02:00
endif()
# Boost
if(NOT DEFINED Boost_INCLUDE_DIR OR NOT DEFINED Boost_LIBRARIES)
2016-05-01 02:09:02 +02:00
FIND_PACKAGE(Boost REQUIRED COMPONENTS system)
endif()
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(torrent-rasterbar ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
2008-09-28 02:18:03 +02:00
2016-05-01 02:09:02 +02:00
add_definitions(-DBOOST_ASIO_HAS_STD_CHRONO=1 )
2009-06-27 21:30:15 +02:00
2008-09-28 02:18:03 +02:00
if (WIN32)
target_link_libraries(torrent-rasterbar wsock32 ws2_32 Iphlpapi)
2014-11-27 04:05:06 +01:00
add_definitions(-D_WIN32_WINNT=0x0600)
2015-04-26 03:25:45 +02:00
# prevent winsock1 to be included
add_definitions(-DWIN32_LEAN_AND_MEAN)
2014-11-27 04:05:06 +01:00
if (MSVC)
add_definitions(-DBOOST_ALL_NO_LIB)
2014-11-27 04:05:06 +01:00
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # multicore compilation
endif()
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
2008-09-29 01:10:17 +02:00
if (encryption)
2012-06-17 01:19:36 +02:00
target_link_libraries(torrent-rasterbar ${OPENSSL_LIBRARIES})
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
if (libiconv)
target_link_libraries(torrent-rasterbar ${ICONV_LIBRARIES})
endif (libiconv)
2008-09-29 01:10:17 +02:00
if (NOT pool-allocators)
2008-09-28 02:18:03 +02:00
add_definitions(-DTORRENT_DISABLE_POOL_ALLOCATOR)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
2008-09-29 01:10:17 +02:00
if (unicode)
2008-09-28 02:18:03 +02:00
add_definitions(-DUNICODE -D_UNICODE)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
2008-09-29 01:10:17 +02:00
if (NOT deprecated-functions)
2008-09-28 02:18:03 +02:00
add_definitions(-DTORRENT_NO_DEPRECATE)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
2009-02-13 08:10:27 +01:00
if (exceptions)
2012-06-17 01:19:36 +02:00
if (MSVC)
add_definitions(/EHsc)
else (MSVC)
add_definitions(-fexceptions)
endif (MSVC)
2014-05-10 09:10:17 +02:00
else()
if (MSVC)
add_definitions(-D_HAS_EXCEPTIONS=0)
else (MSVC)
add_definitions(-fno-exceptions)
endif (MSVC)
endif()
2009-02-13 08:10:27 +01:00
2008-09-28 02:18:03 +02:00
if (MSVC)
# disable bogus deprecation warnings on msvc8
add_definitions(-D_SCL_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE)
# these compiler settings just makes the compiler standard conforming
add_definitions(/Zc:wchar_t /Zc:forScope)
2012-06-17 01:19:36 +02:00
# for multi-core compilation
add_definitions(/MP)
2008-09-28 02:18:03 +02:00
2014-05-10 09:10:17 +02:00
#$(SolutionDir)<toolset>msvc,<variant>release:<linkflags>/OPT:ICF=5
#$(SolutionDir)<toolset>msvc,<variant>release:<linkflags>/OPT:REF
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_definitions(-fcolor-diagnostics)
2014-05-10 09:10:17 +02:00
endif()
2008-09-28 02:18:03 +02:00
add_definitions(-D_FILE_OFFSET_BITS=64)
2014-06-22 20:49:33 +02:00
add_definitions(-DBOOST_EXCEPTION_DISABLE)
2010-11-29 02:33:05 +01:00
add_definitions(-DBOOST_ASIO_ENABLE_CANCELIO)
add_definitions(-DBOOST_ASIO_HAS_STD_CHRONO)
2008-09-28 02:18:03 +02:00
set_target_properties(torrent-rasterbar PROPERTIES
2014-09-13 21:47:51 +02:00
SOVERSION ${SOVERSION})
2008-12-28 21:06:40 +01:00
# libtorrent requires at least C++11
set_property(TARGET torrent-rasterbar PROPERTY CXX_STANDARD 11)
set_property(TARGET torrent-rasterbar PROPERTY CXX_STANDARD_REQUIRED ON)
2008-12-28 21:06:40 +01:00
get_property (COMPILETIME_OPTIONS_LIST
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIRECTORY}
PROPERTY COMPILE_DEFINITIONS
)
foreach (s ${COMPILETIME_OPTIONS_LIST})
set (COMPILETIME_OPTIONS "${COMPILETIME_OPTIONS} -D${s}")
endforeach (s)
2014-11-17 04:41:01 +01:00
configure_file(libtorrent-rasterbar-cmake.pc.in libtorrent-rasterbar.pc)
2008-12-28 21:06:40 +01:00
string (COMPARE EQUAL "${CMAKE_SIZEOF_VOID_P}" "8" IS64BITS)
if (IS64BITS AND RESPECTLIB64)
set (LIBDIR "lib64")
2014-05-10 09:10:17 +02:00
else()
set (LIBDIR "lib")
2014-05-10 09:10:17 +02:00
endif()
2014-09-13 21:47:51 +02:00
install(TARGETS torrent-rasterbar DESTINATION ${LIBDIR})
install(DIRECTORY include/libtorrent
DESTINATION include
PATTERN ".svn" EXCLUDE)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig)
2008-09-28 02:26:49 +02:00
2014-11-19 10:23:08 +01:00
# === set up examples directory as an independent project ===
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples)
configure_file(examples/run_cmake.sh.in examples/run_cmake.sh)
# to build the examples, run examples/run_cmake.sh after building libtorrent
2014-05-10 09:10:17 +02:00
# === build tests ===
if(build_tests)
file(GLOB tests RELATIVE "${PROJECT_SOURCE_DIR}" "test/test_*.cpp")
list(REMOVE_ITEM tests "test/test_natpmp.cpp") # doesn't build at time of writing
list(REMOVE_ITEM tests "test/test_utils.cpp") # helper file, not a test
add_library(test_common OBJECT test/main.cpp test/test.cpp
test/setup_transfer.cpp test/dht_server.cpp test/udp_tracker.cpp
test/peer_server.cpp test/web_seed_suite.cpp test/swarm_suite.cpp
test/test_utils.cpp test/make_torrent.hpp test/make_torrent.cpp
test/settings.hpp test/settings.cpp)
set_target_properties(test_common PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON)
enable_testing()
foreach(s ${tests})
2014-05-10 09:10:17 +02:00
get_filename_component (sn ${s} NAME_WE)
add_executable(${sn} ${s} $<TARGET_OBJECTS:test_common>)
target_link_libraries(${sn} torrent-rasterbar)
set_target_properties(${sn} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON)
2014-05-10 09:10:17 +02:00
add_test(${sn} ${s})
endforeach(s)
add_executable(bdecode_benchmark test/bdecode_benchmark.cpp)
target_link_libraries(bdecode_benchmark torrent-rasterbar)
set_target_properties(bdecode_benchmark PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON)
2014-05-10 09:10:17 +02:00
endif()