build: support building with system wide-integer (#8209)

This commit is contained in:
Yat Ho
2026-01-28 02:22:32 +08:00
committed by GitHub
parent 78e733e7bd
commit c738b9fe4d
4 changed files with 41 additions and 33 deletions

View File

@@ -167,7 +167,8 @@ jobs:
-DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Ubuntu`
- name: Make - name: Make
run: cmake --build obj --config Debug --target libtransmission-test transmission-show run: cmake --build obj --config Debug --target libtransmission-test transmission-show
- name: Test with sanitizers - name: Test with sanitizers
@@ -217,7 +218,8 @@ jobs:
-DUSE_SYSTEM_DEFAULT=ON \ -DUSE_SYSTEM_DEFAULT=ON \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Homebrew` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Homebrew` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Homebrew` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Homebrew`
- name: Make - name: Make
run: cmake --build obj --config Debug --target libtransmission-test transmission-show run: cmake --build obj --config Debug --target libtransmission-test transmission-show
- name: Test with sanitizers - name: Test with sanitizers
@@ -263,7 +265,8 @@ jobs:
-DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Ubuntu`
- name: Make (Core) - name: Make (Core)
run: cmake --build obj --config Debug --target transmission 2>&1 | tee makelog run: cmake --build obj --config Debug --target transmission 2>&1 | tee makelog
- name: Make (Tests) - name: Make (Tests)
@@ -406,7 +409,8 @@ jobs:
-DUSE_SYSTEM_DEFAULT=ON \ -DUSE_SYSTEM_DEFAULT=ON \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Homebrew` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Homebrew` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Homebrew` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Homebrew` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Homebrew`
- name: Make - name: Make
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -495,7 +499,8 @@ jobs:
-DUSE_SYSTEM_B64=OFF `# Not packaged in Alpine` \ -DUSE_SYSTEM_B64=OFF `# Not packaged in Alpine` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Alpine` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Alpine` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Alpine` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Alpine` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Alpine` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Alpine` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Alpine`
- name: Make - name: Make
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -771,7 +776,8 @@ jobs:
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian 11` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_FMT=OFF `# Debian 11 package too old` \ -DUSE_SYSTEM_FMT=OFF `# Debian 11 package too old` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Debian 11` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Debian 11` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Debian 11` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Debian 11`
- name: Build - name: Build
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -849,7 +855,8 @@ jobs:
-DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Debian` \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Debian` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Debian` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Debian` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Debian` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Debian` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Debian` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Debian`
- name: Build - name: Build
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -927,7 +934,8 @@ jobs:
-DUSE_SYSTEM_DEFAULT=ON \ -DUSE_SYSTEM_DEFAULT=ON \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Fedora` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Fedora` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Fedora` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Fedora` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Fedora` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Fedora` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Fedora`
- name: Build - name: Build
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -1001,7 +1009,8 @@ jobs:
-DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Ubuntu`
- name: Make - name: Make
run: cmake --build obj --config RelWithDebInfo run: cmake --build obj --config RelWithDebInfo
- name: Test - name: Test
@@ -1115,6 +1124,7 @@ jobs:
-DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_CRC32C=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_DHT=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \ -DUSE_SYSTEM_SMALL=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` -DUSE_SYSTEM_UTP=OFF `# Not packaged in Ubuntu` \
-DUSE_SYSTEM_WIDE_INTEGER=OFF `# Not packaged in Ubuntu`
- name: Make - name: Make
run: cmake --build obj --config RelWithDebInfo -- "-k 0" run: cmake --build obj --config RelWithDebInfo -- "-k 0"

View File

@@ -83,6 +83,7 @@ tr_auto_option(USE_SYSTEM_MINIUPNPC "Use system miniupnpc library" ${USE_SYSTEM_
tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_NATPMP "Use system natpmp library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_SMALL "Use system small library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_SMALL "Use system small library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_UTP "Use system utp library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_UTP "Use system utp library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_WIDE_INTEGER "Use system WideInteger library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_B64 "Use system b64 library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_PSL "Use system psl library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_PSL "Use system psl library" ${USE_SYSTEM_DEFAULT})
tr_auto_option(USE_SYSTEM_CRC32C "Use system crc32c library" ${USE_SYSTEM_DEFAULT}) tr_auto_option(USE_SYSTEM_CRC32C "Use system crc32c library" ${USE_SYSTEM_DEFAULT})
@@ -251,7 +252,6 @@ set(SOURCE_ICONS_DIR "${PROJECT_SOURCE_DIR}/icons")
find_package(FastFloat) find_package(FastFloat)
find_package(RapidJSON) find_package(RapidJSON)
find_package(UtfCpp) find_package(UtfCpp)
find_package(WideInteger)
find_package(Threads) find_package(Threads)
find_package(PkgConfig QUIET) find_package(PkgConfig QUIET)
@@ -610,6 +610,25 @@ target_compile_definitions(transmission::small
INTERFACE INTERFACE
SMALL_DISABLE_EXCEPTIONS=1) SMALL_DISABLE_EXCEPTIONS=1)
tr_add_external_auto_library(WIDE_INTEGER WideInteger
SUBPROJECT
SOURCE_DIR wide-integer)
add_library(transmission::WideInteger INTERFACE IMPORTED)
target_link_libraries(transmission::WideInteger
INTERFACE
WideInteger::WideInteger)
include(CheckCXXSourceCompiles)
check_cxx_source_compiles(
"int main()
{
unsigned __int128 u;
signed __int128 i;
return 0;
}" TR_HAVE_INT128)
target_compile_definitions(transmission::WideInteger
INTERFACE
$<$<BOOL:${TR_HAVE_INT128}>:WIDE_INTEGER_HAS_LIMB_TYPE_UINT64>)
set(TR_WEB_ASSETS ${PROJECT_SOURCE_DIR}/web/public_html) set(TR_WEB_ASSETS ${PROJECT_SOURCE_DIR}/web/public_html)
if(REBUILD_WEB) if(REBUILD_WEB)
tr_get_required_flag(REBUILD_WEB NPM_IS_REQUIRED) tr_get_required_flag(REBUILD_WEB NPM_IS_REQUIRED)

View File

@@ -1,21 +0,0 @@
add_library(WideInteger::WideInteger INTERFACE IMPORTED)
target_include_directories(WideInteger::WideInteger
INTERFACE
${TR_THIRD_PARTY_SOURCE_DIR}/wide-integer)
set(_INT128_TEST_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckInt128.c)
file(WRITE ${_INT128_TEST_FILE}
"int main()
{
unsigned __int128 u;
signed __int128 i;
return 0;
}")
try_compile(_HAVE_INT128
${CMAKE_BINARY_DIR}
${_INT128_TEST_FILE})
target_compile_definitions(WideInteger::WideInteger
INTERFACE
$<$<BOOL:${_HAVE_INT128}>:WIDE_INTEGER_HAS_LIMB_TYPE_UINT64>
)

View File

@@ -287,7 +287,7 @@ target_link_libraries(${TR_NAME}
RapidJSON RapidJSON
utf8::cpp utf8::cpp
wildmat wildmat
WideInteger::WideInteger transmission::WideInteger
Crc32c::crc32c Crc32c::crc32c
$<$<BOOL:${WIN32}>:crypt32> $<$<BOOL:${WIN32}>:crypt32>
$<$<BOOL:${WIN32}>:shlwapi> $<$<BOOL:${WIN32}>:shlwapi>