7 Commits
Author SHA1 Message Date
ParantezTech 3b502d4ed7 fix patch 2026-07-30 14:06:36 +03:00
ParantezTech aacc319a34 [codec] add hevc, ljpeg and dshow 2026-07-30 14:01:39 +03:00
ParantezTech 36ec5ae5ab switch to dynamically linked 2 2026-07-30 13:53:45 +03:00
ParantezTech c92df7bad4 switch to dynamically linked 2026-07-23 00:51:52 +03:00
ParantezTech 6a6861e357 update for linux 2026-07-22 20:03:49 +03:00
ParantezTech 1dd39167f6 update for linux 2026-07-22 19:07:16 +03:00
ParantezTech 638eda66c0 triplets for linux 2026-07-22 18:55:17 +03:00
8 changed files with 144 additions and 37 deletions

No files matched your search

+10 -4
View File
@@ -27,11 +27,11 @@ jobs:
os: ubuntu-latest
triplet: linux-release
vcpkg-root: /usr/local/share/vcpkg
extra-args: ""
extra-args: --overlay-triplets=./triplets
- build: windows
os: windows-latest
triplet: win-llvm-static-release
triplet: win-llvm-dynamic-release
vcpkg-root: C:\vcpkg
extra-args: --overlay-triplets=./triplets
@@ -55,7 +55,7 @@ jobs:
os: macos-latest
triplet: osx-release
vcpkg-root: /Users/runner/vcpkg
extra-args: ""
extra-args: --overlay-triplets=./triplets
- build: macos
os: macos-latest
@@ -140,7 +140,13 @@ jobs:
- uses: actions/upload-artifact@v7
with:
name: ffmpeg-${{ matrix.build }}-${{ matrix.arch }}
path: ${{ matrix.vcpkg-root }}/packages/ffmpeg_${{ matrix.arch }}-${{ matrix.triplet }}/lib
# Dynamic-linkage triplets put the actual runtime library in bin/
# on Windows (.dll; lib/ only has the .lib import stub) and in
# lib/ on Linux/macOS (.so/.dylib); include both so whichever
# applies is captured.
path: |
${{ matrix.vcpkg-root }}/packages/ffmpeg_${{ matrix.arch }}-${{ matrix.triplet }}/lib
${{ matrix.vcpkg-root }}/packages/ffmpeg_${{ matrix.arch }}-${{ matrix.triplet }}/bin
if: ${{ always() }}
create-release:
+48 -32
View File
@@ -2,12 +2,23 @@ diff --git a/ports/ffmpeg/build.sh.in b/ports/ffmpeg/build.sh.in
index dfb5698..4fd8cc1 100644
--- a/ports/ffmpeg/build.sh.in
+++ b/ports/ffmpeg/build.sh.in
@@ -75,7 +75,7 @@ OSX_ARCH_COUNT=0@OSX_ARCH_COUNT@
@@ -75,7 +75,18 @@ OSX_ARCH_COUNT=0@OSX_ARCH_COUNT@
# x64 Android build fails with 'relocation R_X86_64_PC32 cannot be used against symbol ff_h264_cabac_tables; recompile with -fPIC'
if [ "@VCPKG_CMAKE_SYSTEM_NAME@" = "Android" ]; then
OPTIONS_arm=" --disable-asm --disable-x86asm"
- OPTIONS_arm64=" --disable-asm --disable-x86asm"
+ OPTIONS_arm64=" --enable-asm --disable-x86asm"
+ OPTIONS_arm64=" --enable-asm --disable-x86asm"
+ OPTIONS_x86=" --disable-asm --disable-x86asm"
+ OPTIONS_x86_64="${OPTIONS_x86}"
+elif [ "@VCPKG_CMAKE_SYSTEM_NAME@" = "Linux" ]; then
+ # x64 Linux fails the same way Android x64 does above when these static
+ # libs get linked into another shared library (e.g. SharpEmu's bink2
+ # bridge): 'relocation R_X86_64_PC32 against symbol ff_M24A can not be
+ # used when making a shared object; recompile with -fPIC'. --enable-pic
+ # doesn't make FFmpeg's hand-written x86 asm PIC-safe for this vcpkg
+ # build, so disable it like Android does.
+ OPTIONS_arm=" --disable-asm --disable-x86asm"
+ OPTIONS_arm64=" --enable-asm --disable-x86asm"
OPTIONS_x86=" --disable-asm --disable-x86asm"
OPTIONS_x86_64="${OPTIONS_x86}"
else
@@ -23,24 +34,29 @@ index e15541e..0f73bf8 100644
)
if(SOURCE_PATH MATCHES " ")
@@ -30,7 +31,22 @@ if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQU
@@ -30,7 +31,27 @@ if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQU
vcpkg_add_to_path("${NASM_EXE_PATH}")
endif()
-set(OPTIONS "--enable-pic --disable-doc --enable-debug --enable-runtime-cpudetect --disable-autodetect")
+set(OPTIONS "--enable-pic --disable-doc --enable-runtime-cpudetect --disable-autodetect")
+
+set(OPTIONS "--enable-pic --disable-doc --enable-runtime-cpudetect --disable-autodetect")
+
+# Static-only, and no GPL/nonfree/version3 components: keeps the build under
+# LGPL 2.1 so it stays safe to link into SharpEmu (GPL-2.0-or-later).
+string(APPEND OPTIONS " --enable-static --disable-shared --disable-gpl --disable-nonfree --disable-version3")
+
+# Only enable what is used by SharpEmu
+string(APPEND OPTIONS " --disable-everything")
+string(APPEND OPTIONS " --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-decoder=atrac9 --enable-decoder=bink --enable-decoder=bink2 --enable-decoder=binkaudio_dct --enable-decoder=binkaudio_rdft --enable-decoder=mp3 --enable-decoder=pcm_s16le --enable-decoder=pcm_s8")
+string(APPEND OPTIONS " --enable-decoder=mov --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mpeg2video --enable-decoder=mjpeg --enable-decoder=mjpegb")
+string(APPEND OPTIONS " --enable-encoder=pcm_s16le")
+string(APPEND OPTIONS " --enable-encoder=ffv1 --enable-encoder=mpeg4 --enable-encoder=mjpeg")
+string(APPEND OPTIONS " --enable-muxer=avi")
+string(APPEND OPTIONS " --enable-demuxer=bink --enable-demuxer=h264 --enable-demuxer=m4v --enable-demuxer=mp3 --enable-demuxer=mpegvideo --enable-demuxer=mpegps --enable-demuxer=mjpeg --enable-demuxer=mov --enable-demuxer=avi --enable-demuxer=aac --enable-demuxer=pmp --enable-demuxer=oma --enable-demuxer=pcm_s16le --enable-demuxer=pcm_s8 --enable-demuxer=wav")
+string(APPEND OPTIONS " --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=mpegvideo --enable-parser=mjpeg --enable-parser=aac --enable-parser=aac_latm")
+string(APPEND OPTIONS " --enable-decoder=mov --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=mpeg4 --enable-decoder=mpeg2video --enable-decoder=mjpeg --enable-decoder=mjpegb")
+string(APPEND OPTIONS " --enable-encoder=pcm_s16le")
+string(APPEND OPTIONS " --enable-encoder=ffv1 --enable-encoder=mpeg4 --enable-encoder=ljpeg --enable-encoder=mjpeg")
+string(APPEND OPTIONS " --enable-muxer=avi")
+string(APPEND OPTIONS " --enable-demuxer=bink --enable-demuxer=h265 --enable-demuxer=h264 --enable-demuxer=m4v --enable-demuxer=mp3 --enable-demuxer=mpegvideo --enable-demuxer=mpegps --enable-demuxer=mjpeg --enable-demuxer=mov --enable-demuxer=avi --enable-demuxer=aac --enable-demuxer=pmp --enable-demuxer=oma --enable-demuxer=pcm_s16le --enable-demuxer=pcm_s8 --enable-demuxer=wav")
+string(APPEND OPTIONS " --enable-parser=h264 --enable-parser=hevc --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=mpegvideo --enable-parser=mjpeg --enable-parser=aac --enable-parser=aac_latm")
+string(APPEND OPTIONS " --enable-protocol=file")
+string(APPEND OPTIONS " --enable-bsf=mjpeg2jpeg")
+string(APPEND OPTIONS " --enable-indev=dshow")
+if(VCPKG_TARGET_IS_MINGW)
+ string(APPEND OPTIONS " --target-os=mingw32")
+endif()
@@ -52,7 +68,7 @@ index e15541e..0f73bf8 100644
include("${cmake_vars_file}")
if(VCPKG_DETECTED_MSVC)
- string(APPEND OPTIONS " --disable-inline-asm") # clang-cl has inline assembly but this leads to undefined symbols.
+ # string(APPEND OPTIONS " --disable-inline-asm") # clang-cl has inline assembly but this leads to undefined symbols.
+ # string(APPEND OPTIONS " --disable-inline-asm") # clang-cl has inline assembly but this leads to undefined symbols.
set(OPTIONS "--toolchain=msvc ${OPTIONS}")
# This is required because ffmpeg depends upon optimizations to link correctly
string(APPEND VCPKG_COMBINED_C_FLAGS_DEBUG " -O2")
@@ -60,11 +76,11 @@ index e15541e..0f73bf8 100644
# We use response files here as the only known way to handle spaces in paths
set(crsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/cflags.rsp")
string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_C_FLAGS_RELEASE}")
+ if(VCPKG_TARGET_IS_OSX)
+ # macosx-version-min version is set with current macOS version. So replace them to 11.0
+ string(REGEX REPLACE "-mmacosx-version-min=[0-9]+.[0-9]+" "" VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED}")
+ string(APPEND VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED " -mmacosx-version-min=11.0")
+ endif()
+ if(VCPKG_TARGET_IS_OSX)
+ # macosx-version-min version is set with current macOS version. So replace them to 11.0
+ string(REGEX REPLACE "-mmacosx-version-min=[0-9]+.[0-9]+" "" VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED}")
+ string(APPEND VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED " -mmacosx-version-min=11.0")
+ endif()
file(WRITE "${crsp}" "${VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED}")
set(ldrsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/ldflags.rsp")
string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE}")
@@ -74,23 +90,23 @@ index 0000000..c585a15
--- /dev/null
+++ b/triplets/community/arm64-android-dynamic-release.cmake
@@ -0,0 +1,7 @@
+set(VCPKG_TARGET_ARCHITECTURE arm64)
+set(VCPKG_CRT_LINKAGE static)
+set(VCPKG_LIBRARY_LINKAGE dynamic)
+set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android")
+set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a)
+set(VCPKG_BUILD_TYPE release)
+set(VCPKG_TARGET_ARCHITECTURE arm64)
+set(VCPKG_CRT_LINKAGE static)
+set(VCPKG_LIBRARY_LINKAGE dynamic)
+set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android")
+set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a)
+set(VCPKG_BUILD_TYPE release)
diff --git a/triplets/community/arm64-android-static-release.cmake b/triplets/community/arm64-android-static-release.cmake
new file mode 100644
index 0000000..b01b738
--- /dev/null
+++ b/triplets/community/arm64-android-static-release.cmake
@@ -0,0 +1,7 @@
+set(VCPKG_TARGET_ARCHITECTURE arm64)
+set(VCPKG_CRT_LINKAGE static)
+set(VCPKG_LIBRARY_LINKAGE static)
+set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android")
+set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a)
+set(VCPKG_BUILD_TYPE release)
+set(VCPKG_TARGET_ARCHITECTURE arm64)
+set(VCPKG_CRT_LINKAGE static)
+set(VCPKG_LIBRARY_LINKAGE static)
+set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-linux-android")
+set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DANDROID_ABI=arm64-v8a)
+set(VCPKG_BUILD_TYPE release)
+11
View File
@@ -0,0 +1,11 @@
# Overlay of vcpkg's community arm64-osx-release triplet, switched to
# dynamic linkage: SharpEmu P/Invokes directly into these .dylib files at
# runtime instead of linking them into its own bridge.
set(VCPKG_TARGET_ARCHITECTURE arm64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
set(VCPKG_OSX_ARCHITECTURES arm64)
set(VCPKG_BUILD_TYPE release)
@@ -0,0 +1,26 @@
# Dynamic-linkage counterpart of arm64-win-llvm-static-release.cmake.
set(VCPKG_TARGET_ARCHITECTURE arm64)
set(VCPKG_CRT_LINKAGE static)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)
## Toolchain setup
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/x64-win-llvm.toolchain.cmake")
set(VCPKG_LOAD_VCVARS_ENV ON) # Setting VCPKG_CHAINLOAD_TOOLCHAIN_FILE deactivates automatic vcvars setup so reenable it!
if(DEFINED VCPKG_PLATFORM_TOOLSET)
set(VCPKG_PLATFORM_TOOLSET ClangCL)
endif()
set(VCPKG_ENV_PASSTHROUGH_UNTRACKED "LLVMInstallDir;LLVMToolsVersion") # For the ClangCL toolset
# set(VCPKG_QT_TARGET_MKSPEC win32-clang-msvc) # For Qt5
## Policy settings
set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled)
set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled)
set(VCPKG_CMAKE_CONFIGURE_OPTIONS
"-DCMAKE_TRY_COMPILE_CONFIGURATION=Release"
)
include("${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/extra_setup.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/port_specialization.cmake")
+1 -1
View File
@@ -1,6 +1,6 @@
set(VCPKG_TARGET_ARCHITECTURE arm64 x86_64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
set(VCPKG_OSX_ARCHITECTURES arm64 x86_64)
+9
View File
@@ -0,0 +1,9 @@
# Overlay of vcpkg's community x64-linux-release triplet, switched to
# dynamic linkage: SharpEmu P/Invokes directly into these .so files at
# runtime instead of linking them into its own bridge, so a real shared
# object is what's needed here, not a static archive.
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
set(VCPKG_BUILD_TYPE release)
+10
View File
@@ -0,0 +1,10 @@
# Overlay of vcpkg's community x64-osx-release triplet, switched to dynamic
# linkage: SharpEmu P/Invokes directly into these .dylib files at runtime
# instead of linking them into its own bridge.
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_CMAKE_SYSTEM_NAME Darwin)
set(VCPKG_OSX_ARCHITECTURES x86_64)
set(VCPKG_BUILD_TYPE release)
@@ -0,0 +1,29 @@
# Dynamic-linkage counterpart of x64-win-llvm-static-release.cmake. SharpEmu
# P/Invokes directly into these FFmpeg DLLs at runtime instead of statically
# linking them into its own bridge, so it needs real .dll files here, not
# .lib static archives.
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE static)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)
## Toolchain setup
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/x64-win-llvm.toolchain.cmake")
set(VCPKG_LOAD_VCVARS_ENV ON) # Setting VCPKG_CHAINLOAD_TOOLCHAIN_FILE deactivates automatic vcvars setup so reenable it!
if(DEFINED VCPKG_PLATFORM_TOOLSET)
set(VCPKG_PLATFORM_TOOLSET ClangCL)
endif()
set(VCPKG_ENV_PASSTHROUGH_UNTRACKED "LLVMInstallDir;LLVMToolsVersion") # For the ClangCL toolset
set(VCPKG_QT_TARGET_MKSPEC win32-clang-msvc) # For Qt5
## Policy settings
set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled)
set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled)
set(VCPKG_CMAKE_CONFIGURE_OPTIONS
"-DCMAKE_TRY_COMPILE_CONFIGURATION=Release"
)
include("${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/extra_setup.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/x64-win-llvm/port_specialization.cmake")