55
66target_sources (${CMAKE_PROJECT_NAME }
77 PRIVATE
8- QGCLZMA.cc
9- QGCLZMA.h
10- QGCZip.cc
11- QGCZip.h
12- QGCZlib .cc
13- QGCZlib .h
8+ # Unified compression interface
9+ QGCCompression.cc
10+ QGCCompression.h
11+ # libarchive-based implementation
12+ QGClibarchive .cc
13+ QGClibarchive .h
1414)
1515
1616target_include_directories (${CMAKE_PROJECT_NAME } PRIVATE ${CMAKE_CURRENT_SOURCE_DIR } )
@@ -22,17 +22,24 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_
2222# Platform-specific zlib options
2323set (ZLIB_EXTRA_OPTIONS)
2424if (WIN32 )
25- set (ZLIB_EXTRA_OPTIONS
26- "ZLIB_INSTALL_COMPAT_DLL OFF"
27- )
25+ list (APPEND ZLIB_EXTRA_OPTIONS "ZLIB_INSTALL_COMPAT_DLL OFF" )
26+ endif ()
27+
28+ list (APPEND ZLIB_EXTRA_OPTIONS "WITH_NATIVE_INSTRUCTIONS OFF" )
29+
30+ # Disable arch-specific optimizations when cross-compiling (x86 asm fails on ARM targets)
31+ if (APPLE OR ANDROID OR CMAKE_CROSSCOMPILING )
32+ list (APPEND ZLIB_EXTRA_OPTIONS "WITH_OPTIM OFF" )
2833endif ()
2934
3035CPMAddPackage (
3136 NAME zlib
32- GITHUB_REPOSITORY madler /zlib
33- GIT_TAG develop
37+ GITHUB_REPOSITORY zlib-ng /zlib-ng
38+ GIT_TAG 2.3.2
3439 OPTIONS
40+ "ZLIB_COMPAT ON"
3541 "ZLIB_BUILD_TESTING OFF"
42+ "WITH_GTEST OFF"
3643 "ZLIB_BUILD_SHARED OFF"
3744 "ZLIB_BUILD_STATIC ON"
3845 "ZLIB_BUILD_MINIZIP OFF"
@@ -41,48 +48,202 @@ CPMAddPackage(
4148 "${ZLIB_EXTRA_OPTIONS} "
4249)
4350
44- target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE ZLIB::ZLIBSTATIC )
51+ target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE zlibstatic )
52+
53+ # Export ZLIB paths for libarchive (prevent using system zlib during cross-compile)
54+ set (ZLIB_INCLUDE_DIR "${zlib_SOURCE_DIR } ;${zlib_BINARY_DIR } " CACHE PATH "" FORCE )
55+ set (ZLIB_LIBRARY "zlibstatic" CACHE STRING "" FORCE )
56+ set (ZLIB_LIBRARIES "zlibstatic" CACHE STRING "" FORCE )
57+ set (ZLIB_FOUND TRUE CACHE BOOL "" FORCE )
58+ # libarchive's FindZLIB may expect ZLIB::ZLIB target
59+ if (NOT TARGET ZLIB::ZLIB)
60+ add_library (ZLIB::ZLIB ALIAS zlibstatic )
61+ endif ()
4562
4663# ============================================================================
47- # XZ (LZMA) Integration
64+ # XZ (LZMA) Integration - liblzma from xz-utils
4865# ============================================================================
4966
5067CPMAddPackage (
51- NAME xz-embedded
52- VERSION 2024-12-30
53- GITHUB_REPOSITORY tukaani-project/xz-embedded
68+ NAME xz
69+ VERSION 5.8.2
70+ GITHUB_REPOSITORY tukaani-project/xz
71+ GIT_TAG v5.8.2
5472 OPTIONS
55- "BUILD_SHAPELIB_CONTRIB OFF"
56- "BUILD_APPS OFF"
57- "BUILD_TESTING OFF"
73+ "BUILD_SHARED_LIBS OFF"
74+ "XZ_TOOL_XZ OFF"
75+ "XZ_TOOL_XZDEC OFF"
76+ "XZ_TOOL_LZMADEC OFF"
77+ "XZ_TOOL_LZMAINFO OFF"
78+ "XZ_TOOL_SCRIPTS OFF"
79+ "XZ_NLS OFF"
80+ "XZ_THREADS no"
81+ "XZ_SMALL OFF"
82+ "XZ_DOC OFF"
83+ "XZ_DOXYGEN OFF"
5884)
5985
60- # Build XZ library from source
61- qt_add_library (xz STATIC
62- ${xz-embedded_SOURCE_DIR } /linux/include/linux/xz.h
63- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_crc32.c
64- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_crc64.c
65- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_dec_lzma2.c
66- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_dec_stream.c
67- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_lzma2.h
68- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_private.h
69- ${xz-embedded_SOURCE_DIR } /linux/lib/xz/xz_stream.h
70- ${xz-embedded_SOURCE_DIR } /userspace/xz_config.h
86+ if (TARGET liblzma)
87+ target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE liblzma )
88+ # Help libarchive find our liblzma (prevent using system liblzma during cross-compile)
89+ set (LIBLZMA_INCLUDE_DIR "${xz_SOURCE_DIR } /src/liblzma/api" CACHE PATH "" FORCE )
90+ set (LIBLZMA_LIBRARY "liblzma" CACHE STRING "" FORCE )
91+ set (LIBLZMA_FOUND TRUE CACHE BOOL "" FORCE )
92+ set (LIBLZMA_LIBRARIES "liblzma" CACHE STRING "" FORCE )
93+ set (LIBLZMA_HAS_AUTO_DECODER TRUE CACHE BOOL "" FORCE )
94+ set (LIBLZMA_HAS_EASY_ENCODER TRUE CACHE BOOL "" FORCE )
95+ set (LIBLZMA_HAS_LZMA_PRESET TRUE CACHE BOOL "" FORCE )
96+ set (LibLZMA_FOUND TRUE CACHE BOOL "" FORCE )
97+ # libarchive's FindLibLZMA expects LibLZMA::LibLZMA target
98+ if (NOT TARGET LibLZMA::LibLZMA)
99+ add_library (LibLZMA::LibLZMA ALIAS liblzma )
100+ endif ()
101+ message (STATUS "liblzma support enabled" )
102+ else ()
103+ message (FATAL_ERROR "liblzma target not found" )
104+ endif ()
105+
106+ # ============================================================================
107+ # Zstandard (ZSTD) Integration
108+ # ============================================================================
109+
110+ CPMAddPackage (
111+ NAME zstd
112+ VERSION 1.5.7
113+ GITHUB_REPOSITORY facebook/zstd
114+ GIT_TAG v1.5.7
115+ SOURCE_SUBDIR build /cmake
116+ OPTIONS
117+ "ZSTD_BUILD_PROGRAMS OFF"
118+ "ZSTD_BUILD_TESTS OFF"
119+ "ZSTD_BUILD_CONTRIB OFF"
120+ "ZSTD_BUILD_SHARED OFF"
121+ "ZSTD_BUILD_STATIC ON"
122+ "ZSTD_MULTITHREAD_SUPPORT OFF"
71123)
72124
73- target_include_directories (xz
74- PUBLIC
75- ${xz-embedded_SOURCE_DIR } /linux/include/linux
76- PRIVATE
77- ${xz-embedded_SOURCE_DIR } /linux/lib/xz
78- ${xz-embedded_SOURCE_DIR } /userspace
125+ if (TARGET libzstd_static)
126+ target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE libzstd_static )
127+ target_compile_definitions (${CMAKE_PROJECT_NAME } PRIVATE QGC_ZSTD_ENABLED )
128+ # Help libarchive find our ZSTD (prevent using system zstd during cross-compile)
129+ set (ZSTD_INCLUDE_DIR "${zstd_SOURCE_DIR } /lib" CACHE PATH "" FORCE )
130+ set (ZSTD_LIBRARY "libzstd_static" CACHE STRING "" FORCE )
131+ set (ZSTD_LIBRARIES "libzstd_static" CACHE STRING "" FORCE )
132+ set (ZSTD_FOUND TRUE CACHE BOOL "" FORCE )
133+ set (Zstd_FOUND TRUE CACHE BOOL "" FORCE )
134+ # libarchive's FindZstd.cmake expects Zstd::Zstd target
135+ if (NOT TARGET Zstd::Zstd)
136+ add_library (Zstd::Zstd ALIAS libzstd_static )
137+ endif ()
138+ if (NOT TARGET zstd::libzstd_static)
139+ add_library (zstd::libzstd_static ALIAS libzstd_static )
140+ endif ()
141+ message (STATUS "Zstandard support enabled" )
142+ else ()
143+ message (WARNING "zstd target not found, ZSTD compression will be disabled" )
144+ endif ()
145+
146+ # ============================================================================
147+ # LZ4 Integration (Fast compression)
148+ # ============================================================================
149+
150+ CPMAddPackage (
151+ NAME lz4
152+ VERSION 1.10.0
153+ GITHUB_REPOSITORY lz4/lz4
154+ GIT_TAG v1.10.0
155+ SOURCE_SUBDIR build /cmake
156+ OPTIONS
157+ "LZ4_BUILD_CLI OFF"
158+ "LZ4_BUILD_LEGACY_LZ4C OFF"
159+ "BUILD_SHARED_LIBS OFF"
160+ "BUILD_STATIC_LIBS ON"
79161)
80162
81- target_compile_definitions (xz
82- PRIVATE
83- XZ_DEC_ANY_CHECK
84- PUBLIC
85- XZ_USE_CRC64
163+ if (TARGET lz4_static)
164+ # Help libarchive find our LZ4
165+ set (LZ4_INCLUDE_DIR "${lz4_SOURCE_DIR } /lib" CACHE PATH "" FORCE )
166+ set (LZ4_LIBRARY "lz4_static" CACHE STRING "" FORCE )
167+ set (LZ4_FOUND TRUE CACHE BOOL "" FORCE )
168+ if (NOT TARGET LZ4::LZ4)
169+ add_library (LZ4::LZ4 ALIAS lz4_static )
170+ endif ()
171+ message (STATUS "LZ4 support enabled" )
172+ else ()
173+ message (WARNING "LZ4 target not found" )
174+ endif ()
175+
176+ # ============================================================================
177+ # BZip2 Integration (official repo with CMake support)
178+ # ============================================================================
179+
180+ CPMAddPackage (
181+ NAME bzip2
182+ VERSION 1.0.8
183+ GIT_REPOSITORY https://gitlab.com/bzip2/bzip2.git
184+ GIT_TAG 66c46b8c9436613fd81bc5d03f63a61933a4dcc3 # master (tagged releases lack CMake)
185+ OPTIONS
186+ "ENABLE_LIB_ONLY ON"
187+ "ENABLE_SHARED_LIB OFF"
188+ "ENABLE_STATIC_LIB ON"
189+ "ENABLE_APP OFF"
190+ "ENABLE_DOCS OFF"
191+ "ENABLE_EXAMPLES OFF"
192+ "ENABLE_TESTS OFF"
86193)
87194
88- target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE xz )
195+ if (TARGET bz2_static)
196+ # Help libarchive/minizip find our BZip2
197+ set (BZIP2_INCLUDE_DIR "${bzip2_SOURCE_DIR } " CACHE PATH "" FORCE )
198+ set (BZIP2_LIBRARY "bz2_static" CACHE STRING "" FORCE )
199+ set (BZIP2_FOUND TRUE CACHE BOOL "" FORCE )
200+ set (BZIP2_LIBRARIES "bz2_static" CACHE STRING "" FORCE )
201+ if (NOT TARGET BZip2::BZip2)
202+ add_library (BZip2::BZip2 ALIAS bz2_static )
203+ endif ()
204+ message (STATUS "BZip2 support enabled" )
205+ else ()
206+ message (WARNING "BZip2 target not found" )
207+ endif ()
208+
209+ # ============================================================================
210+ # libarchive Integration (Full-featured C library)
211+ # ============================================================================
212+
213+ CPMAddPackage (
214+ NAME libarchive
215+ VERSION 3.8.4
216+ GITHUB_REPOSITORY libarchive/libarchive
217+ GIT_TAG v3.8.4
218+ OPTIONS
219+ "ENABLE_TEST OFF"
220+ "ENABLE_INSTALL OFF"
221+ "ENABLE_TAR OFF"
222+ "ENABLE_CPIO OFF"
223+ "ENABLE_CAT OFF"
224+ "ENABLE_UNZIP OFF"
225+ "ENABLE_ACL OFF"
226+ "ENABLE_XATTR OFF"
227+ "ENABLE_ICONV OFF"
228+ "ENABLE_PCRE2POSIX OFF"
229+ "ENABLE_LIBXML2 OFF"
230+ "ENABLE_EXPAT OFF"
231+ "ENABLE_ZLIB ON"
232+ "ENABLE_LZMA ON"
233+ "ENABLE_BZip2 ON"
234+ "ENABLE_ZSTD ON"
235+ "ENABLE_LIBB2 OFF"
236+ "ENABLE_LZ4 ON"
237+ "ENABLE_LIBMD OFF"
238+ "ENABLE_OPENSSL OFF"
239+ "ENABLE_MBEDTLS OFF"
240+ )
241+
242+ if (TARGET archive_static)
243+ target_link_libraries (${CMAKE_PROJECT_NAME } PRIVATE archive_static )
244+ target_compile_definitions (${CMAKE_PROJECT_NAME } PRIVATE QGC_LIBARCHIVE_ENABLED LIBARCHIVE_STATIC )
245+ message (STATUS "libarchive support enabled" )
246+ else ()
247+ message (WARNING "libarchive target not found, QGCZipLibarchive will be disabled" )
248+ endif ()
249+
0 commit comments