Skip to content

Commit 55efce9

Browse files
build(cmake): fix compatibility with cmake 4.x and gcc15 (#448)
1 parent 80ad6ba commit 55efce9

29 files changed

+115
-33
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -321,20 +321,15 @@ jobs:
321321
run: |
322322
# variables
323323
declare -A pinned_deps
324-
pinned_deps["mingw-w64-${TOOLCHAIN}-cmake"]="3.31.6-1"
325-
if [[ ${MSYSTEM} == "ucrt64" ]]; then
326-
pinned_deps["mingw-w64-${TOOLCHAIN}-curl"]="8.9.1-2" # needed when cmake is pinned
327-
pinned_deps["mingw-w64-${TOOLCHAIN}-gcc"]="14.2.0-3"
328-
pinned_deps["mingw-w64-${TOOLCHAIN}-gcc-libs"]="14.2.0-3"
329-
pinned_deps["mingw-w64-${TOOLCHAIN}-nghttp3"]="1.9.0-1" # needed when cmake is pinned
330-
fi
324+
# nothing to pin currently
331325
332326
dependencies=(
333327
"diffutils"
334328
"git"
335329
"make"
336330
"pkg-config"
337331
"mingw-w64-${TOOLCHAIN}-binutils"
332+
"mingw-w64-${TOOLCHAIN}-cmake"
338333
"mingw-w64-${TOOLCHAIN}-gcc"
339334
"mingw-w64-${TOOLCHAIN}-make"
340335
"mingw-w64-${TOOLCHAIN}-nasm"
@@ -408,6 +403,8 @@ jobs:
408403
# create symlink for shebang bash compatibility
409404
ln -s /usr/local/bin/bash /bin/bash
410405
release: ${{ matrix.bsd_release }}
406+
run: |
407+
git config --global --add safe.directory "*"
411408
sync: nfs
412409

413410
- name: Setup ENV
@@ -456,7 +453,7 @@ jobs:
456453
echo "PROCESSOR_COUNT=${PROCESSOR_COUNT}" >> $GITHUB_OUTPUT
457454
echo "PROCESSOR_COUNT: $PROCESSOR_COUNT"
458455
459-
- name: Get x265 git history
456+
- name: Get submodule history
460457
run: |
461458
set -e
462459
@@ -465,7 +462,6 @@ jobs:
465462
466463
for repo in "x265_git" "SVT-AV1"; do
467464
cd $GITHUB_WORKSPACE/third-party/FFmpeg/$repo
468-
git config --global --add safe.directory $(pwd)
469465
git fetch --tags --force origin
470466
done
471467

CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,6 @@ message(STATUS "Detected system name: ${CMAKE_SYSTEM_NAME}")
186186
message(STATUS "Detected architecture: ${CMAKE_SYSTEM_PROCESSOR}")
187187
message(STATUS "CI Matrix name should be: '${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}'")
188188

189-
# set generated source path
190-
set(CMAKE_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/generated-src)
191-
192189
if(BUILD_ALL OR BUILD_ALL_SUNSHINE OR BUILD_FFMPEG)
193190
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ffmpeg/_main.cmake)
194191
endif()

cmake/apply_git_patch.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ macro(APPLY_GIT_PATCH repo_path patch_path)
1616
COMMAND_ECHO STDOUT)
1717

1818
if(${SUCCESS} EQUAL 1)
19-
# We don't stop here because it can happen in case of parallel builds
20-
message(WARNING "\n::error:: failed to apply the patch patch: ${patch_path}\n")
19+
message(FATAL_ERROR "\n::error:: failed to apply the patch: ${patch_path}\n")
2120
endif()
2221
endif()
2322
endmacro()

cmake/ffmpeg/_main.cmake

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/third-party/FFmpeg/FFmpeg DESTINATION ${CMAKE_GENERATED_SRC_PATH})
1+
# the destination directory needs to be same level down as the original source directory
2+
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/third-party/FFmpeg DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
23

3-
set(FFMPEG_GENERATED_SRC_PATH ${CMAKE_GENERATED_SRC_PATH}/FFmpeg)
4-
set(AVCODEC_GENERATED_SRC_PATH ${CMAKE_GENERATED_SRC_PATH}/FFmpeg/libavcodec)
4+
set(FFMPEG_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/FFmpeg)
5+
set(AVCODEC_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/libavcodec)
56

67
if(WIN32)
78
set(BUILD_FFMPEG_VAAPI OFF)

cmake/ffmpeg/amf.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
set(AMF_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/AMF)
2+
13
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_AMF_PATCHES)
2-
file(GLOB FFMPEG_AMF_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/AMF/*.patch)
4+
file(GLOB FFMPEG_AMF_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/AMF/*.patch)
35

46
foreach(patch_file ${FFMPEG_AMF_PATCH_FILES})
57
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})
@@ -9,7 +11,7 @@ endif()
911
set(AMF_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/usr/local/include/AMF)
1012
add_custom_target(amf ALL
1113
COMMAND ${CMAKE_COMMAND} -E copy_directory
12-
"${CMAKE_CURRENT_SOURCE_DIR}/third-party/FFmpeg/AMF/amf/public/include"
14+
"${AMF_GENERATED_SRC_PATH}/amf/public/include"
1315
"${AMF_TARGET_DIR}"
1416
COMMENT "Copying AMF headers"
1517
)

cmake/ffmpeg/ffmpeg.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_CBS_PATCHES)
2-
file(GLOB FFMPEG_CBS_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/cbs/*.patch)
2+
file(GLOB FFMPEG_CBS_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/cbs/*.patch)
33

44
foreach(patch_file ${FFMPEG_CBS_PATCH_FILES})
55
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})
@@ -139,7 +139,7 @@ endif()
139139
string(REPLACE ";" " " FFMPEG_EXTRA_CONFIGURE "${FFMPEG_EXTRA_CONFIGURE}")
140140
message(STATUS "FFmpeg configure options: ${FFMPEG_EXTRA_CONFIGURE}")
141141

142-
set(WORKING_DIR ${FFMPEG_GENERATED_SRC_PATH})
142+
set(WORKING_DIR "${FFMPEG_GENERATED_SRC_PATH}")
143143
UNIX_PATH(WORKING_DIR_UNIX ${WORKING_DIR})
144144
add_custom_target(ffmpeg ALL
145145
COMMAND ${SHELL_CMD} "PKG_CONFIG_PATH='${PKG_CONFIG_PATH}' \

cmake/ffmpeg/mf.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_MF_PATCHES)
2-
file(GLOB FFMPEG_MF_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/MF/*.patch)
2+
file(GLOB FFMPEG_MF_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/MF/*.patch)
33

44
foreach(patch_file ${FFMPEG_MF_FILES})
55
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})

cmake/ffmpeg/nv_codec_headers.cmake

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
set(NV_CODEC_HEADERS_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/nv-codec-headers)
2+
13
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_NV_CODEC_HEADERS_PATCHES)
2-
file(GLOB FFMPEG_NV_CODEC_HEADER_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/nv-codec-headers/*.patch)
4+
file(GLOB FFMPEG_NV_CODEC_HEADER_PATCH_FILES
5+
${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/nv-codec-headers/*.patch)
36

47
foreach(patch_file ${FFMPEG_NV_CODEC_HEADER_PATCH_FILES})
58
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})
69
endforeach()
710
endif()
811

9-
set(WORKING_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party/FFmpeg/nv-codec-headers")
12+
set(WORKING_DIR "${NV_CODEC_HEADERS_GENERATED_SRC_PATH}")
1013
UNIX_PATH(WORKING_DIR_UNIX ${WORKING_DIR})
1114
UNIX_PATH(DEST_DIR_UNIX ${CMAKE_CURRENT_BINARY_DIR})
1215
add_custom_target(nv-codec-headers ALL

cmake/ffmpeg/svt_av1.cmake

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
set(SVT_AV1_GENERATED_SRC_PATH ${CMAKE_CURRENT_BINARY_DIR}/FFmpeg/SVT-AV1)
2+
13
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_SVT_AV1_PATCHES)
2-
file(GLOB FFMPEG_SVT_AV1_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/SVT-AV1/*.patch)
4+
file(GLOB FFMPEG_SVT_AV1_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/SVT-AV1/*.patch)
35

46
foreach(patch_file ${FFMPEG_SVT_AV1_PATCH_FILES})
57
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})
@@ -12,8 +14,11 @@ set(BUILD_DEC OFF CACHE BOOL "Build decoders")
1214
set(ENABLE_AVX512 ON CACHE BOOL "Enable AVX512")
1315
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries")
1416

17+
# disable LTO because it forces projects linking against our pre-build to use the same compiler version
18+
set(SVT_AV1_LTO OFF CACHE BOOL "Enable Link Time Optimization (LTO)")
19+
1520
# build SVT-AV1
16-
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third-party/FFmpeg/SVT-AV1 SVT-AV1 SYSTEM)
21+
add_subdirectory(${SVT_AV1_GENERATED_SRC_PATH} SVT-AV1 SYSTEM)
1722
add_dependencies(${CMAKE_PROJECT_NAME} SvtAv1Enc)
1823

1924
# install SVT-AV1 as a build target, this must be installed before building FFmpeg
@@ -25,4 +30,4 @@ add_custom_target(SvtAv1
2530
add_dependencies(SvtAv1 SvtAv1Enc)
2631
add_dependencies(${CMAKE_PROJECT_NAME} SvtAv1)
2732

28-
# PKG_CONFIG_PATH alraedy set since this is installed directly to the prefix
33+
# PKG_CONFIG_PATH already set since this is installed directly to the prefix

cmake/ffmpeg/vaapi.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
if(BUILD_FFMPEG_ALL_PATCHES OR BUILD_FFMPEG_VAAPI_PATCHES)
2-
file(GLOB FFMPEG_VAAPI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/VAAPI/*.patch)
2+
file(GLOB FFMPEG_VAAPI_FILES ${CMAKE_CURRENT_SOURCE_DIR}/patches/FFmpeg/FFmpeg/VAAPI/*.patch)
33

44
foreach(patch_file ${FFMPEG_VAAPI_FILES})
55
APPLY_GIT_PATCH(${FFMPEG_GENERATED_SRC_PATH} ${patch_file})

0 commit comments

Comments
 (0)