summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/CMakeLists.txt')
-rw-r--r--protocols/Telegram/tdlib/td/CMakeLists.txt792
1 files changed, 792 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/CMakeLists.txt b/protocols/Telegram/tdlib/td/CMakeLists.txt
new file mode 100644
index 0000000000..5e2a626021
--- /dev/null
+++ b/protocols/Telegram/tdlib/td/CMakeLists.txt
@@ -0,0 +1,792 @@
+cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
+
+project(TDLib VERSION 1.2.0 LANGUAGES CXX C)
+
+# Prevent in-source build
+get_filename_component(TD_REAL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH)
+get_filename_component(TD_REAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH)
+
+if (TD_REAL_BINARY_DIR STREQUAL TD_REAL_SOURCE_DIR)
+ message(" Out-of-source build should be used to build TDLib.")
+ message(" You need to remove the files already created by CMake and")
+ message(" rerun CMake from a new directory:")
+ message(" rm -rf CMakeFiles CMakeCache.txt")
+ message(" mkdir build")
+ message(" cd build")
+ message(" cmake ..")
+ message(FATAL_ERROR "In-source build failed.")
+endif()
+
+option(TD_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TDLib API.")
+option(TD_ENABLE_DOTNET "Use \"ON\" to enable generation of C++/CLI or C++/CX TDLib API bindings.")
+
+if (TD_ENABLE_DOTNET AND (CMAKE_VERSION VERSION_LESS "3.1.0"))
+ message(FATAL_ERROR "CMake 3.1.0 or higher is required. You are running version ${CMAKE_VERSION}.")
+endif()
+
+if (NOT DEFINED CMAKE_MODULE_PATH)
+ set(CMAKE_MODULE_PATH "")
+endif()
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" "${CMAKE_MODULE_PATH}")
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+
+enable_testing()
+
+if (POLICY CMP0069)
+ option(TD_ENABLE_LTO "Use \"ON\" to enable Link Time Optimization.")
+
+ if (TD_ENABLE_LTO)
+ cmake_policy(SET CMP0069 NEW)
+ include(CheckIPOSupported)
+ check_ipo_supported(RESULT IPO_SUPPORTED)
+ if (IPO_SUPPORTED)
+ # set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) do not work?
+ string(REPLACE ";" " " CXX_FLAGS_IPO "${CMAKE_CXX_COMPILE_OPTIONS_IPO}")
+ message(STATUS "Use link time optimization CXX options: ${CXX_FLAGS_IPO}")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CXX_FLAGS_IPO}")
+
+ string(REPLACE ";" " " C_FLAGS_IPO "${CMAKE_C_COMPILE_OPTIONS_IPO}")
+ message(STATUS "Use link time optimization C options: ${C_FLAGS_IPO}")
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${C_FLAGS_IPO}")
+
+ string(REPLACE ";" " " LINK_FLAGS_IPO "${CMAKE_CXX_LINK_OPTIONS_IPO}")
+ message(STATUS "Use link time optimization linker options: ${LINK_FLAGS_IPO}")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${LINK_FLAGS_IPO}")
+ endif()
+ endif()
+endif()
+
+# Configure CCache if available
+find_program(CCACHE_FOUND ccache)
+#set(CCACHE_FOUND 0)
+if (CCACHE_FOUND)
+ message(STATUS "Found ccache")
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+else()
+ message(STATUS "Could NOT find ccache")
+endif()
+
+set(MEMPROF "" CACHE STRING "Use one of \"ON\", \"FAST\" or \"SAFE\" to enable memory profiling. \
+Works under Mac OS and Linux when compiled using glibc. \
+In FAST mode stack is unwinded only using frame pointers, which may fail. \
+In SAFE mode stack is unwinded using backtrace function from execinfo.h, which may be very slow. \
+By default both methods are used to achieve maximum speed and accuracy")
+
+if (EMSCRIPTEN)
+ # use prebuilt zlib
+ set(ZLIB_FOUND 1)
+ set(ZLIB_LIBRARIES)
+ set(ZLIB_INCLUDE_DIR)
+
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -s ALLOW_MEMORY_GROWTH=1 -s USE_ZLIB=1 -s MODULARIZE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['FS']\"")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s ALLOW_MEMORY_GROWTH=1 -s USE_ZLIB=1 -s MODULARIZE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['FS']\"")
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -s DEMANGLE_SUPPORT=1 -s ASSERTIONS=1")
+ set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -s DEMANGLE_SUPPORT=1 -s ASSERTIONS=1")
+
+ if (ASMJS)
+ set(TD_EMSCRIPTEN td_asmjs)
+ else()
+ set(TD_EMSCRIPTEN td_wasm)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=1")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s WASM=1")
+ endif()
+endif()
+
+if (NOT OPENSSL_FOUND)
+ find_package(OpenSSL)
+endif()
+if (OPENSSL_FOUND)
+ message(STATUS "Found OpenSSL: ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
+endif()
+
+if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
+ set(GCC 1)
+elseif (${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
+ set(CLANG 1)
+elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Intel)
+ set(INTEL 1)
+elseif (NOT MSVC)
+ message(FATAL_ERROR "Compiler isn't supported")
+endif()
+
+include(CheckCXXCompilerFlag)
+
+if (GCC OR CLANG OR INTEL)
+ if (WIN32 AND INTEL)
+ SET(STD14_FLAG /Qstd=c++14)
+ else()
+ SET(STD14_FLAG -std=c++14)
+ endif()
+ CHECK_CXX_COMPILER_FLAG(${STD14_FLAG} HAVE_STD14)
+ if (NOT HAVE_STD14)
+ string(REPLACE "c++14" "c++1y" STD14_FLAG "${STD14_FLAG}")
+ CHECK_CXX_COMPILER_FLAG(${STD14_FLAG} HAVE_STD1Y)
+ set(HAVE_STD14 ${HAVE_STD1Y})
+ endif()
+elseif (MSVC)
+ set(HAVE_STD14 MSVC_VERSION>=1900)
+endif()
+
+if (NOT HAVE_STD14)
+ message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
+endif()
+
+set(CMAKE_THREAD_PREFER_PTHREAD ON)
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
+
+if (THREADS_HAVE_PTHREAD_ARG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+endif()
+
+if (MSVC)
+ if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
+ string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ endif()
+ add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR- /W4 /wd4100 /wd4127 /wd4324 /wd4505 /wd4702")
+elseif (CLANG OR GCC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG} -fno-omit-frame-pointer -fno-exceptions -fno-rtti")
+ if (APPLE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip,-x,-S")
+ else()
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL")
+ endif()
+
+ if (MEMPROF)
+ CHECK_CXX_COMPILER_FLAG(-no-pie CXX_NO_PIE_FLAG)
+ if (CXX_NO_PIE_FLAG)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
+ elseif (APPLE)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie")
+ endif()
+ endif()
+elseif (INTEL)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG}")
+endif()
+
+if (WIN32)
+ add_definitions(-DNTDDI_VERSION=0x06020000 -DWINVER=0x0602 -D_WIN32_WINNT=0x0602 -DNOMINMAX -DUNICODE -D_UNICODE)
+endif()
+if (CYGWIN)
+ add_definitions(-D_DEFAULT_SOURCE=1 -DFD_SETSIZE=4096)
+endif()
+
+if (NOT ANDROID) # _FILE_OFFSET_BITS is broken in ndk r15 and r15b and doesn't work prior to Android 7.0
+ add_definitions(-D_FILE_OFFSET_BITS=64)
+endif()
+
+include(AddCXXCompilerFlag)
+if (NOT MSVC)
+ add_cxx_compiler_flag("-Wall")
+ add_cxx_compiler_flag("-Wextra")
+ add_cxx_compiler_flag("-Wimplicit-fallthrough=2")
+ add_cxx_compiler_flag("-Wpointer-arith")
+ add_cxx_compiler_flag("-Wcast-qual")
+ add_cxx_compiler_flag("-Wsign-compare")
+ add_cxx_compiler_flag("-Wduplicated-branches")
+ add_cxx_compiler_flag("-Wduplicated-cond")
+ add_cxx_compiler_flag("-Walloc-zero")
+ add_cxx_compiler_flag("-Wlogical-op")
+ add_cxx_compiler_flag("-Wno-tautological-compare")
+ add_cxx_compiler_flag("-Wpointer-arith")
+ add_cxx_compiler_flag("-Wvla")
+ add_cxx_compiler_flag("-Wnon-virtual-dtor")
+ add_cxx_compiler_flag("-Wno-unused-parameter")
+ add_cxx_compiler_flag("-Wconversion")
+ add_cxx_compiler_flag("-Wno-sign-conversion")
+ add_cxx_compiler_flag("-Wc++14-compat-pedantic")
+ add_cxx_compiler_flag("-Qunused-arguments")
+ add_cxx_compiler_flag("-Wodr")
+ add_cxx_compiler_flag("-flto-odr-type-merging")
+
+# add_cxx_compiler_flag("-Werror")
+
+# add_cxx_compiler_flag("-Wcast-align")
+
+#std::int32_t <-> int and off_t <-> std::size_t/std::int64_t
+# add_cxx_compiler_flag("-Wuseless-cast")
+
+#external headers like openssl
+# add_cxx_compiler_flag("-Wzero-as-null-pointer-constant")
+endif()
+
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/include/c++/v1")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
+
+add_subdirectory(tdtl)
+
+add_subdirectory(tdutils)
+
+add_subdirectory(td/generate)
+
+if (NOT CMAKE_CROSSCOMPILING)
+ add_custom_target(prepare_cross_compiling DEPENDS tl_generate_common tdmime_auto tl_generate_json)
+ if (TD_ENABLE_DOTNET)
+ add_custom_target(remove_cpp_documentation
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND remove_documentation ${TL_TD_AUTO} td/telegram/Client.h td/telegram/Log.h td/tl/TlObject.h
+ COMMENT "Remove C++ documentation from sources"
+ DEPENDS remove_documentation tl_generate_common generate_dotnet_api ${TL_TD_AUTO} td/telegram/Client.h td/telegram/Log.h td/tl/TlObject.h
+ )
+
+ add_dependencies(prepare_cross_compiling generate_dotnet_api remove_cpp_documentation)
+ endif()
+endif()
+
+if (NOT OPENSSL_FOUND)
+ message(WARNING "Not found OpenSSL: skip TDLib, tdactor, tdnet, tddb")
+ return()
+endif()
+
+if (NOT ZLIB_FOUND)
+ find_package(ZLIB)
+endif()
+if (NOT ZLIB_FOUND)
+ message(WARNING "Not found zlib: skip TDLib, tdactor, tdnet, tddb")
+ return()
+endif()
+
+add_subdirectory(tdactor)
+
+add_subdirectory(tdnet)
+
+add_subdirectory(sqlite)
+
+add_subdirectory(tddb)
+
+add_subdirectory(test)
+
+if (NOT CMAKE_CROSSCOMPILING)
+ add_subdirectory(benchmark)
+endif()
+
+
+get_directory_property(HAS_PARENT PARENT_DIRECTORY)
+if (HAS_PARENT)
+ set(TL_TD_AUTO_INCLUDES ${TL_TD_AUTO_INCLUDES} PARENT_SCOPE)
+ set(TL_TD_API_TLO ${TL_TD_API_TLO} PARENT_SCOPE)
+ set(TL_TD_JSON_AUTO ${TL_TD_JSON_AUTO} PARENT_SCOPE)
+ set(TD_TEST_SOURCE ${TD_TEST_SOURCE} PARENT_SCOPE)
+endif()
+
+
+#SOURCE SETS
+
+set_source_files_properties(${TL_TD_AUTO} PROPERTIES GENERATED TRUE)
+if (TD_ENABLE_JNI)
+ set(TL_JNI_OBJECT
+ td/tl/tl_jni_object.cpp
+ td/tl/tl_jni_object.h
+ )
+else()
+ set(TL_JNI_OBJECT)
+endif()
+
+set(TL_TD_SCHEME_SOURCE
+ ${TL_TD_AUTO}
+ ${TL_JNI_OBJECT}
+ td/tl/TlObject.h
+ td/tl/tl_object_parse.h
+ td/tl/tl_object_store.h
+)
+
+set_source_files_properties(${TL_TD_JSON_AUTO} PROPERTIES GENERATED TRUE)
+set(TL_TD_JSON
+ ${TL_TD_JSON_AUTO}
+ td/tl/tl_json.h
+)
+
+set_source_files_properties(${TL_C_AUTO} PROPERTIES GENERATED TRUE)
+set(TL_C_SCHEME_SOURCE
+ ${TL_C_AUTO}
+)
+
+set_source_files_properties(${TL_DOTNET_AUTO} PROPERTIES GENERATED TRUE)
+set(TL_DOTNET_SCHEME_SOURCE
+ ${TL_DOTNET_AUTO}
+ td/tl/tl_dotnet_object.h
+)
+
+set(TDLIB_SOURCE
+ td/mtproto/AuthData.cpp
+ td/mtproto/crypto.cpp
+ td/mtproto/Handshake.cpp
+ td/mtproto/HandshakeActor.cpp
+ td/mtproto/HttpTransport.cpp
+ td/mtproto/IStreamTransport.cpp
+ td/mtproto/RawConnection.cpp
+ td/mtproto/SessionConnection.cpp
+ td/mtproto/TcpTransport.cpp
+ td/mtproto/Transport.cpp
+ td/mtproto/utils.cpp
+
+ td/telegram/AnimationsManager.cpp
+ td/telegram/AudiosManager.cpp
+ td/telegram/AuthManager.cpp
+ td/telegram/CallActor.cpp
+ td/telegram/CallDiscardReason.cpp
+ td/telegram/CallManager.cpp
+ td/telegram/CallbackQueriesManager.cpp
+ td/telegram/ClientActor.cpp
+ td/telegram/ConfigManager.cpp
+ td/telegram/ConfigShared.cpp
+ td/telegram/Contact.cpp
+ td/telegram/ContactsManager.cpp
+ td/telegram/DelayDispatcher.cpp
+ td/telegram/DeviceTokenManager.cpp
+ td/telegram/DhCache.cpp
+ td/telegram/DialogDb.cpp
+ td/telegram/DialogId.cpp
+ td/telegram/DialogParticipant.cpp
+ td/telegram/DocumentsManager.cpp
+ td/telegram/files/FileDb.cpp
+ td/telegram/files/FileDownloader.cpp
+ td/telegram/files/FileFromBytes.cpp
+ td/telegram/files/FileGcParameters.cpp
+ td/telegram/files/FileGcWorker.cpp
+ td/telegram/files/FileGenerateManager.cpp
+ td/telegram/files/FileHashUploader.cpp
+ td/telegram/files/FileLoader.cpp
+ td/telegram/files/FileLoaderUtils.cpp
+ td/telegram/files/FileLoadManager.cpp
+ td/telegram/files/FileManager.cpp
+ td/telegram/files/FileStats.cpp
+ td/telegram/files/FileStatsWorker.cpp
+ td/telegram/files/FileUploader.cpp
+ td/telegram/files/PartsManager.cpp
+ td/telegram/files/ResourceManager.cpp
+ td/telegram/Game.cpp
+ td/telegram/Global.cpp
+ td/telegram/HashtagHints.cpp
+ td/telegram/InlineQueriesManager.cpp
+ td/telegram/Location.cpp
+ td/telegram/MessageEntity.cpp
+ td/telegram/MessagesDb.cpp
+ td/telegram/MessagesManager.cpp
+ td/telegram/misc.cpp
+ td/telegram/net/AuthDataShared.cpp
+ td/telegram/net/ConnectionCreator.cpp
+ td/telegram/net/DcAuthManager.cpp
+ td/telegram/net/DcOptionsSet.cpp
+ td/telegram/net/MtprotoHeader.cpp
+ td/telegram/net/NetActor.cpp
+ td/telegram/net/NetQuery.cpp
+ td/telegram/net/NetQueryCounter.cpp
+ td/telegram/net/NetQueryCreator.cpp
+ td/telegram/net/NetQueryDelayer.cpp
+ td/telegram/net/NetQueryDispatcher.cpp
+ td/telegram/net/NetStatsManager.cpp
+ td/telegram/net/PublicRsaKeyShared.cpp
+ td/telegram/net/PublicRsaKeyWatchdog.cpp
+ td/telegram/net/Session.cpp
+ td/telegram/net/SessionProxy.cpp
+ td/telegram/net/SessionMultiProxy.cpp
+ td/telegram/Payments.cpp
+ td/telegram/PasswordManager.cpp
+ td/telegram/PrivacyManager.cpp
+ td/telegram/Photo.cpp
+ td/telegram/ReplyMarkup.cpp
+ td/telegram/SecretChatActor.cpp
+ td/telegram/SecretChatDb.cpp
+ td/telegram/SecretChatsManager.cpp
+ td/telegram/SequenceDispatcher.cpp
+ td/telegram/StateManager.cpp
+ td/telegram/StickersManager.cpp
+ td/telegram/StorageManager.cpp
+ td/telegram/Td.cpp
+ td/telegram/TdDb.cpp
+ td/telegram/TopDialogManager.cpp
+ td/telegram/UpdatesManager.cpp
+ td/telegram/VideoNotesManager.cpp
+ td/telegram/VideosManager.cpp
+ td/telegram/VoiceNotesManager.cpp
+ td/telegram/WebPagesManager.cpp
+
+ td/mtproto/AuthData.h
+ td/mtproto/AuthKey.h
+ td/mtproto/crypto.h
+ td/mtproto/CryptoStorer.h
+ td/mtproto/Handshake.h
+ td/mtproto/HandshakeActor.h
+ td/mtproto/HandshakeConnection.h
+ td/mtproto/HttpTransport.h
+ td/mtproto/IStreamTransport.h
+ td/mtproto/NoCryptoStorer.h
+ td/mtproto/PacketStorer.h
+ td/mtproto/PingConnection.h
+ td/mtproto/RawConnection.h
+ td/mtproto/SessionConnection.h
+ td/mtproto/TcpTransport.h
+ td/mtproto/Transport.h
+ td/mtproto/utils.h
+
+ td/telegram/AccessRights.h
+ td/telegram/AnimationsManager.h
+ td/telegram/AudiosManager.h
+ td/telegram/AuthManager.h
+ td/telegram/CallActor.h
+ td/telegram/CallDiscardReason.h
+ td/telegram/CallId.h
+ td/telegram/CallManager.h
+ td/telegram/CallbackQueriesManager.h
+ td/telegram/ChannelId.h
+ td/telegram/ChatId.h
+ td/telegram/ClientActor.h
+ td/telegram/ConfigManager.h
+ td/telegram/ConfigShared.h
+ td/telegram/Contact.h
+ td/telegram/ContactsManager.h
+ td/telegram/DelayDispatcher.h
+ td/telegram/DeviceTokenManager.h
+ td/telegram/DhCache.h
+ td/telegram/DhConfig.h
+ td/telegram/DialogDb.h
+ td/telegram/DialogId.h
+ td/telegram/DialogParticipant.h
+ td/telegram/DocumentsManager.h
+ td/telegram/files/FileDb.h
+ td/telegram/files/FileDownloader.h
+ td/telegram/files/FileFromBytes.h
+ td/telegram/files/FileGcParameters.h
+ td/telegram/files/FileGcWorker.h
+ td/telegram/files/FileGenerateManager.h
+ td/telegram/files/FileHashUploader.h
+ td/telegram/files/FileId.h
+ td/telegram/files/FileLoaderActor.h
+ td/telegram/files/FileLoader.h
+ td/telegram/files/FileLoaderUtils.h
+ td/telegram/files/FileLoadManager.h
+ td/telegram/files/FileLocation.h
+ td/telegram/files/FileManager.h
+ td/telegram/files/FileStats.h
+ td/telegram/files/FileStatsWorker.h
+ td/telegram/files/FileUploader.h
+ td/telegram/files/PartsManager.h
+ td/telegram/files/ResourceManager.h
+ td/telegram/files/ResourceState.h
+ td/telegram/Game.h
+ td/telegram/Global.h
+ td/telegram/HashtagHints.h
+ td/telegram/InlineQueriesManager.h
+ td/telegram/Location.h
+ td/telegram/logevent/LogEvent.h
+ td/telegram/logevent/SecretChatEvent.h
+ td/telegram/MessageEntity.h
+ td/telegram/MessageId.h
+ td/telegram/MessagesDb.h
+ td/telegram/MessagesManager.h
+ td/telegram/misc.h
+ td/telegram/net/AuthDataShared.h
+ td/telegram/net/ConnectionCreator.h
+ td/telegram/net/DcAuthManager.h
+ td/telegram/net/DcId.h
+ td/telegram/net/DcOptions.h
+ td/telegram/net/DcOptionsSet.h
+ td/telegram/net/MtprotoHeader.h
+ td/telegram/net/NetActor.h
+ td/telegram/net/NetQuery.h
+ td/telegram/net/NetQueryCounter.h
+ td/telegram/net/NetQueryCreator.h
+ td/telegram/net/NetQueryDelayer.h
+ td/telegram/net/NetQueryDispatcher.h
+ td/telegram/net/NetStatsManager.h
+ td/telegram/net/NetType.h
+ td/telegram/net/PublicRsaKeyShared.h
+ td/telegram/net/PublicRsaKeyWatchdog.h
+ td/telegram/net/Session.h
+ td/telegram/net/SessionProxy.h
+ td/telegram/net/SessionMultiProxy.h
+ td/telegram/net/TempAuthKeyWatchdog.h
+ td/telegram/PasswordManager.h
+ td/telegram/Payments.h
+ td/telegram/Photo.h
+ td/telegram/PrivacyManager.h
+ td/telegram/PtsManager.h
+ td/telegram/ReplyMarkup.h
+ td/telegram/SecretChatActor.h
+ td/telegram/SecretChatId.h
+ td/telegram/SecretChatDb.h
+ td/telegram/SecretChatsManager.h
+ td/telegram/SecretInputMedia.h
+ td/telegram/SequenceDispatcher.h
+ td/telegram/StateManager.h
+ td/telegram/StickersManager.h
+ td/telegram/StorageManager.h
+ td/telegram/Td.h
+ td/telegram/TdCallback.h
+ td/telegram/TdDb.h
+ td/telegram/TdParameters.h
+ td/telegram/TopDialogManager.h
+ td/telegram/UniqueId.h
+ td/telegram/UpdatesManager.h
+ td/telegram/UserId.h
+ td/telegram/Version.h
+ td/telegram/VideoNotesManager.h
+ td/telegram/VideosManager.h
+ td/telegram/VoiceNotesManager.h
+ td/telegram/WebPageId.h
+ td/telegram/WebPagesManager.h
+
+ td/telegram/AnimationsManager.hpp
+ td/telegram/AudiosManager.hpp
+ td/telegram/AuthManager.hpp
+ td/telegram/DocumentsManager.hpp
+ td/telegram/files/FileId.hpp
+ td/telegram/files/FileManager.hpp
+ td/telegram/Game.hpp
+ td/telegram/Payments.hpp
+ td/telegram/Photo.hpp
+ td/telegram/ReplyMarkup.hpp
+ td/telegram/StickersManager.hpp
+ td/telegram/VideoNotesManager.hpp
+ td/telegram/VideosManager.hpp
+ td/telegram/VoiceNotesManager.hpp
+
+ ${TL_TD_SCHEME_SOURCE}
+)
+
+set(MEMPROF_SOURCE
+ memprof/memprof.cpp
+ memprof/memprof.h
+)
+
+#RULES
+
+file(MAKE_DIRECTORY auto)
+
+if (WIN32)
+ set(GIT_COMMIT_CMD powershell -ExecutionPolicy ByPass ./gen_git_commit_h.ps1)
+else()
+ set(GIT_COMMIT_CMD ./gen_git_commit_h.sh)
+endif()
+
+add_custom_target(git_commit ALL
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${GIT_COMMIT_CMD}
+ COMMENT "Generate git_commit.h"
+)
+
+#LIBRARIES
+
+# memprof - simple library for memory usage profiling
+add_library(memprof STATIC ${MEMPROF_SOURCE})
+target_include_directories(memprof PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+target_link_libraries(memprof PRIVATE tdutils)
+if (MEMPROF)
+ target_compile_definitions(memprof PRIVATE -DUSE_MEMPROF=1)
+ if (MEMPROF STREQUAL "SAFE")
+ target_compile_definitions(memprof PRIVATE -DUSE_MEMPROF_SAFE=1)
+ elseif (MEMPROF STREQUAL "FAST")
+ target_compile_definitions(memprof PRIVATE -DUSE_MEMPROF_FAST=1)
+ elseif (NOT ${MEMPROF})
+ message(FATAL_ERROR "Unsupported MEMPROF value \"${MEMPROF}\"")
+ endif()
+endif()
+
+
+# tdcore - mostly internal TDLib interface. One should use tdactor for interactions with it.
+add_library(tdcore STATIC ${TDLIB_SOURCE})
+target_include_directories(tdcore PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDES}>)
+target_include_directories(tdcore SYSTEM PRIVATE ${OPENSSL_INCLUDE_DIR})
+target_link_libraries(tdcore PUBLIC tdactor tdutils tdnet tddb PRIVATE ${OPENSSL_CRYPTO_LIBRARY} ${CMAKE_DL_LIBS} ${ZLIB_LIBRARIES})
+
+if (TD_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android
+ if (NOT JNI_FOUND)
+ find_package(JNI REQUIRED)
+ endif()
+ message(STATUS "Found JNI: ${JNI_INCLUDE_DIRS} ${JNI_LIBRARIES}")
+ target_include_directories(tdcore PUBLIC ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+ target_link_libraries(tdcore PUBLIC ${JAVA_JVM_LIBRARY})
+endif()
+
+if (NOT CMAKE_CROSSCOMPILING)
+ add_dependencies(tdcore tl_generate_common)
+ if (TD_ENABLE_JNI)
+ add_dependencies(tdcore td_generate_java_api)
+ endif()
+ if (TD_ENABLE_DOTNET)
+ add_dependencies(tdcore remove_cpp_documentation)
+ endif()
+endif()
+
+add_library(tdclient td/telegram/Client.cpp td/telegram/Client.h td/telegram/Log.cpp td/telegram/Log.h)
+target_include_directories(tdclient PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDES}>
+)
+target_link_libraries(tdclient PRIVATE tdcore)
+
+if (TD_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android
+ target_include_directories(tdclient PUBLIC ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+ target_link_libraries(tdclient PUBLIC ${JAVA_JVM_LIBRARY})
+endif()
+
+if (TD_ENABLE_DOTNET)
+ add_library(tddotnet SHARED
+ td/telegram/ClientDotNet.cpp
+ td/telegram/LogDotNet.cpp
+ ${TL_DOTNET_SCHEME_SOURCE}
+ )
+ set(VCPKG_APPLOCAL_LIBRARY_DEPS ON)
+ set_target_properties(tddotnet PROPERTIES OUTPUT_NAME Telegram.Td)
+ target_link_libraries(tddotnet PRIVATE tdclient tdutils)
+ target_include_directories(tddotnet PUBLIC
+ $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDES}>
+ )
+ if (NOT CMAKE_CROSSCOMPILING)
+ add_dependencies(tddotnet generate_dotnet_api)
+ endif()
+
+ target_compile_options(tddotnet PRIVATE "/doc")
+ if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
+ set_target_properties(tddotnet PROPERTIES VS_WINRT_COMPONENT "true")
+ target_compile_options(tddotnet PUBLIC "/ZW")
+ else()
+ set_target_properties(tddotnet PROPERTIES COMPILE_FLAGS "/GR /clr")
+ target_compile_options(tddotnet PUBLIC "/EHa")
+ endif()
+endif()
+
+# tdc - TDLib interface in pure c.
+add_library(tdc STATIC ${TL_C_SCHEME_SOURCE} td/telegram/td_c_client.cpp td/telegram/td_c_client.h)
+target_include_directories(tdc PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDES}>)
+target_link_libraries(tdc PRIVATE tdclient tdutils)
+if (NOT CMAKE_CROSSCOMPILING)
+ add_dependencies(tdc tl_generate_c)
+endif()
+
+add_library(tdjson_private STATIC ${TL_TD_JSON} td/telegram/ClientJson.cpp td/telegram/ClientJson.h)
+target_include_directories(tdjson_private PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDES}>)
+target_link_libraries(tdjson_private PUBLIC tdclient tdutils)
+if (NOT CMAKE_CROSSCOMPILING)
+ add_dependencies(tdjson_private tl_generate_common tl_generate_json)
+ if (TD_ENABLE_DOTNET)
+ add_dependencies(tdjson_private remove_cpp_documentation)
+ endif()
+endif()
+
+set(TD_JSON_HEADERS td/telegram/td_json_client.h td/telegram/td_log.h)
+set(TD_JSON_SOURCE td/telegram/td_json_client.cpp td/telegram/td_log.cpp)
+
+include(GenerateExportHeader)
+
+add_library(tdjson SHARED ${TD_JSON_SOURCE} ${TD_JSON_HEADERS})
+target_link_libraries(tdjson PRIVATE tdjson_private)
+generate_export_header(tdjson EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/td/telegram/tdjson_export.h)
+target_include_directories(tdjson PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+if (APPLE)
+ set_target_properties(tdjson PROPERTIES LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/tdclientjson_export_list")
+endif()
+
+add_library(tdjson_static STATIC ${TD_JSON_SOURCE} ${TD_JSON_HEADERS})
+target_link_libraries(tdjson_static PRIVATE tdjson_private)
+target_compile_definitions(tdjson_static PUBLIC TDJSON_STATIC_DEFINE)
+target_include_directories(tdjson_static PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+
+set(BIGOBJ)
+if (WIN32 OR CYGWIN)
+ if (MSVC)
+ set(BIGOBJ "/bigobj")
+ elseif (GCC)
+ set(BIGOBJ "-Wa,-mbig-obj")
+ endif()
+endif()
+if (BIGOBJ)
+ target_compile_options(tdc PUBLIC ${BIGOBJ})
+ target_compile_options(tdcore PUBLIC ${BIGOBJ})
+ target_compile_options(tdclient PUBLIC ${BIGOBJ})
+ target_compile_options(tdjson PUBLIC ${BIGOBJ})
+ target_compile_options(tdjson_static PUBLIC ${BIGOBJ})
+ if (TD_ENABLE_DOTNET)
+ target_compile_options(tddotnet PUBLIC "/bigobj")
+ endif()
+endif()
+
+if (EMSCRIPTEN)
+ set(TD_EMSCRIPTEN_SRC td/telegram/td_emscripten.cpp)
+ add_executable(${TD_EMSCRIPTEN} ${TD_EMSCRIPTEN_SRC})
+ target_include_directories(${TD_EMSCRIPTEN} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+ target_link_libraries(${TD_EMSCRIPTEN} PRIVATE tdjson_static)
+endif()
+
+#EXECUTABLES
+if (NOT CMAKE_CROSSCOMPILING)
+ add_executable(tg_cli td/telegram/cli.cpp ${TL_TD_JSON})
+
+ if (NOT READLINE_FOUND)
+ find_package(Readline)
+ endif()
+ if (NOT READLINE_FOUND)
+ message(STATUS "Could NOT find Readline")
+ else()
+ message(STATUS "Found Readline: ${READLINE_INCLUDE_DIR} ${READLINE_LIBRARY}")
+ target_link_libraries(tg_cli PRIVATE ${READLINE_LIBRARY})
+ target_include_directories(tg_cli SYSTEM PRIVATE ${READLINE_INCLUDE_DIR})
+ target_compile_definitions(tg_cli PRIVATE -DUSE_READLINE=1)
+ endif()
+ target_link_libraries(tg_cli PRIVATE memprof tdclient tdcore tdtl)
+ add_dependencies(tg_cli tl_generate_json)
+endif()
+
+#Exported libraries
+add_library(TdStatic INTERFACE)
+target_link_libraries(TdStatic INTERFACE tdclient)
+
+add_library(TdJson INTERFACE)
+target_link_libraries(TdJson INTERFACE tdjson)
+
+add_library(TdJsonStatic INTERFACE)
+target_link_libraries(TdJsonStatic INTERFACE tdjson_static)
+
+add_library(Td::TdStatic ALIAS TdStatic)
+add_library(Td::TdJson ALIAS TdJson)
+add_library(Td::TdJsonStatic ALIAS TdJsonStatic)
+
+install(TARGETS tdjson TdJson tdjson_static TdJsonStatic tdjson_private tdclient tdcore TdStatic EXPORT TdTargets
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ RUNTIME DESTINATION bin
+ INCLUDES DESTINATION include
+)
+
+install(EXPORT TdTargets
+ FILE TdTargets.cmake
+ NAMESPACE Td::
+ DESTINATION lib/cmake/Td
+)
+
+install(FILES ${TD_JSON_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/td/telegram/tdjson_export.h DESTINATION include/td/telegram)
+install(FILES td/telegram/Client.h td/telegram/Log.h DESTINATION include/td/telegram)
+install(FILES td/tl/TlObject.h DESTINATION include/td/tl)
+install(FILES ${TL_TD_AUTO_INCLUDES}/td/telegram/td_api.h ${TL_TD_AUTO_INCLUDES}/td/telegram/td_api.hpp DESTINATION include/td/telegram)
+if (TD_ENABLE_JNI)
+ install(FILES td/tl/tl_jni_object.h DESTINATION include/td/tl)
+endif()
+
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file("TdConfigVersion.cmake"
+ VERSION ${TDLib_VERSION}
+ COMPATIBILITY ExactVersion
+)
+install(FILES "TdConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/TdConfigVersion.cmake"
+ DESTINATION lib/cmake/Td
+)