0 Star 0 Fork 0

evine / libtorrent

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
CMakeLists.txt 24.98 KB
一键复制 编辑 原始数据 按行查看 历史
Raymond Wong 提交于 2022-04-04 18:08 . cmake: refine atomics check
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) # Configurable policies: <= CMP0097
cmake_policy(SET CMP0091 NEW)
cmake_policy(SET CMP0092 NEW)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
include(LibtorrentMacros)
read_version("${CMAKE_CURRENT_SOURCE_DIR}/include/libtorrent/version.hpp" VER_MAJOR VER_MINOR VER_TINY)
project(libtorrent
DESCRIPTION "Bittorrent library"
VERSION ${VER_MAJOR}.${VER_MINOR}.${VER_TINY}
)
set (SOVERSION "${VER_MAJOR}.${VER_MINOR}")
include(GNUInstallDirs)
include(GeneratePkgConfig)
set(libtorrent_include_files
add_torrent_params.hpp
address.hpp
alert.hpp
alert_types.hpp
announce_entry.hpp
assert.hpp
bdecode.hpp
bencode.hpp
bitfield.hpp
bloom_filter.hpp
bt_peer_connection.hpp
choker.hpp
client_data.hpp
close_reason.hpp
config.hpp
copy_ptr.hpp
crc32c.hpp
create_torrent.hpp
deadline_timer.hpp
debug.hpp
disk_buffer_holder.hpp
disk_interface.hpp
disk_observer.hpp
download_priority.hpp
entry.hpp
enum_net.hpp
error.hpp
error_code.hpp
extensions.hpp
file.hpp
file_storage.hpp
fingerprint.hpp
flags.hpp
fwd.hpp
gzip.hpp
hash_picker.hpp
hasher.hpp
hex.hpp
http_connection.hpp
http_parser.hpp
http_seed_connection.hpp
http_stream.hpp
http_tracker_connection.hpp
i2p_stream.hpp
identify_client.hpp
index_range.hpp
io.hpp
io_service.hpp
ip_filter.hpp
ip_voter.hpp
libtorrent.hpp
link.hpp
lsd.hpp
magnet_uri.hpp
mmap_disk_io.hpp
mmap_storage.hpp
natpmp.hpp
netlink.hpp
operations.hpp
optional.hpp
parse_url.hpp
part_file.hpp
peer.hpp
peer_class.hpp
peer_class_set.hpp
peer_class_type_filter.hpp
peer_connection.hpp
peer_connection_handle.hpp
peer_connection_interface.hpp
peer_id.hpp
peer_info.hpp
peer_list.hpp
peer_request.hpp
performance_counters.hpp
pex_flags.hpp
piece_block.hpp
piece_block_progress.hpp
piece_picker.hpp
platform_util.hpp
portmap.hpp
proxy_base.hpp
puff.hpp
random.hpp
read_resume_data.hpp
request_blocks.hpp
resolve_links.hpp
session.hpp
session_handle.hpp
session_params.hpp
session_settings.hpp
session_stats.hpp
session_status.hpp
session_types.hpp
settings_pack.hpp
sha1.hpp
sha1_hash.hpp
sha256.hpp
sliding_average.hpp
socket.hpp
socket_io.hpp
socket_type.hpp
socks5_stream.hpp
span.hpp
ssl.hpp
ssl_stream.hpp
stack_allocator.hpp
stat.hpp
stat_cache.hpp
storage_defs.hpp
string_util.hpp
string_view.hpp
tailqueue.hpp
time.hpp
torrent.hpp
torrent_flags.hpp
torrent_handle.hpp
torrent_info.hpp
torrent_peer.hpp
torrent_peer_allocator.hpp
torrent_status.hpp
tracker_manager.hpp
truncate.hpp
udp_socket.hpp
udp_tracker_connection.hpp
union_endpoint.hpp
units.hpp
upnp.hpp
utf8.hpp
vector_utils.hpp
version.hpp
web_connection_base.hpp
web_peer_connection.hpp
write_resume_data.hpp
xml_parse.hpp
)
set(libtorrent_kademlia_include_files
announce_flags.hpp
dht_observer.hpp
dht_settings.hpp
dht_state.hpp
dht_storage.hpp
dht_tracker.hpp
direct_request.hpp
dos_blocker.hpp
ed25519.hpp
find_data.hpp
get_item.hpp
get_peers.hpp
io.hpp
item.hpp
msg.hpp
node.hpp
node_entry.hpp
node_id.hpp
observer.hpp
put_data.hpp
refresh.hpp
routing_table.hpp
rpc_manager.hpp
sample_infohashes.hpp
traversal_algorithm.hpp
types.hpp
)
set(libtorrent_extensions_include_files
smart_ban.hpp
ut_metadata.hpp
ut_pex.hpp
)
set(libtorrent_aux_include_files
alert_manager.hpp
aligned_storage.hpp
aligned_union.hpp
alloca.hpp
allocating_handler.hpp
apply_pad_files.hpp
array.hpp
bandwidth_limit.hpp
bandwidth_manager.hpp
bandwidth_queue_entry.hpp
bandwidth_socket.hpp
bind_to_device.hpp
buffer.hpp
byteswap.hpp
chained_buffer.hpp
cpuid.hpp
deferred_handler.hpp
deprecated.hpp
deque.hpp
dev_random.hpp
directory.hpp
disable_warnings_pop.hpp
disable_warnings_push.hpp
disk_buffer_pool.hpp
mmap_disk_job.hpp
disk_io_thread_pool.hpp
disk_job_fence.hpp
disk_job_pool.hpp
ed25519.hpp
escape_string.hpp
export.hpp
ffs.hpp
file_progress.hpp
file_view_pool.hpp
has_block.hpp
heterogeneous_queue.hpp
instantiate_connection.hpp
invariant_check.hpp
io.hpp
ip_helpers.hpp
ip_notifier.hpp
keepalive.hpp
listen_socket_handle.hpp
lsd.hpp
merkle.hpp
merkle_tree.hpp
noexcept_movable.hpp
numeric_cast.hpp
packet_buffer.hpp
packet_pool.hpp
path.hpp
polymorphic_socket.hpp
pool.hpp
portmap.hpp
posix_part_file.hpp
proxy_settings.hpp
range.hpp
receive_buffer.hpp
resolver.hpp
resolver_interface.hpp
scope_end.hpp
session_call.hpp
session_impl.hpp
session_interface.hpp
session_settings.hpp
session_udp_sockets.hpp
set_socket_buffer.hpp
set_traffic_class.hpp
set_traffic_class.hpp
socket_type.hpp
storage_free_list.hpp
storage_utils.hpp
string_ptr.hpp
strview_less.hpp
suggest_piece.hpp
throw.hpp
time.hpp
timestamp_history.hpp
torrent_impl.hpp
torrent_list.hpp
unique_ptr.hpp
utp_socket_manager.hpp
utp_stream.hpp
vector.hpp
win_crypto_provider.hpp
win_util.hpp
)
set(try_signal_include_files
try_signal
signal_error_code
try_signal_mingw
try_signal_msvc
try_signal_posix
)
set(sources
add_torrent_params.cpp
alert.cpp
alert_manager.cpp
announce_entry.cpp
assert.cpp
bandwidth_limit.cpp
bandwidth_manager.cpp
bandwidth_queue_entry.cpp
bdecode.cpp
bitfield.cpp
bloom_filter.cpp
bt_peer_connection.cpp
chained_buffer.cpp
choker.cpp
close_reason.cpp
copy_file.cpp
cpuid.cpp
crc32c.cpp
create_torrent.cpp
directory.cpp
disabled_disk_io.cpp
disk_buffer_holder.cpp
disk_buffer_pool.cpp
disk_interface.cpp
disk_io_thread_pool.cpp
disk_job_fence.cpp
disk_job_pool.cpp
entry.cpp
enum_net.cpp
error_code.cpp
escape_string.cpp
ffs.cpp
file.cpp
file_progress.cpp
file_storage.cpp
file_view_pool.cpp
fingerprint.cpp
generate_peer_id.cpp
gzip.cpp
hash_picker.cpp
hasher.cpp
hex.cpp
http_connection.cpp
http_parser.cpp
http_seed_connection.cpp
http_tracker_connection.cpp
i2p_stream.cpp
identify_client.cpp
instantiate_connection.cpp
ip_filter.cpp
ip_helpers.cpp
ip_notifier.cpp
ip_voter.cpp
listen_socket_handle.cpp
lsd.cpp
magnet_uri.cpp
merkle.cpp
merkle_tree.cpp
mmap.cpp
mmap_disk_io.cpp
mmap_disk_job.cpp
mmap_storage.cpp
natpmp.cpp
packet_buffer.cpp
parse_url.cpp
part_file.cpp
path.cpp
peer_class.cpp
peer_class_set.cpp
peer_connection.cpp
peer_connection_handle.cpp
peer_info.cpp
peer_list.cpp
performance_counters.cpp
piece_picker.cpp
platform_util.cpp
posix_disk_io.cpp
posix_part_file.cpp
posix_storage.cpp
proxy_base.cpp
proxy_settings.cpp
puff.cpp
random.cpp
read_resume_data.cpp
receive_buffer.cpp
request_blocks.cpp
resolve_links.cpp
resolver.cpp
session.cpp
session_call.cpp
session_handle.cpp
session_impl.cpp
session_params.cpp
session_settings.cpp
session_stats.cpp
settings_pack.cpp
sha1.cpp
sha1_hash.cpp
sha256.cpp
socket_io.cpp
socket_type.cpp
socks5_stream.cpp
ssl.cpp
stack_allocator.cpp
stat.cpp
stat_cache.cpp
storage_utils.cpp
string_util.cpp
time.cpp
timestamp_history.cpp
torrent.cpp
torrent_handle.cpp
torrent_info.cpp
torrent_peer.cpp
torrent_peer_allocator.cpp
torrent_status.cpp
tracker_manager.cpp
truncate.cpp
udp_socket.cpp
udp_tracker_connection.cpp
upnp.cpp
utf8.cpp
utp_socket_manager.cpp
utp_stream.cpp
version.cpp
web_connection_base.cpp
web_peer_connection.cpp
write_resume_data.cpp
xml_parse.cpp
# -- extensions --
smart_ban.cpp
ut_pex.cpp
ut_metadata.cpp
)
# -- kademlia --
set(kademlia_sources
dht_settings.cpp
dht_state.cpp
dht_storage.cpp
dht_tracker.cpp
dos_blocker.cpp
ed25519.cpp
find_data.cpp
get_item.cpp
get_peers.cpp
item.cpp
msg.cpp
node.cpp
node_entry.cpp
node_id.cpp
put_data.cpp
refresh.cpp
routing_table.cpp
rpc_manager.cpp
sample_infohashes.cpp
traversal_algorithm.cpp
)
# -- ed25519 --
set(ed25519_sources
add_scalar.cpp
fe.cpp
ge.cpp
key_exchange.cpp
keypair.cpp
sc.cpp
sign.cpp
verify.cpp
sha512.cpp
hasher512.cpp
)
set(try_signal_sources
try_signal.cpp
signal_error_code.cpp
)
list(TRANSFORM sources PREPEND "src/")
list(TRANSFORM kademlia_sources PREPEND "src/kademlia/")
list(TRANSFORM ed25519_sources PREPEND "src/ed25519/")
list(TRANSFORM libtorrent_include_files PREPEND "include/libtorrent/")
list(TRANSFORM libtorrent_extensions_include_files PREPEND "include/libtorrent/extensions/")
list(TRANSFORM libtorrent_aux_include_files PREPEND "include/libtorrent/aux_/")
list(TRANSFORM libtorrent_kademlia_include_files PREPEND "include/libtorrent/kademlia/")
list(TRANSFORM try_signal_sources PREPEND "deps/try_signal/")
# these options control target creation and thus have to be declared before the add_library() call
feature_option(BUILD_SHARED_LIBS "build libtorrent as a shared library" ON)
feature_option(static_runtime "build libtorrent with static runtime" OFF)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_public_dependency(Threads REQUIRED)
if(CMAKE_CXX_COMPILER_ID MATCHES Clang)
add_compile_options(
-Weverything
-Wno-c++98-compat-pedantic
-Wno-c++11-compat-pedantic
-Wno-padded
-Wno-alloca
-Wno-global-constructors
-Wno-exit-time-destructors
-Wno-weak-vtables
-Wno-return-std-move-in-c++11
-Wno-unknown-warning-option
)
elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
add_compile_options(
-Wall
-Wextra
-Wpedantic
-Wvla
-Wno-noexcept-type
-Wno-format-zero-length
-ftemplate-depth=512
)
elseif(MSVC)
add_compile_options(
/W4
# C4251: 'identifier' : class 'type' needs to have dll-interface to be
# used by clients of class 'type2'
/wd4251
# C4268: 'identifier' : 'const' static/global data initialized
# with compiler generated default constructor fills the object with zeros
/wd4268
# C4275: non DLL-interface classkey 'identifier' used as base for
# DLL-interface classkey 'identifier'
/wd4275
# C4373: virtual function overrides, previous versions of the compiler
# did not override when parameters only differed by const/volatile qualifiers
/wd4373
# C4503: 'identifier': decorated name length exceeded, name was truncated
/wd4503
)
endif()
if(static_runtime)
if (MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
else()
include(ucm_flags)
ucm_set_runtime(STATIC)
endif()
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME ON)
set(OPENSSL_MSVC_STATIC_RT ON)
endif()
if (NOT BUILD_SHARED_LIBS)
set(Boost_USE_STATIC_LIBS ON)
set(OPENSSL_USE_STATIC_LIBS ON)
endif()
add_library(torrent-rasterbar
${sources}
${try_signal_sources}
${libtorrent_include_files}
${libtorrent_extensions_include_files}
${libtorrent_aux_include_files}
)
# C++ 14 support is required
target_compile_features(torrent-rasterbar
PUBLIC
cxx_std_14
cxx_attribute_deprecated
cxx_binary_literals
cxx_contextual_conversions
cxx_decltype_auto
cxx_digit_separators
cxx_generic_lambdas
cxx_lambda_init_captures
cxx_relaxed_constexpr
cxx_variable_templates
)
if (BUILD_SHARED_LIBS)
target_compile_definitions(torrent-rasterbar
PRIVATE TORRENT_BUILDING_SHARED
INTERFACE TORRENT_LINKING_SHARED
)
endif()
set_target_properties(torrent-rasterbar
PROPERTIES
CXX_VISIBILITY_PRESET "hidden"
VISIBILITY_INLINES_HIDDEN "true"
VERSION ${PROJECT_VERSION}
SOVERSION ${SOVERSION}
)
target_include_directories(torrent-rasterbar PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PRIVATE deps/try_signal
)
target_compile_definitions(torrent-rasterbar
PUBLIC
$<$<CONFIG:Debug>:TORRENT_USE_ASSERTS>
BOOST_ASIO_ENABLE_CANCELIO
BOOST_ASIO_NO_DEPRECATED
PRIVATE
TORRENT_BUILDING_LIBRARY
_FILE_OFFSET_BITS=64
BOOST_EXCEPTION_DISABLE
BOOST_ASIO_HAS_STD_CHRONO
)
target_link_libraries(torrent-rasterbar
PUBLIC
Threads::Threads
)
# Unconditional platform-specific settings
if (WIN32)
target_link_libraries(torrent-rasterbar
PUBLIC
bcrypt mswsock ws2_32 iphlpapi
debug dbghelp crypt32
)
add_definitions(-D_WIN32_WINNT=0x0600) # target Windows Vista or later
target_compile_definitions(torrent-rasterbar
PUBLIC WIN32_LEAN_AND_MEAN # prevent winsock1 to be included
)
if (MSVC)
target_compile_definitions(torrent-rasterbar
PUBLIC
BOOST_ALL_NO_LIB
_SCL_SECURE_NO_DEPRECATE _CRT_SECURE_NO_DEPRECATE # disable bogus deprecation warnings on msvc8
)
target_compile_options(torrent-rasterbar
PRIVATE
# https://docs.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-170
/utf-8
# https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
/Zc:__cplusplus
/MP # for multi-core compilation
/bigobj # increase the number of sections for obj files
)
set_target_properties(torrent-rasterbar PROPERTIES LINK_FLAGS_RELEASE "/OPT:ICF=5 /OPT:REF")
endif()
endif()
if (ANDROID)
target_link_libraries(torrent-rasterbar PRIVATE ${CMAKE_DL_LIBS})
endif()
if (APPLE)
# for ip_notifier
target_link_libraries(torrent-rasterbar PRIVATE "-framework CoreFoundation" "-framework SystemConfiguration")
endif()
# check if we need to link with libatomic (not needed on MSVC)
if (NOT Windows)
# TODO: migrate to CheckSourceCompiles in CMake >= 3.19
include(CheckCXXSourceCompiles)
set(ATOMICS_TEST_SOURCE [=[
#include <atomic>
#include <cstdint>
std::atomic<int> x{0};
int main() {
x.fetch_add(1, std::memory_order_relaxed);
return 0;
}
]=])
string(REPLACE "std::atomic<int>" "std::atomic<std::int8_t>" ATOMICS8_TEST_SOURCE "${ATOMICS_TEST_SOURCE}")
string(REPLACE "std::atomic<int>" "std::atomic<std::int64_t>" ATOMICS64_TEST_SOURCE "${ATOMICS_TEST_SOURCE}")
if(APPLE)
set(CMAKE_REQUIRED_FLAGS "-std=c++11")
endif()
check_cxx_source_compiles("${ATOMICS_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITHOUT_LIB)
check_cxx_source_compiles("${ATOMICS8_TEST_SOURCE}" HAVE_CXX_ATOMICS8_WITHOUT_LIB)
check_cxx_source_compiles("${ATOMICS64_TEST_SOURCE}" HAVE_CXX_ATOMICS64_WITHOUT_LIB)
if((NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) OR (NOT HAVE_CXX_ATOMICS8_WITHOUT_LIB) OR (NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB))
set(CMAKE_REQUIRED_LIBRARIES "atomic")
check_cxx_source_compiles("${ATOMICS_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITH_LIB)
check_cxx_source_compiles("${ATOMICS8_TEST_SOURCE}" HAVE_CXX_ATOMICS8_WITH_LIB)
check_cxx_source_compiles("${ATOMICS64_TEST_SOURCE}" HAVE_CXX_ATOMICS64_WITH_LIB)
if ((NOT HAVE_CXX_ATOMICS_WITH_LIB) OR (NOT HAVE_CXX_ATOMICS8_WITH_LIB) OR (NOT HAVE_CXX_ATOMICS64_WITH_LIB))
message(FATAL_ERROR "No native support for std::atomic, or libatomic not found!")
else()
message(STATUS "Linking with libatomic for atomics support")
unset(CMAKE_REQUIRED_LIBRARIES)
target_link_libraries(torrent-rasterbar PUBLIC atomic)
endif()
endif()
if(APPLE)
unset(CMAKE_REQUIRED_FLAGS)
endif()
endif()
feature_option(build_tests "build tests" OFF)
feature_option(build_examples "build examples" OFF)
feature_option(build_tools "build tools" OFF)
feature_option(python-bindings "build python bindings" OFF)
feature_option(python-egg-info "generate python egg info" OFF)
feature_option(python-install-system-dir "Install python bindings to the system installation directory rather than the CMake installation prefix" OFF)
# these options require existing target
feature_option(dht "enable support for Mainline DHT" ON)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME deprecated-functions DEFAULT ON
DESCRIPTION "enable deprecated functions for backwards compatibility" DISABLED TORRENT_NO_DEPRECATE)
feature_option(encryption "Enables encryption in libtorrent" ON)
feature_option(exceptions "build with exception support" ON)
feature_option(gnutls "build using GnuTLS instead of OpenSSL" OFF)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME extensions DEFAULT ON
DESCRIPTION "Enables protocol extensions" DISABLED TORRENT_DISABLE_EXTENSIONS)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME i2p DEFAULT ON
DESCRIPTION "build with I2P support" DISABLED TORRENT_USE_I2P=0)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME logging DEFAULT ON
DESCRIPTION "build with logging" DISABLED TORRENT_DISABLE_LOGGING)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME mutable-torrents DEFAULT ON
DESCRIPTION "Enables mutable torrent support" DISABLED TORRENT_DISABLE_MUTABLE_TORRENTS)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME streaming DEFAULT ON
DESCRIPTION "Enables support for piece deadline" DISABLED TORRENT_DISABLE_STREAMING)
if(NOT gnutls)
find_public_dependency(OpenSSL)
set_package_properties(OpenSSL
PROPERTIES
URL "https://www.openssl.org/"
DESCRIPTION "Full-strength general purpose cryptography library"
TYPE RECOMMENDED
PURPOSE "Provides HTTPS support to libtorrent"
)
if(TARGET OpenSSL::SSL)
# TODO: needed until https://gitlab.kitware.com/cmake/cmake/issues/19263 is fixed
if(WIN32 AND OPENSSL_USE_STATIC_LIBS)
target_link_libraries(torrent-rasterbar PRIVATE crypt32)
endif()
target_link_libraries(torrent-rasterbar PUBLIC OpenSSL::SSL)
target_compile_definitions(torrent-rasterbar
PUBLIC
TORRENT_USE_OPENSSL
TORRENT_USE_LIBCRYPTO
TORRENT_SSL_PEERS
OPENSSL_NO_SSL2)
endif()
endif()
if(gnutls OR NOT TARGET OpenSSL::SSL)
find_public_dependency(GnuTLS)
set_package_properties(GnuTLS
PROPERTIES
URL "https://www.gnutls.org/"
DESCRIPTION "GnuTLS is a free software implementation of the TLS and DTLS protocols"
TYPE RECOMMENDED
PURPOSE "Provides HTTPS support to libtorrent"
)
if(GNUTLS_FOUND)
target_link_libraries(torrent-rasterbar PUBLIC GnuTLS::GnuTLS)
target_compile_definitions(torrent-rasterbar
PUBLIC
TORRENT_USE_GNUTLS
TORRENT_SSL_PEERS)
target_include_directories(torrent-rasterbar PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps/asio-gnutls/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
install(DIRECTORY deps/asio-gnutls/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
elseif(gnutls)
message(FATAL_ERROR "GnuTLS library not found")
endif()
endif()
if (NOT GNUTLS_FOUND AND NOT TARGET OpenSSL::SSL)
if(TARGET OpenSSL::Crypto)
target_link_libraries(torrent-rasterbar PUBLIC OpenSSL::Crypto)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_LIBCRYPTO)
else()
find_public_dependency(LibGcrypt)
set_package_properties(LibGcrypt
PROPERTIES
URL "https://www.gnupg.org/software/libgcrypt/index.html"
DESCRIPTION "A general purpose cryptographic library"
TYPE RECOMMENDED
PURPOSE "Use GCrypt instead of the built-in functions for RC4 and SHA1"
)
if (LibGcrypt_FOUND)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_LIBGCRYPT)
target_link_libraries(torrent-rasterbar PRIVATE LibGcrypt::LibGcrypt)
endif()
endif()
endif()
if (encryption)
target_sources(torrent-rasterbar PRIVATE include/libtorrent/pe_crypto.hpp src/pe_crypto.cpp)
else()
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_ENCRYPTION)
endif()
if (dht)
target_sources(torrent-rasterbar PRIVATE
${libtorrent_kademlia_include_files}
include/libtorrent/aux_/hasher512.hpp
${kademlia_sources}
${ed25519_sources}
)
else()
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_DHT)
endif()
# Boost
find_public_dependency(Boost REQUIRED)
target_link_libraries(torrent-rasterbar PUBLIC Boost::headers)
if (Boost_MAJOR_VERSION LESS_EQUAL 1 AND Boost_MINOR_VERSION LESS 69)
find_package(Boost REQUIRED COMPONENTS system)
target_link_libraries(torrent-rasterbar PUBLIC Boost::system)
endif()
if (exceptions)
if (MSVC)
target_compile_options(torrent-rasterbar PUBLIC /EHsc)
else (MSVC)
target_compile_options(torrent-rasterbar PUBLIC -fexceptions)
endif (MSVC)
else()
if (MSVC)
target_compile_definitions(torrent-rasterbar PUBLIC _HAS_EXCEPTIONS=0)
else (MSVC)
target_compile_options(torrent-rasterbar PUBLIC -fno-exceptions)
endif (MSVC)
endif()
# developer options
option(developer-options "Activates options useful for a developer")
if(developer-options)
set(asserts "auto" CACHE STRING "use assertions")
set_property(CACHE asserts PROPERTY STRINGS auto on off production system)
if ("${asserts}" MATCHES "on|production|system")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_ASSERTS=1)
endif()
if ("${asserts}" STREQUAL "production")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_PRODUCTION_ASSERTS=1)
elseif("${asserts}" STREQUAL "system")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_SYSTEM_ASSERTS=1)
endif()
target_optional_compile_definitions(torrent-rasterbar PUBLIC NAME asio-debugging DEFAULT OFF
ENABLED TORRENT_ASIO_DEBUGGING)
target_optional_compile_definitions(torrent-rasterbar PUBLIC NAME picker-debugging DEFAULT OFF
ENABLED TORRENT_DEBUG_REFCOUNTS)
set(invariant-checks "off" CACHE STRING "")
set_property(CACHE invariant-checks PROPERTY STRINGS off on full)
if (invariant-checks MATCHES "on|full")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_INVARIANT_CHECKS=1)
endif()
if (invariant-checks STREQUAL "full")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_EXPENSIVE_INVARIANT_CHECKS)
endif()
target_optional_compile_definitions(torrent-rasterbar PUBLIC NAME utp-log DEFAULT OFF
ENABLED TORRENT_UTP_LOG_ENABLE)
target_optional_compile_definitions(torrent-rasterbar PUBLIC NAME simulate-slow-read DEFAULT OFF
ENABLED TORRENT_SIMULATE_SLOW_READ)
option(debug-iterators "" OFF)
if (debug-iterators)
if (MSVC)
target_compile_definitions(torrent-rasterbar PUBLIC _ITERATOR_DEBUG_LEVEL=2)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
target_compile_definitions(torrent-rasterbar PUBLIC _GLIBCXX_DEBUG _GLIBCXX_DEBUG_PEDANTIC)
endif()
endif()
target_optional_compile_definitions(torrent-rasterbar PUBLIC NAME profile-calls DEFAULT OFF
ENABLED TORRENT_PROFILE_CALLS=1)
endif()
# This is best effort attempt to propagate whether the library was built with
# C++11 or not. It affects the ABI of entry. A client building with C++14 and
# linking against a libtorrent binary built with C++11 can still define
# TORRENT_CXX11_ABI
if ("${CMAKE_CXX_STANDARD}" STREQUAL "11")
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_CXX11_ABI)
endif()
# There is little to none support for using pkg-config with MSVC and most users won't bother with it.
# However, msys is a linux-like platform on Windows that do support/prefer using pkg-config.
if (NOT MSVC)
generate_and_install_pkg_config_file(torrent-rasterbar libtorrent-rasterbar)
endif()
include(CheckCXXCompilerFlag)
add_subdirectory(bindings)
if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
file(RELATIVE_PATH CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_LIBDIR}")
endif()
install(TARGETS torrent-rasterbar EXPORT LibtorrentRasterbarTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(DIRECTORY include/libtorrent DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h*")
# === generate a CMake Config File ===
include(CMakePackageConfigHelpers)
set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/LibtorrentRasterbar)
string(REGEX REPLACE "([^;]+)" "find_dependency(\\1)" _find_dependency_calls "${_package_dependencies}")
string(REPLACE ";" "\n" _find_dependency_calls "${_find_dependency_calls}")
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/LibtorrentRasterbar/LibtorrentRasterbarConfigVersion.cmake"
VERSION ${libtorrent_VERSION}
COMPATIBILITY AnyNewerVersion
)
export(EXPORT LibtorrentRasterbarTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/LibtorrentRasterbar/LibtorrentRasterbarTargets.cmake"
NAMESPACE LibtorrentRasterbar::
)
configure_package_config_file(LibtorrentRasterbarConfig.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/LibtorrentRasterbar/LibtorrentRasterbarConfig.cmake"
INSTALL_DESTINATION "${ConfigPackageLocation}"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
install(EXPORT LibtorrentRasterbarTargets
NAMESPACE
LibtorrentRasterbar::
DESTINATION
${ConfigPackageLocation}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/LibtorrentRasterbar/LibtorrentRasterbarConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/LibtorrentRasterbar/LibtorrentRasterbarConfigVersion.cmake"
DESTINATION
${ConfigPackageLocation}
)
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/examples/cmake/FindLibtorrentRasterbar.cmake
DESTINATION
${CMAKE_INSTALL_DATADIR}/cmake/Modules
)
if (MSVC)
set_target_properties(torrent-rasterbar
PROPERTIES
PDB_NAME torrent-rasterbar
PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
COMPILE_PDB_NAME torrent-rasterbar
COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)
if (static_runtime)
set(PDB_INSTALL_DIR lib)
else()
set(PDB_INSTALL_DIR bin)
endif()
install(
FILES
${CMAKE_BINARY_DIR}/torrent-rasterbar.pdb
DESTINATION
${PDB_INSTALL_DIR}
CONFIGURATIONS
Debug RelWithDebInfo
OPTIONAL
)
endif()
# === build tools ===
if (build_tools)
add_subdirectory(tools)
endif()
# === build examples ===
if (build_examples)
add_subdirectory(examples)
endif()
# === build tests ===
if(build_tests)
enable_testing()
# this will make some internal functions available in the DLL interface
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_EXPORT_EXTRA)
add_subdirectory(test)
endif()
feature_summary(DEFAULT_DESCRIPTION WHAT ALL)
1
https://gitee.com/evine/libtorrent.git
git@gitee.com:evine/libtorrent.git
evine
libtorrent
libtorrent
RC_2_0

搜索帮助