premiere-libtorrent/CMakeLists.txt

742 lines
15 KiB
CMake

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(libtorrent)
set (SOVERSION "10")
set (VERSION "1.2.0")
list(APPEND CMAKE_MODULE_PATH ${libtorrent_SOURCE_DIR}/cmake/Modules)
set(libtorrent_include_files
add_torrent_params
address
alert
alert_manager
alert_types
allocator
announce_entry
assert
bandwidth_limit
bandwidth_manager
bandwidth_queue_entry
bandwidth_socket
bdecode
bencode
bitfield
block_cache
bloom_filter
broadcast_socket
bt_peer_connection
buffer
build_config
chained_buffer
choker
close_reason
config
ConvertUTF
copy_ptr
crc32c
create_torrent
deadline_timer
debug
disk_buffer_holder
disk_buffer_pool
disk_interface
disk_io_job
disk_io_thread
disk_io_thread_pool
disk_job_pool
disk_observer
download_priority
ed25519
entry
enum_net
error
error_code
export
extensions
file
file_pool
file_storage
fingerprint
flags
fwd
gzip
hasher
hasher512
heterogeneous_queue
hex
http_connection
http_parser
http_seed_connection
http_stream
http_tracker_connection
i2p_stream
identify_client
instantiate_connection
invariant_check
io
io_service
io_service_fwd
ip_filter
ip_voter
lazy_entry
link
linked_list
lsd
magnet_uri
natpmp
netlink
operations
optional
packet_buffer
packet_pool
parse_url
part_file
pe_crypto
peer
peer_class
peer_class_set
peer_class_type_filter
peer_connection
peer_connection_handle
peer_connection_interface
peer_id
peer_info
peer_list
peer_request
performance_counters
pex_flags
piece_block
piece_block_progress
piece_picker
platform_util
portmap
proxy_base
puff
random
read_resume_data
receive_buffer
request_blocks
resolve_links
resolver
resolver_interface
session
session_handle
session_settings
session_stats
session_status
session_types
settings_pack
sha1
sha1_hash
sha512
sliding_average
socket
socket_io
socks5_stream
span
ssl_stream
stack_allocator
stat
stat_cache
storage
storage_defs
string_util
string_view
tailqueue
time
timestamp_history
torrent
torrent_flags
torrent_handle
torrent_info
torrent_peer
torrent_peer_allocator
torrent_status
tracker_manager
udp_socket
udp_tracker_connection
union_endpoint
units
upnp
utf8
utp_socket_manager
utp_stream
vector_utils
version
web_connection_base
web_peer_connection
write_resume_data
xml_parse)
set(libtorrent_kademlia_include_files
dht_observer
dht_settings
dht_state
dht_storage
dht_tracker
direct_request
dos_blocker
ed25519
find_data
get_item
get_peers
io
item
msg
node
node_entry
node_id
observer
put_data
refresh
routing_table
rpc_manager
sample_infohashes
traversal_algorithm
types)
set(libtorrent_extensions_include_files
smart_ban
ut_metadata
ut_pex)
set(libtorrent_aux_include_files
aligned_storage
aligned_union
alloca
allocating_handler
array
bind_to_device
block_cache_reference
byteswap
cppint_import_export
cpuid
deferred_handler
deque
dev_random
disable_warnings_pop
disable_warnings_push
disk_job_fence
escape_string
ffs
file_progress
has_block
io
ip_notifier
listen_socket_handle
lsd
max_path
merkle
noexcept_movable
numeric_cast
openssl
path
portmap
proxy_settings
range
route
scope_end
session_call
session_impl
session_interface
session_settings
session_udp_sockets
set_socket_buffer
socket_type
storage_piece_set
storage_utils
string_ptr
suggest_piece
throw
time
torrent_impl
typed_span
unique_ptr
vector
win_crypto_provider
win_util)
foreach(s ${libtorrent_include_files})
list(APPEND include_files include/libtorrent/${s})
endforeach(s)
foreach(s ${libtorrent_kademlia_include_files})
list(APPEND include_files include/libtorrent/kademlia/${s})
endforeach(s)
foreach(s ${libtorrent_extensions_include_files})
list(APPEND include_files include/libtorrent/extensions/${s})
endforeach(s)
foreach(s ${libtorrent_aux_include_files})
list(APPEND include_files include/libtorrent/aux_/${s})
endforeach(s)
set(sources
web_connection_base
alert
alert_manager
allocator
announce_entry
assert
bandwidth_limit
bandwidth_manager
bandwidth_queue_entry
bdecode
bitfield
block_cache
bloom_filter
chained_buffer
choker
close_reason
cpuid
crc32c
create_torrent
disk_buffer_holder
entry
error_code
file_storage
file_progress
lazy_bdecode
escape_string
string_util
file
path
fingerprint
gzip
hasher
hex
http_connection
http_stream
http_parser
i2p_stream
identify_client
ip_filter
ip_notifier
ip_voter
listen_socket_handle
performance_counters
peer_class
peer_class_set
peer_connection
bt_peer_connection
web_peer_connection
http_seed_connection
peer_connection_handle
instantiate_connection
merkle
natpmp
part_file
packet_buffer
piece_picker
platform_util
proxy_base
peer_list
puff
random
receive_buffer
read_resume_data
write_resume_data
request_blocks
resolve_links
resolver
session
session_call
session_handle
session_impl
session_settings
session_udp_sockets
proxy_settings
session_stats
settings_pack
sha1_hash
socket_io
socket_type
socks5_stream
stat
stat_cache
storage
storage_piece_set
storage_utils
time
timestamp_history
torrent
torrent_handle
torrent_info
torrent_peer
torrent_peer_allocator
torrent_status
tracker_manager
http_tracker_connection
utf8
udp_tracker_connection
udp_socket
upnp
utp_socket_manager
utp_stream
file_pool
lsd
disk_io_job
disk_job_fence
disk_job_pool
disk_buffer_pool
disk_io_thread
disk_io_thread_pool
enum_net
broadcast_socket
magnet_uri
parse_url
ConvertUTF
xml_parse
version
ffs
add_torrent_params
peer_info
stack_allocator
# -- extensions --
ut_pex
ut_metadata
smart_ban
)
# -- kademlia --
set(kademlia_sources
dht_state
dht_storage
dos_blocker
dht_tracker
msg
node
node_entry
refresh
rpc_manager
find_data
put_data
node_id
routing_table
traversal_algorithm
item
get_peers
get_item
ed25519
sample_infohashes
dht_settings
)
# -- ed25519 --
set(ed25519_sources
add_scalar
fe
ge
key_exchange
keypair
sc
sign
verify
)
set(includes include ed25519/src)
option(shared "build libtorrent as a shared library" ON)
option(static_runtime "build libtorrent with static runtime" OFF)
option(encryption "link against openssl and enable encryption" ON)
option(dht "enable support for Mainline DHT" ON)
option(deprecated-functions "enable deprecated functions for backwards compatibility" ON)
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)
option(build_examples "build examples" OFF)
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release FORCE)
endif()
# add_definitions() doesn't seem to let you say wich build type to apply it to
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTORRENT_DEBUG")
if(UNIX)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
endif()
find_package(Threads REQUIRED)
include_directories(${includes})
if (encryption)
list(APPEND sources pe_crypto)
else()
if (NOT WIN32 AND NOT APPLE)
list(APPEND sources sha1)
endif()
endif (encryption)
foreach(s ${sources})
list(APPEND sources2 src/${s})
endforeach(s)
if (dht)
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()
endif()
list(APPEND sources2 ${include_files})
if(CMAKE_CXX_COMPILER_ID MATCHES Clang)
add_compile_options(
-Weverything
-Wno-documentation
-Wno-c++98-compat-pedantic
-Wno-padded
-Wno-global-constructors
-Wno-exit-time-destructors
-Wno-weak-vtables)
elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
add_compile_options(
-Wall
-Wextra
-Wpedantic
-Wparentheses
-Wvla
-Wc++11-compat
-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
# 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
# C4268: 'identifier' : 'const' static/global data initialized
# with compiler generated default constructor fills the object with zeros
/wd4268
# C4503: 'identifier': decorated name length exceeded, name was truncated
/wd4503)
endif()
if (shared)
add_library(torrent-rasterbar SHARED ${sources2})
target_compile_definitions(torrent-rasterbar
PRIVATE TORRENT_BUILDING_SHARED
INTERFACE TORRENT_LINKING_SHARED
)
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()
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)
endif()
set(Boost_USE_STATIC_LIBS ON)
add_library(torrent-rasterbar STATIC ${sources2})
endif()
target_compile_features(torrent-rasterbar PUBLIC cxx_std_11)
target_compile_definitions(torrent-rasterbar PUBLIC $<$<CONFIG:Debug>:TORRENT_DEBUG>)
target_compile_definitions(torrent-rasterbar PRIVATE TORRENT_BUILDING_LIBRARY)
if (libiconv)
find_package(Iconv REQUIRED)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_ICONV)
target_include_directories(torrent-rasterbar SYSTEM PUBLIC ${ICONV_INCLUDE_DIR})
endif (libiconv)
if (encryption)
if(NOT DEFINED OPENSSL_INCLUDE_DIR OR NOT DEFINED OPENSSL_LIBRARIES)
FIND_PACKAGE(OpenSSL REQUIRED)
endif()
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_USE_OPENSSL TORRENT_USE_LIBCRYPTO)
target_include_directories(torrent-rasterbar PUBLIC ${OPENSSL_INCLUDE_DIR})
else()
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_ENCRYPTION)
endif()
if (NOT logging)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_LOGGING)
endif()
if (NOT dht)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_DHT)
endif()
# Boost
if(NOT DEFINED Boost_INCLUDE_DIR OR NOT DEFINED Boost_LIBRARIES)
FIND_PACKAGE(Boost REQUIRED COMPONENTS system)
endif()
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(torrent-rasterbar ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
if (WIN32)
target_link_libraries(torrent-rasterbar wsock32 ws2_32 Iphlpapi)
# target Windows Vista or later
target_compile_definitions(torrent-rasterbar PUBLIC _WIN32_WINNT=0x0600)
target_link_libraries(torrent-rasterbar debug dbghelp)
# prevent winsock1 to be included
target_compile_definitions(torrent-rasterbar PUBLIC WIN32_LEAN_AND_MEAN)
if (MSVC)
target_compile_definitions(torrent-rasterbar PUBLIC BOOST_ALL_NO_LIB)
# for multicore compilation
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
# increase the number of sections for obj files
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
endif()
endif()
if(APPLE)
# for ip_notifier
target_link_libraries(torrent-rasterbar "-framework CoreFoundation" "-framework SystemConfiguration")
endif (APPLE)
if (encryption)
target_link_libraries(torrent-rasterbar ${OPENSSL_LIBRARIES})
endif()
if (libiconv)
target_link_libraries(torrent-rasterbar ${ICONV_LIBRARIES})
endif (libiconv)
if (NOT deprecated-functions)
target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_NO_DEPRECATE)
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()
if (MSVC)
# disable bogus deprecation warnings on msvc8
target_compile_definitions(torrent-rasterbar PUBLIC _SCL_SECURE_NO_DEPRECATE _CRT_SECURE_NO_DEPRECATE)
# these compiler settings just make the compiler standard conforming
target_compile_options(torrent-rasterbar PUBLIC /Zc:wchar_t /Zc:forScope)
# for multi-core compilation
target_compile_options(torrent-rasterbar PUBLIC /MP)
# increase the number of sections for obj files
target_compile_options(torrent-rasterbar PUBLIC /bigobj)
endif()
target_compile_definitions(torrent-rasterbar PUBLIC _FILE_OFFSET_BITS=64)
target_compile_definitions(torrent-rasterbar PUBLIC BOOST_EXCEPTION_DISABLE)
target_compile_definitions(torrent-rasterbar PUBLIC BOOST_ASIO_ENABLE_CANCELIO)
target_compile_definitions(torrent-rasterbar PUBLIC BOOST_ASIO_HAS_STD_CHRONO)
set_target_properties(torrent-rasterbar PROPERTIES
SOVERSION ${SOVERSION})
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)
configure_file(libtorrent-rasterbar-cmake.pc.in libtorrent-rasterbar.pc)
string (COMPARE EQUAL "${CMAKE_SIZEOF_VOID_P}" "8" IS64BITS)
if (IS64BITS AND RESPECTLIB64)
set (LIBDIR "lib64")
else()
set (LIBDIR "lib")
endif()
install(TARGETS torrent-rasterbar EXPORT torrent-rasterbarTargets
DESTINATION ${LIBDIR} INCLUDES DESTINATION include)
install(DIRECTORY include/libtorrent DESTINATION include)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig)
# === generate a CMake Config File ===
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar/libtorrent-rasterbarConfigVersion.cmake"
VERSION ${VERSION}
COMPATIBILITY ExactVersion
)
export(EXPORT torrent-rasterbarTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar/libtorrent-rasterbarTargets.cmake"
NAMESPACE Libtorrent::
)
configure_file(libtorrent-rasterbarConfig.cmake
"${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar/libtorrent-rasterbarConfig.cmake"
COPYONLY
)
set(ConfigPackageLocation lib/cmake/libtorrent-rasterbar)
install(EXPORT torrent-rasterbarTargets
FILE
libtorrent-rasterbarTargets.cmake
NAMESPACE
Libtorrent::
DESTINATION
${ConfigPackageLocation}
)
install(
FILES
libtorrent-rasterbarConfig.cmake
"${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar/libtorrent-rasterbarConfigVersion.cmake"
DESTINATION
${ConfigPackageLocation}
)
# === 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()