Skip to content

Commit 7709da3

Browse files
committed
Fix MSVC LTO build by splitting tdcore target.
1 parent 7739c37 commit 7709da3

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

‎CMake/GeneratePkgConfig.cmake‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function(get_relative_link OUTPUT PATH)
2727
set(${OUTPUT} "${LINK}" PARENT_SCOPE)
2828
endfunction()
2929

30+
# TODO: support interface libraries in dependencies
3031
function(generate_pkgconfig TARGET DESCRIPTION)
3132
# message("Generating pkg-config for ${TARGET}")
3233
get_filename_component(PREFIX "${CMAKE_INSTALL_PREFIX}" REALPATH)

‎CMakeLists.txt‎

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ set(TD_MTPROTO_SOURCE
318318
td/tl/tl_object_store.h
319319
)
320320

321-
set(TDLIB_SOURCE
321+
set(TDLIB_SOURCE_PART1
322322
td/telegram/AccountManager.cpp
323323
td/telegram/AnimationsManager.cpp
324324
td/telegram/Application.cpp
@@ -471,6 +471,8 @@ set(TDLIB_SOURCE
471471
td/telegram/MessageViewer.cpp
472472
td/telegram/misc.cpp
473473
td/telegram/MissingInvitee.cpp
474+
)
475+
set(TDLIB_SOURCE_PART2
474476
td/telegram/net/AuthDataShared.cpp
475477
td/telegram/net/ConnectionCreator.cpp
476478
td/telegram/net/DcAuthManager.cpp
@@ -1016,6 +1018,10 @@ set(TDLIB_SOURCE
10161018

10171019
${CMAKE_CURRENT_BINARY_DIR}/td/telegram/GitCommitHash.cpp
10181020
)
1021+
set(TDLIB_SOURCE
1022+
${TDLIB_SOURCE_PART1}
1023+
${TDLIB_SOURCE_PART2}
1024+
)
10191025

10201026
set(MEMPROF_SOURCE
10211027
memprof/memprof.cpp
@@ -1079,9 +1085,26 @@ if (WIN32)
10791085
endif()
10801086

10811087
# tdcore - mostly internal TDLib interface. One should use tdactor for interactions with it.
1082-
add_library(tdcore STATIC ${TDLIB_SOURCE})
1083-
target_include_directories(tdcore PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDE_DIR}>)
1084-
target_link_libraries(tdcore PUBLIC tdapi tdnet tddb tdactor tdutils PRIVATE tdmtproto)
1088+
if (MSVC AND TD_ENABLE_LTO)
1089+
add_library(tdcore_part1 STATIC ${TDLIB_SOURCE_PART1})
1090+
target_include_directories(tdcore_part1 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDE_DIR}>)
1091+
target_link_libraries(tdcore_part1 PUBLIC tdapi tdnet tddb tdactor tdutils PRIVATE tdmtproto)
1092+
1093+
add_library(tdcore_part2 STATIC ${TDLIB_SOURCE_PART2})
1094+
target_include_directories(tdcore_part2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDE_DIR}>)
1095+
target_link_libraries(tdcore_part2 PUBLIC tdapi tdnet tddb tdactor tdutils PRIVATE tdmtproto)
1096+
1097+
add_library(tdcore INTERFACE)
1098+
target_link_libraries(tdcore INTERFACE tdcore_part1 tdcore_part2)
1099+
1100+
set(TD_CORE_PART_TARGETS tdcore_part1 tdcore_part2)
1101+
else()
1102+
add_library(tdcore STATIC ${TDLIB_SOURCE})
1103+
target_include_directories(tdcore PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${TL_TD_AUTO_INCLUDE_DIR}>)
1104+
target_link_libraries(tdcore PUBLIC tdapi tdnet tddb tdactor tdutils PRIVATE tdmtproto)
1105+
1106+
set(TD_CORE_PART_TARGETS)
1107+
endif()
10851108

10861109
if (NOT CMAKE_CROSSCOMPILING)
10871110
add_dependencies(tdcore tl_generate_common)
@@ -1221,7 +1244,7 @@ add_library(Td::TdJson ALIAS TdJson)
12211244
add_library(Td::TdJsonStatic ALIAS TdJsonStatic)
12221245

12231246
set(INSTALL_TARGETS tdjson TdJson)
1224-
set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private tdcore tdmtproto)
1247+
set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private "${TD_CORE_PART_TARGETS}" tdcore tdmtproto)
12251248
if (BUILD_SHARED_LIBS)
12261249
set(INSTALL_TARGETS ${INSTALL_TARGETS} tdclient TdStatic tdapi)
12271250
else()

0 commit comments

Comments
 (0)