Skip to content

Commit d5d0ab3

Browse files
Fix
1 parent 2643017 commit d5d0ab3

File tree

2 files changed

+95
-12
lines changed

2 files changed

+95
-12
lines changed

.github/workflows/Windows.yml

Lines changed: 78 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,35 @@ jobs:
133133
- name: Install NSIS
134134
run: choco install nsis --x86 --force -y
135135

136-
- name: Setup ccache
137-
uses: hendrikmuhs/ccache-action@v1.2
136+
- name: Cache ccache
137+
uses: actions/cache@v4
138138
with:
139-
key: ${{ runner.os }}-mingw64-ccache
140-
restore-keys: ${{ runner.os }}-mingw64-ccache
141-
max-size: 2G
142-
verbose: 2
143-
create-symlink: true
144-
job-summary: "🔧 ccache Statistics"
139+
path: D:/a/_temp/ccache
140+
key: ${{ runner.os }}-mingw64-ccache-${{ hashFiles('src/**/*.cpp', 'src/**/*.c', 'src/**/*.h') }}
141+
restore-keys: |
142+
${{ runner.os }}-mingw64-ccache-
143+
144+
- name: Setup ccache
145+
shell: msys2 {0}
146+
run: |
147+
echo "=== ccache Setup ==="
148+
ccache --version
149+
150+
# Ensure cache directory exists and use Windows-compatible path
151+
export CCACHE_DIR="/d/a/_temp/ccache"
152+
mkdir -p "$CCACHE_DIR"
153+
154+
ccache --zero-stats
155+
ccache --set-config=max_size=2G
156+
ccache --set-config=cache_dir="$CCACHE_DIR"
157+
ccache --set-config=compression=true
158+
159+
echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
160+
161+
echo "=== ccache Configuration ==="
162+
ccache --show-config
163+
echo "Cache directory: $CCACHE_DIR"
164+
ls -la "$CCACHE_DIR" || echo "Cache directory not accessible"
145165
146166
147167
- name: Cache FetchContent dependencies
@@ -191,7 +211,7 @@ jobs:
191211
echo "QT_ROOT_DIR_MSYS: '$QT_ROOT_DIR_MSYS'"
192212
echo "Qt6_DIR: '$Qt6_DIR'"
193213
194-
# ccache is automatically configured by the hendrikmuhs/ccache-action
214+
# ccache is configured manually for MSYS2 compatibility
195215
echo "=== ccache Setup Debug ==="
196216
echo "ccache available: $(which ccache || echo 'not found')"
197217
if command -v ccache >/dev/null 2>&1; then
@@ -276,7 +296,55 @@ jobs:
276296
cmake --build . --parallel $(nproc) -- VERBOSE=1
277297
278298
echo "=== Build Complete ==="
279-
echo "ccache statistics will be shown in job summary by ccache-action"
299+
if command -v ccache >/dev/null 2>&1; then
300+
echo "=== Final ccache Statistics ==="
301+
ccache --show-stats
302+
fi
303+
304+
- name: Generate ccache Statistics Summary
305+
shell: msys2 {0}
306+
run: |
307+
echo "## 🔧 ccache Build Statistics" >> $GITHUB_STEP_SUMMARY
308+
echo "" >> $GITHUB_STEP_SUMMARY
309+
if command -v ccache >/dev/null 2>&1; then
310+
# Get ccache statistics
311+
STATS=$(ccache --show-stats)
312+
313+
# Extract key metrics
314+
CACHE_HITS=$(echo "$STATS" | grep -E "cache hit" | head -1 | awk '{print $1}')
315+
CACHE_MISSES=$(echo "$STATS" | grep -E "cache miss" | head -1 | awk '{print $1}')
316+
TOTAL_CALLS=$((CACHE_HITS + CACHE_MISSES))
317+
318+
if [ $TOTAL_CALLS -gt 0 ]; then
319+
HIT_RATE=$(awk "BEGIN {printf \"%.1f\", ($CACHE_HITS/$TOTAL_CALLS)*100}")
320+
else
321+
HIT_RATE="0.0"
322+
fi
323+
324+
# Get cache size info
325+
CACHE_SIZE=$(echo "$STATS" | grep -E "cache size" | awk '{print $3 " " $4}')
326+
MAX_CACHE_SIZE=$(ccache --show-config | grep max_size | cut -d'=' -f2 | tr -d ' ')
327+
328+
echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
329+
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
330+
echo "| Cache Hits | $CACHE_HITS |" >> $GITHUB_STEP_SUMMARY
331+
echo "| Cache Misses | $CACHE_MISSES |" >> $GITHUB_STEP_SUMMARY
332+
echo "| Hit Rate | $HIT_RATE% |" >> $GITHUB_STEP_SUMMARY
333+
echo "| Cache Size | $CACHE_SIZE |" >> $GITHUB_STEP_SUMMARY
334+
echo "| Max Cache Size | $MAX_CACHE_SIZE |" >> $GITHUB_STEP_SUMMARY
335+
echo "" >> $GITHUB_STEP_SUMMARY
336+
337+
# Add performance indicator
338+
if (( $(echo "$HIT_RATE > 50" | bc -l) )); then
339+
echo "🚀 **Excellent cache performance!**" >> $GITHUB_STEP_SUMMARY
340+
elif (( $(echo "$HIT_RATE > 20" | bc -l) )); then
341+
echo "✅ **Good cache performance**" >> $GITHUB_STEP_SUMMARY
342+
else
343+
echo "🔄 **Building cache for future runs**" >> $GITHUB_STEP_SUMMARY
344+
fi
345+
else
346+
echo "❌ ccache not available" >> $GITHUB_STEP_SUMMARY
347+
fi
280348
281349
- name: Create Standalone Deployment
282350
shell: msys2 {0}

src/CMakeLists.txt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
231231
set(ARCHIVE_BUILD_STATIC_LIBS ON CACHE BOOL "")
232232
set(ARCHIVE_BUILD_EXAMPLES OFF CACHE BOOL "")
233233
set(ENABLE_ZSTD ON CACHE BOOL "")
234+
set(ENABLE_LZMA ON CACHE BOOL "")
235+
# Point libarchive to our bundled LZMA
236+
set(LIBLZMA_INCLUDE_DIR ${xz_SOURCE_DIR}/src/liblzma/api CACHE PATH "" FORCE)
237+
set(LIBLZMA_LIBRARY liblzma CACHE FILEPATH "" FORCE)
234238
set(POSIX_REGEX_LIB "libc" CACHE STRING "" FORCE)
235239
set(LIBARCHIVE_VERSION "3.8.1")
236240

@@ -273,6 +277,7 @@ unset(ENABLE_CPIO)
273277
unset(ENABLE_CAT)
274278
unset(ARCHIVE_BUILD_SHARED_LIBS)
275279
unset(ENABLE_ZSTD)
280+
unset(ENABLE_LZMA)
276281
set(LibArchive_FOUND true CACHE BOOL "" FORCE)
277282
set(LibArchive_LIBRARIES archive_static CACHE FILEPATH "" FORCE)
278283
set(LibArchive_INCLUDE_DIR ${libarchive_SOURCE_DIR}/libarchive CACHE PATH "" FORCE)
@@ -740,7 +745,7 @@ if(WIN32)
740745
# Prefer static libraries on Windows
741746
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
742747
endif()
743-
target_link_libraries(${PROJECT_NAME} PRIVATE ${QT}::Core ${QT}::Quick ${QT}::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${ZSTD_LIBRARIES} ${LIBLZMA_LIBRARIES} ${ZLIB_LINK_TARGET} ${ATOMIC_LIBRARY} ${EXTRALIBS} crypt32 secur32 bcrypt)
748+
target_link_libraries(${PROJECT_NAME} PRIVATE ${QT}::Core ${QT}::Quick ${QT}::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${ZSTD_LIBRARIES} liblzma ${ZLIB_LINK_TARGET} ${ATOMIC_LIBRARY} ${EXTRALIBS} crypt32 secur32 bcrypt)
744749
else()
745750
# On macOS/Linux, let CMake handle transitive dependencies more cleanly
746751
if(APPLE)
@@ -756,6 +761,16 @@ else()
756761
${EXTRALIBS}
757762
)
758763
else()
759-
target_link_libraries(${PROJECT_NAME} PRIVATE ${QT}::Core ${QT}::Quick ${QT}::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${ZSTD_LIBRARIES} ${LIBLZMA_LIBRARIES} ${ZLIB_LINK_TARGET} ${ATOMIC_LIBRARY} ${EXTRALIBS})
764+
# Use consistent target-based linking for Linux too
765+
target_link_libraries(${PROJECT_NAME} PRIVATE
766+
${QT}::Core ${QT}::Quick ${QT}::Svg
767+
${CURL_LIBRARIES}
768+
${LibArchive_LIBRARIES}
769+
${ZSTD_LIBRARIES}
770+
liblzma
771+
${ZLIB_LINK_TARGET}
772+
${ATOMIC_LIBRARY}
773+
${EXTRALIBS}
774+
)
760775
endif()
761776
endif()

0 commit comments

Comments
 (0)