Skip to content
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
1a0d8d0
tdlib: update to 1.8.63
luadebug Apr 11, 2026
aad365e
vdb
luadebug Apr 11, 2026
d4af8f3
[tdlib] Improve pkg-config generation logic in CMake scripts
luadebug Apr 11, 2026
a78b637
vdb
luadebug Apr 11, 2026
f4e6fa4
retry building for all platforms
luadebug Apr 12, 2026
9a2a1c1
vdb
luadebug Apr 12, 2026
fcda619
[tdlib] Enhance cross-compilation support by explicitly setting CMAKE…
luadebug Apr 12, 2026
fbbe148
vdb
luadebug Apr 12, 2026
f02ff8e
[tdlib] Add support for host generators in cross-compilation by updat…
luadebug Apr 12, 2026
9ff4b68
vdb
luadebug Apr 12, 2026
1a0f3f7
fixup
luadebug Apr 12, 2026
16a99a6
vdb
luadebug Apr 12, 2026
77a311b
Remove tdlib from the CI baseline as it is expected to fail on arm64-…
luadebug Apr 12, 2026
61ea426
Remove tdlib from the CI baseline for arm64-linux
luadebug Apr 12, 2026
ca0b2d3
Dynamic library build provides only TdJson target
luadebug Apr 14, 2026
58e9fbc
vdb
luadebug Apr 14, 2026
e264e17
repair
luadebug Apr 14, 2026
b56ec75
repair
luadebug Apr 14, 2026
d9178d0
fixup
luadebug Apr 14, 2026
de94077
fixup
luadebug Apr 14, 2026
2bdabda
Merge branch 'microsoft:master' into tdlib
luadebug Apr 14, 2026
40b9f83
fix
luadebug Apr 14, 2026
23f9b4f
vdb
luadebug Apr 14, 2026
2923845
fixup
luadebug Apr 14, 2026
058b59c
vdb
luadebug Apr 14, 2026
821e2d6
test
luadebug Apr 15, 2026
4b22941
vdb
luadebug Apr 15, 2026
0b521d4
Merge branch 'master' into tdlib
luadebug Apr 15, 2026
fb0f8a1
try build again with /MD for executables
luadebug Apr 16, 2026
b32ad55
vdb
luadebug Apr 16, 2026
ab15e2d
Fix cross-compilation issues by excluding tools from build when not n…
luadebug Apr 18, 2026
f42a5eb
vdb
luadebug Apr 18, 2026
2a7a7fc
edit baseline
luadebug Apr 18, 2026
99c971e
Refactor CMake configuration for cross-compilation support and instal…
luadebug Apr 18, 2026
067feda
vdb
luadebug Apr 18, 2026
d312a1f
last try for x86-windows triplet
luadebug Apr 18, 2026
b3596d9
vdb
luadebug Apr 18, 2026
8bb0e44
Enhance pkg-config generation by adding interface compile definitions…
luadebug Apr 19, 2026
a63a3bd
vdb
luadebug Apr 19, 2026
80a3b9e
Write updating port note
luadebug Apr 19, 2026
39b73cc
vdb
luadebug Apr 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions ports/tdlib/fix-cross-compile.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
diff --git a/tdtl/CMakeLists.txt b/tdtl/CMakeLists.txt
--- a/tdtl/CMakeLists.txt
+++ b/tdtl/CMakeLists.txt
@@ -26,3 +26,7 @@

add_library(tdtl STATIC ${TDTL_SOURCE})
target_include_directories(tdtl PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
+
+if (MSVC AND CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL")
+ set_target_properties(tdtl PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
+endif()
diff --git a/td/generate/CMakeLists.txt b/td/generate/CMakeLists.txt
--- a/td/generate/CMakeLists.txt
+++ b/td/generate/CMakeLists.txt
@@ -227,6 +227,14 @@
DEPENDS generate_json tl_generate_tlo ${TD_API_TLO_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl
)

+ if (MSVC AND CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL")
Comment thread
luadebug marked this conversation as resolved.
Outdated
+ # Normalize generator executables to the release DLL CRT (/MD) so cmake
+ # can execute them as custom commands without ucrtbased.dll in PATH.
+ # Static-CRT builds (no "DLL" in CMAKE_MSVC_RUNTIME_LIBRARY) are unaffected.
+ set_target_properties(tl-parser tl_writer_cpp generate_mtproto generate_common generate_c td_generate_java_api generate_json
+ PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
+ endif()
+
if (TD_ENABLE_JNI)
install(TARGETS td_generate_java_api RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES JavadocTlDocumentationGenerator.php TlDocumentationGenerator.php DESTINATION "${CMAKE_INSTALL_BINDIR}/td/generate")
@@ -249,4 +257,10 @@
DEPENDS td_generate_dotnet_api tl_generate_tlo ${TD_API_TLO_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/scheme/td_api.tl ${CMAKE_CURRENT_SOURCE_DIR}/DotnetTlDocumentationGenerator.php
)
endif()
+
+ if (TD_INSTALL_HOST_GENERATORS)
+ install(TARGETS tl-parser generate_mtproto generate_common generate_json
+ CONFIGURATIONS Release
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+ endif()
endif()
diff --git a/tdutils/generate/CMakeLists.txt b/tdutils/generate/CMakeLists.txt
--- a/tdutils/generate/CMakeLists.txt
+++ b/tdutils/generate/CMakeLists.txt
@@ -36,6 +36,9 @@
set(GPERF_GEN_SOURCE generate_mime_types_gperf.cpp)

add_executable(generate_mime_types_gperf ${GPERF_GEN_SOURCE})
+ if (MSVC AND CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL")
+ set_target_properties(generate_mime_types_gperf PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
+ endif()

add_custom_command(
OUTPUT ${GPERF_FILES}
@@ -59,4 +62,10 @@
COMMAND ${EXTENSION_TO_MIME_TYPE_CMD}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/auto/extension_to_mime_type.gperf
)
+
+ if (TD_INSTALL_HOST_GENERATORS)
+ install(TARGETS generate_mime_types_gperf
+ CONFIGURATIONS Release
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+ endif()
endif()
163 changes: 68 additions & 95 deletions ports/tdlib/fix-pc.patch
Original file line number Diff line number Diff line change
@@ -1,113 +1,81 @@
diff --git a/CMake/GeneratePkgConfig.cmake b/CMake/GeneratePkgConfig.cmake
index 3d3fa01d1..9303a2f43 100644
index 3d3fa01d1f69..499b1c86be93 100644
--- a/CMake/GeneratePkgConfig.cmake
+++ b/CMake/GeneratePkgConfig.cmake
@@ -9,10 +9,20 @@ function(get_relative_link OUTPUT PATH)
@@ -8,12 +8,13 @@ function(get_relative_link OUTPUT PATH)
get_filename_component(NAME "${PATH}" NAME_WE)
if (IS_ABSOLUTE ${PATH})
get_filename_component(DIRECTORY_NAME "${PATH}" DIRECTORY)
if (WIN32)
- if (WIN32)
- set(${OUTPUT} "-l\"${DIRECTORY_NAME}/${NAME}\"" PARENT_SCOPE)
+ # On Windows, library files can be libname.lib or name.lib
+ get_filename_component(FULL_NAME "${PATH}" NAME)
+ # Extract library name without lib prefix and extension
+ string(REGEX REPLACE "^lib(.+)\\.[^.]+$" "\\1" LIB_NAME "${FULL_NAME}")
+ # If the regex didn't match (no lib prefix), use the name without extension
+ if ("${LIB_NAME}" STREQUAL "${FULL_NAME}")
+ set(LIB_NAME "${NAME}")
+ endif()
+ set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l${LIB_NAME}" PARENT_SCOPE)
else()
get_filename_component(FULL_NAME "${PATH}" NAME)
- else()
- get_filename_component(FULL_NAME "${PATH}" NAME)
- set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l:${FULL_NAME}" PARENT_SCOPE)
+ # Extract library name without lib prefix and extension for all platforms
+ string(REGEX REPLACE "^lib(.+)\\.[^.]+$" "\\1" LIB_NAME "${FULL_NAME}")
+ set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l${LIB_NAME}" PARENT_SCOPE)
+ get_filename_component(FULL_NAME "${PATH}" NAME)
+ string(REGEX REPLACE "^lib([^.]+).*$" "\\1" LIB_NAME "${FULL_NAME}")
+ # If the regex didn't match (no lib prefix), fall back to name without extension
+ if ("${LIB_NAME}" STREQUAL "${FULL_NAME}")
+ set(LIB_NAME "${NAME}")
endif()
+ set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l${LIB_NAME}" PARENT_SCOPE)
return()
endif()
@@ -31,17 +41,86 @@ function(generate_pkgconfig TARGET DESCRIPTION)

@@ -31,7 +32,42 @@ function(generate_pkgconfig TARGET DESCRIPTION)
# message("Generating pkg-config for ${TARGET}")
get_filename_component(PREFIX "${CMAKE_INSTALL_PREFIX}" REALPATH)

- get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+ # Get the target type to handle interface libraries differently
+ get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
+
+ # For interface libraries, use INTERFACE_LINK_LIBRARIES instead of LINK_LIBRARIES
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ get_target_property(LIST "${TARGET}" INTERFACE_LINK_LIBRARIES)
+ else()
+ get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+ endif()
+
+ # Handle the case when no libraries are found
+
+ if ("${LIST}" STREQUAL "LIST-NOTFOUND")
+ set(LIST "")
+ endif()
+
+ # Special handling for tdcore interface library
+ if ("${TARGET}" STREQUAL "tdcore" AND "${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ # For tdcore interface library, we need to link to the actual part libraries
+ # instead of the non-existent tdcore library
+ set(TDCORE_LIBS "")
+ set(COMBINED_REQS "")
+ set(COMBINED_LIBS "")
+
+ foreach (PART_LIB ${LIST})
+ if (TARGET "${PART_LIB}" AND "${PART_LIB}" MATCHES "^tdcore_part[0-9]+$")
+ # Add the actual part library to link against
+ list(APPEND TDCORE_LIBS "-l${PART_LIB}")
+
+ # Collect dependencies from the parts
+ get_target_property(PART_LIST "${PART_LIB}" LINK_LIBRARIES)
+ if (NOT "${PART_LIST}" STREQUAL "PART_LIST-NOTFOUND")
+ foreach (PART_DEP ${PART_LIST})
+ if (TARGET "${PART_DEP}")
+ list(APPEND COMBINED_REQS "${PART_DEP}")
+ else()
+ list(APPEND COMBINED_LIBS "${PART_DEP}")
+ endif()
+ endforeach()
+
+ set(INTERFACE_LIBS "")
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ set(PROPAGATED "")
+ foreach (DEP ${LIST})
+ if (TARGET "${DEP}")
+ get_target_property(DEP_TYPE "${DEP}" TYPE)
+ if ("${DEP_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${DEP_TYPE}" STREQUAL "SHARED_LIBRARY")
+ list(APPEND INTERFACE_LIBS "${DEP}")
+ get_target_property(DEP_LIBS "${DEP}" LINK_LIBRARIES)
+ if (NOT "${DEP_LIBS}" STREQUAL "DEP_LIBS-NOTFOUND")
+ list(APPEND PROPAGATED ${DEP_LIBS})
+ endif()
+ else()
+ list(APPEND PROPAGATED "${DEP}")
+ endif()
+ elseif (TARGET "${PART_LIB}")
+ list(APPEND COMBINED_REQS "${PART_LIB}")
+ else()
+ list(APPEND COMBINED_LIBS "${PART_LIB}")
+ list(APPEND PROPAGATED "${DEP}")
+ endif()
+ endforeach()
+
+ # Remove duplicates
+ if (COMBINED_REQS)
+ list(REMOVE_DUPLICATES COMBINED_REQS)
+ if (PROPAGATED)
+ list(REMOVE_DUPLICATES PROPAGATED)
+ endif()
+ if (COMBINED_LIBS)
+ list(REMOVE_DUPLICATES COMBINED_LIBS)
+ endif()
+ if (TDCORE_LIBS)
+ list(REMOVE_DUPLICATES TDCORE_LIBS)
+ endif()
+
+ set(LIST "")
+ list(APPEND LIST ${COMBINED_REQS})
+ list(APPEND LIST ${COMBINED_LIBS})
+
+ # Set a flag to use different Libs line for tdcore
+ set(USE_TDCORE_PARTS TRUE)
+ else()
+ set(USE_TDCORE_PARTS FALSE)
+ set(LIST "${PROPAGATED}")
+ endif()
+
+
set(REQS "")
set(LIBS "")
foreach (LIB ${LIST})
@@ -38,3 +74,9 @@ function(generate_pkgconfig TARGET DESCRIPTION)
if (TARGET "${LIB}")
- set(HAS_REQS 1)
- list(APPEND REQS "${LIB}")
+ # Skip internal tdcore parts as they don't have their own .pc files
+ if (NOT "${LIB}" MATCHES "^tdcore_part[0-9]+$")
+ set(HAS_REQS 1)
+ list(APPEND REQS "${LIB}")
+ if ("${LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
+ get_target_property(LIB_TYPE "${LIB}" TYPE)
+ if ("${LIB_TYPE}" STREQUAL "STATIC_LIBRARY")
+ continue()
+ endif()
+ endif()
set(HAS_REQS 1)
list(APPEND REQS "${LIB}")
@@ -41,7 +83,7 @@ function(generate_pkgconfig TARGET DESCRIPTION)
else()
set(HAS_LIBS 1)
get_relative_link(LINK "${LIB}")
Expand All @@ -116,40 +84,45 @@ index 3d3fa01d1..9303a2f43 100644
list(APPEND LIBS "${LINK}")
endif()
endif()
@@ -77,6 +156,19 @@ function(generate_pkgconfig TARGET DESCRIPTION)
@@ -77,6 +119,26 @@ function(generate_pkgconfig TARGET DESCRIPTION)
endif()

file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig")
+
+ # Generate the correct Libs line based on library type
+ if (USE_TDCORE_PARTS)
+ # For tdcore interface library, link to the actual part libraries
+
+ get_target_property(TARGET_OUTPUT_NAME "${TARGET}" OUTPUT_NAME)
+ if ("${TARGET_OUTPUT_NAME}" STREQUAL "TARGET_OUTPUT_NAME-NOTFOUND")
+ set(TARGET_OUTPUT_NAME "${TARGET}")
+ endif()
+
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ set(LIBS_LINE "")
+ foreach (PART_LIB ${TDCORE_LIBS})
+ set(LIBS_LINE "${LIBS_LINE} ${PART_LIB}")
+ foreach (ILIB ${INTERFACE_LIBS})
+ get_target_property(ILIB_OUTPUT_NAME "${ILIB}" OUTPUT_NAME)
+ if ("${ILIB_OUTPUT_NAME}" STREQUAL "ILIB_OUTPUT_NAME-NOTFOUND")
+ set(ILIB_OUTPUT_NAME "${ILIB}")
+ endif()
+ set(LIBS_LINE "${LIBS_LINE} -l${ILIB_OUTPUT_NAME}")
+ endforeach()
+ set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\"${LIBS_LINE}")
+ else()
+ set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}")
+ set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET_OUTPUT_NAME}")
+ endif()
+
+
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" CONTENT
"prefix=${PREFIX}
@@ -85,14 +177,14 @@ Description: ${DESCRIPTION}

@@ -85,14 +147,12 @@ Description: ${DESCRIPTION}
Version: ${PROJECT_VERSION}

CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"
-Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
+${LIBS_LINE}
${REQUIRES}${LIBRARIES}")

- get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
- if (LIBRARY_TYPE STREQUAL "STATIC_LIBRARY" OR LIBRARY_TYPE STREQUAL "SHARED_LIBRARY")
+ if ("${LIBRARY_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+ elseif ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ # Interface libraries are also supported, install the .pc file
+ if ("${LIBRARY_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY" OR
+ "${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
- elseif (LIBRARY_TYPE STREQUAL "INTERFACE_LIBRARY")
- # TODO: support interface libraries
Expand Down
Loading
Loading