twisterp2pnetworkbittorrentblockchainipv6microbloggingsocial-networkdhtdecentralizedtwister-servertwister-ipv6twister-coretwisterarmyp2p-network
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
338 lines
7.8 KiB
338 lines
7.8 KiB
cmake_minimum_required(VERSION 2.6) |
|
project(libtorrent) |
|
|
|
set(sources |
|
web_connection_base |
|
alert |
|
alert_manager |
|
allocator |
|
asio |
|
asio_ssl |
|
assert |
|
bandwidth_limit |
|
bandwidth_manager |
|
bandwidth_queue_entry |
|
bloom_filter |
|
chained_buffer |
|
connection_queue |
|
create_torrent |
|
disk_buffer_holder |
|
entry |
|
error_code |
|
file_storage |
|
lazy_bdecode |
|
escape_string |
|
string_util |
|
file |
|
gzip |
|
hasher |
|
http_connection |
|
http_stream |
|
http_parser |
|
i2p_stream |
|
identify_client |
|
ip_filter |
|
ip_voter |
|
peer_connection |
|
bt_peer_connection |
|
web_peer_connection |
|
http_seed_connection |
|
instantiate_connection |
|
natpmp |
|
packet_buffer |
|
piece_picker |
|
policy |
|
puff |
|
random |
|
rsa |
|
rss |
|
session |
|
session_impl |
|
settings |
|
socket_io |
|
socket_type |
|
socks5_stream |
|
stat |
|
storage |
|
thread |
|
time |
|
timestamp_history |
|
torrent |
|
torrent_handle |
|
torrent_info |
|
tracker_manager |
|
http_tracker_connection |
|
utf8 |
|
udp_tracker_connection |
|
udp_socket |
|
upnp |
|
utp_socket_manager |
|
utp_stream |
|
logger |
|
file_pool |
|
lsd |
|
disk_buffer_pool |
|
disk_io_thread |
|
enum_net |
|
broadcast_socket |
|
magnet_uri |
|
parse_url |
|
ConvertUTF |
|
|
|
# -- extensions -- |
|
metadata_transfer |
|
ut_pex |
|
ut_metadata |
|
smart_ban |
|
lt_trackers |
|
) |
|
|
|
# -- kademlia -- |
|
set(kademlia_sources |
|
dht_tracker |
|
node |
|
refresh |
|
rpc_manager |
|
find_data |
|
node_id |
|
routing_table |
|
traversal_algorithm |
|
logging |
|
) |
|
|
|
set(includes include) |
|
|
|
option(shared "build libtorrent as a shared library" ON) |
|
option(tcmalloc "link against google performance tools tcmalloc" OFF) |
|
option(pool-allocators "Uses a pool allocator for disk and piece buffers" ON) |
|
option(encryption "link against openssl and enable encryption" ON) |
|
option(geoip "link against LGPL GeoIP code from Maxmind, to enable geoip database support" OFF) |
|
option(dht "enable support for Mainline DHT" ON) |
|
option(resolve-countries "enable support for resolving countries from peer IPs" ON) |
|
option(unicode "enable unicode support" ON) |
|
option(deprecated-functions "enable deprecated functions for backwards compatibility" ON) |
|
option(exceptions "build with exception support" ON) |
|
option(logging "build with logging" OFF) |
|
option(verbose-logging "build with verbose logging" OFF) |
|
option(build_tests "build tests" OFF) |
|
option(build_examples "build examples" ON) |
|
|
|
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo) |
|
|
|
if (NOT CMAKE_BUILD_TYPE) |
|
set(CMAKE_BUILD_TYPE Release FORCE) |
|
endif (NOT CMAKE_BUILD_TYPE) |
|
|
|
# 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") |
|
|
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g") |
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") |
|
|
|
if (encryption) |
|
list(APPEND sources pe_crypto) |
|
endif (encryption) |
|
|
|
if (logging) |
|
add_definitions(-DTORRENT_LOGGING) |
|
endif (logging) |
|
if (verbose-logging) |
|
add_definitions(-DTORRENT_VERBOSE_LOGGING) |
|
endif (verbose-logging) |
|
|
|
foreach(s ${sources}) |
|
list(APPEND sources2 src/${s}) |
|
endforeach(s) |
|
|
|
if (dht) |
|
foreach(s ${kademlia_sources}) |
|
list(APPEND sources2 src/kademlia/${s}) |
|
endforeach(s) |
|
else (dht) |
|
add_definitions(-DTORRENT_DISABLE_DHT) |
|
endif (dht) |
|
|
|
if(NOT MSVC) |
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") |
|
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fvisibility-inlines-hidden") |
|
endif() |
|
|
|
if (shared) |
|
add_definitions(-DTORRENT_BUILDING_SHARED) |
|
add_library(torrent-rasterbar SHARED ${sources2}) |
|
else (shared) |
|
add_library(torrent-rasterbar STATIC ${sources2}) |
|
endif (shared) |
|
|
|
if (NOT Boost_VERSION LESS 103500) |
|
if(NOT MSVC) |
|
FIND_PACKAGE( Boost 1.35 COMPONENTS system) |
|
else(NOT MSVC) |
|
FIND_PACKAGE( Boost 1.35 COMPONENTS system thread date_time) |
|
endif(NOT MSVC) |
|
endif (NOT Boost_VERSION LESS 103500) |
|
include_directories(${Boost_INCLUDE_DIR}) |
|
target_link_libraries(torrent-rasterbar ${Boost_LIBRARIES}) |
|
|
|
# this works around a bug in asio in boost-1.39 |
|
add_definitions(-DBOOST_ASIO_HASH_MAP_BUCKETS=1021 -DBOOST_ASIO_DYN_LINK -D__USE_W32_SOCKETS -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0500) |
|
|
|
add_definitions(-DBOOST_DATE_TIME_DYN_LINK -DBOOST_THREAD_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_CHRONO_DYN_LINK) |
|
|
|
if (WIN32) |
|
target_link_libraries(torrent-rasterbar wsock32 ws2_32) |
|
endif (WIN32) |
|
|
|
if (encryption) |
|
FIND_PACKAGE(OpenSSL REQUIRED) |
|
add_definitions(-DTORRENT_USE_OPENSSL) |
|
include_directories(${OPENSSL_INCLUDE_DIR}) |
|
target_link_libraries(torrent-rasterbar ${OPENSSL_LIBRARIES}) |
|
else (encryption) |
|
add_definitions(-DTORRENT_DISABLE_ENCRYPTION) |
|
list(APPEND sources sha1) |
|
endif (encryption) |
|
|
|
if (NOT pool-allocators) |
|
add_definitions(-DTORRENT_DISABLE_POOL_ALLOCATOR) |
|
endif (NOT pool-allocators) |
|
|
|
if (NOT geoip) |
|
add_definitions(-DTORRENT_DISABLE_GEO_IP) |
|
endif (NOT geoip) |
|
|
|
if (NOT resolve-countries) |
|
add_definitions(-DTORRENT_DISABLE_RESOLVE_COUNTRIES) |
|
endif (NOT resolve-countries) |
|
|
|
if (unicode) |
|
add_definitions(-DUNICODE -D_UNICODE) |
|
endif (unicode) |
|
|
|
if (NOT deprecated-functions) |
|
add_definitions(-DTORRENT_NO_DEPRECATE) |
|
endif (NOT deprecated-functions) |
|
|
|
if (exceptions) |
|
if (MSVC) |
|
add_definitions(/EHsc) |
|
else (MSVC) |
|
add_definitions(-fexceptions) |
|
endif (MSVC) |
|
else (exceptions) |
|
add_definitions(-fno-exceptions) |
|
endif (exceptions) |
|
|
|
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) |
|
# for multi-core compilation |
|
add_definitions(/MP) |
|
|
|
# <toolset>msvc,<variant>release:<linkflags>/OPT:ICF=5 |
|
# <toolset>msvc,<variant>release:<linkflags>/OPT:REF |
|
endif(MSVC) |
|
|
|
add_definitions(-D_FILE_OFFSET_BITS=64) |
|
add_definitions(-DBOOST_DISABLE_EXCEPTION) |
|
add_definitions(-DBOOST_ASIO_ENABLE_CANCELIO) |
|
|
|
if (tcmalloc) |
|
target_link_libraries(torrent-rasterbar tcmalloc) |
|
endif (tcmalloc) |
|
|
|
include_directories(${includes}) |
|
|
|
set_target_properties(torrent-rasterbar PROPERTIES |
|
SOVERSION 1 |
|
VERSION 1) |
|
|
|
set (VERSION "1.0.0") |
|
|
|
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) |
|
|
|
if (MSVC) |
|
configure_file(libtorrent-rasterbar-cmake.pc.in libtorrent-rasterbar.pc) |
|
endif (MSVC) |
|
|
|
string (COMPARE EQUAL "${CMAKE_SIZEOF_VOID_P}" "8" IS64BITS) |
|
|
|
if (IS64BITS AND RESPECTLIB64) |
|
set (LIBDIR "lib64") |
|
else (IS64BITS AND RESPECTLIB64) |
|
set (LIBDIR "lib") |
|
endif (IS64BITS AND RESPECTLIB64) |
|
|
|
install(TARGETS torrent-rasterbar DESTINATION ${LIBDIR} CONFIGURATIONS release) |
|
install(DIRECTORY include/libtorrent |
|
DESTINATION include |
|
PATTERN ".svn" EXCLUDE) |
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig) |
|
|
|
# === build examples === |
|
if(build_examples) |
|
set(examples client_test dump_torrent simple_client enum_if make_torrent) |
|
|
|
foreach(s ${examples}) |
|
add_executable(${s} examples/${s}.cpp) |
|
target_link_libraries(${s} torrent-rasterbar) |
|
endforeach(s) |
|
|
|
include_directories(${Boost_INCLUDE_DIR}) |
|
endif(build_examples) |
|
# === build tests === |
|
if(build_tests) |
|
set(tests |
|
test_file_storage |
|
test_auto_unchoke |
|
test_http_connection |
|
test_buffer |
|
test_utp |
|
test_storage |
|
test_torrent |
|
test_dht |
|
test_transfer |
|
test_piece_picker |
|
test_fast_extension |
|
test_pe_crypto |
|
test_peer_priority |
|
test_bencoding |
|
test_bdecode_performance |
|
test_primitives |
|
test_ip_filter |
|
test_hasher |
|
test_metadata_extension |
|
test_trackers_extension |
|
test_swarm |
|
test_lsd |
|
test_pex |
|
test_web_seed |
|
test_bandwidth_limiter |
|
test_session |
|
test_torrent_parse |
|
test_threads |
|
) |
|
|
|
add_library(test_common STATIC test/main.cpp test/setup_transfer.cpp) |
|
enable_testing() |
|
|
|
foreach(s ${tests}) |
|
add_executable(${s} test/${s}.cpp) |
|
target_link_libraries(${s} torrent-rasterbar test_common) |
|
add_test(${s} ${s}) |
|
endforeach(s) |
|
|
|
add_executable(test_upnp test/test_upnp.cpp) |
|
target_link_libraries(test_upnp torrent-rasterbar) |
|
|
|
add_executable(test_natpmp test/test_natpmp.cpp) |
|
target_link_libraries(test_natpmp torrent-rasterbar) |
|
endif(build_tests)
|
|
|