From 4787f2c96d846e9a03f1d81d710497f528655e07 Mon Sep 17 00:00:00 2001 From: khustup2 Date: Sat, 9 Aug 2025 23:09:00 +0000 Subject: [PATCH 1/9] Fixed wheel build. --- .github/workflows/wheel-build.yaml | 75 ++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 8 deletions(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 057e46f..b9b9b65 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -23,10 +23,20 @@ on: description: "Build Linux ARM Wheels" type: boolean default: true + runner: + description: Choose MacOS Action Runner Type + type: choice + options: + - "self-hosted" + - "macos-12" + - "macos-13" + - "macos-14" + - "macos-15" + default: "self-hosted" env: - VCPKG_ROOT: "${{ github.workspace }}/vcpkg" - VCPKG_FEATURE_FLAGS: "dependencygraph" + VCPKG_ROOT: ${{ github.workspace }}/vcpkg + VCPKG_FEATURE_FLAGS: dependencygraph VCPKG_DISABLE_METRICS: true BUILD_PRESET: "release" @@ -67,7 +77,7 @@ jobs: build_wheels-macos: name: MacOS Wheels Build needs: [get_macos_matrix] - runs-on: self-hosted-${{ matrix.type }} + runs-on: ${{ inputs.runner }}-${{ matrix.type }} strategy: fail-fast: false matrix: @@ -75,34 +85,78 @@ jobs: env: VCPKG_BINARY_SOURCES: "clear;files,/Users/sre/GitHub/vcpkg-cache-deepframe-${{ matrix.type }},readwrite" steps: + - name: set platform name + id: platform-name + shell: bash + env: + TYPE: ${{ matrix.type }} + run: | + case "${TYPE}" in + xlarge) + echo "platform=macosx_11_0_arm64" >> $GITHUB_OUTPUT + echo "arch=arm64" >> $GITHUB_OUTPUT + ;; + large) + echo "platform=macosx_10_9_x86_64" >> $GITHUB_OUTPUT + echo "arch=x86_64" >> $GITHUB_OUTPUT + ;; + esac + - name: clone repository uses: actions/checkout@v4.2.2 + - name: setup python ${{ matrix.python }} + uses: actions/setup-python@v5.3.0 + if: inputs.runner != 'self-hosted' + with: + python-version: ${{ matrix.python }} + - name: setup python ${{ matrix.python }} environment id: setup shell: bash run: |- python${{ matrix.python }} -m venv "venv_${{ matrix.venv }}" source "venv_${{ matrix.venv }}/bin/activate" - python"${{ matrix.python }}" -m pip install -qqq -U pip setuptools build; deactivate + python"${{ matrix.python }}" -m pip install -qqq -U pip setuptools build cmake==3.29.2 + deactivate + echo -e "\n[bdist_wheel]\nplat-name = ${{ steps.platform-name.outputs.platform }}" >> setup.cfg + + - name: install bison + run: | + if ! (bison --version); then + brew install bison + BISON_PREFIX=$(brew --prefix bison) + echo "Bison prefix is $BISON_PREFIX" + echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $GITHUB_ENV + echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $HOME/.bash_profile + echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $HOME/.zshrc + fi - name: install vcpkg shell: bash - run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 1de2026f28ead93ff1773e6e680387643e914ea1 && ./bootstrap-vcpkg.sh + run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 6f29f12e82a8293156836ad81cc9bf5af41fe836 && ./bootstrap-vcpkg.sh - name: build py${{ matrix.python }} + env: + CMAKE_OSX_ARCHITECTURES: ${{ steps.platform-name.outputs.arch }} shell: bash run: |- + CMAKE_PATH=$(whereis cmake | awk '{print $2}') + CMAKE_DIR=$(dirname "$CMAKE_PATH") + echo "$CMAKE_DIR" >> $GITHUB_PATH + export PATH="/opt/brew/opt/bison/bin:$PATH" source "venv_${{ matrix.venv }}/bin/activate" python"${{ matrix.python }}" -m pip install -r requirements-dev.txt && python"${{ matrix.python }}" scripts/build.py "${{ env.BUILD_PRESET }}" - python"${{ matrix.python }}" -m build; deactivate + python"${{ matrix.python }}" -m build + deactivate - name: run tests shell: bash run: |- source "venv_${{ matrix.venv }}/bin/activate" - timeout -k 10s 30m python"${{ matrix.python }}" -m pytest; deactivate + timeout -k 10s 30m python"${{ matrix.python }}" -m pytest + deactivate - uses: actions/upload-artifact@v4.6.1 if: ${{ always() }} @@ -159,13 +213,18 @@ jobs: shell: bash run: git clone -b "${{ github.ref_name }}" "https://activeloop-bot:${{ secrets.ORG_GH_BOT_PAT }}@github.com/${{ github.repository }}" . + - name: setup environment + shell: bash + run: | + echo -e "\n[bdist_wheel]\nplat-name = manylinux2014_${{ matrix.type }}" >> setup.cfg + - name: download vcpkg cache shell: bash run: source scripts/build_scripts/get_creds.sh && python3.11 scripts/build_scripts/manage_cache.py download deepframe - name: install vcpkg shell: bash - run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 1de2026f28ead93ff1773e6e680387643e914ea1 && ./bootstrap-vcpkg.sh + run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 6f29f12e82a8293156836ad81cc9bf5af41fe836 && ./bootstrap-vcpkg.sh - name: build py${{ matrix.python }} shell: bash From 966dede44005f9890bedbeecfb7fd683d2852d44 Mon Sep 17 00:00:00 2001 From: Sasun Hambardzumyan <151129343+khustup2@users.noreply.github.com> Date: Sun, 10 Aug 2025 03:31:27 +0400 Subject: [PATCH 2/9] Remove unneeded path Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/wheel-build.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index b9b9b65..1c21db5 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -144,7 +144,6 @@ jobs: CMAKE_PATH=$(whereis cmake | awk '{print $2}') CMAKE_DIR=$(dirname "$CMAKE_PATH") echo "$CMAKE_DIR" >> $GITHUB_PATH - export PATH="/opt/brew/opt/bison/bin:$PATH" source "venv_${{ matrix.venv }}/bin/activate" python"${{ matrix.python }}" -m pip install -r requirements-dev.txt && python"${{ matrix.python }}" scripts/build.py "${{ env.BUILD_PRESET }}" From 530dda1b13fc841de7ebb3b11177883de2f182d0 Mon Sep 17 00:00:00 2001 From: khustup2 Date: Sat, 9 Aug 2025 23:31:28 +0000 Subject: [PATCH 3/9] Remove unneeded install. --- .github/workflows/wheel-build.yaml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 1c21db5..701f4e5 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -121,17 +121,6 @@ jobs: deactivate echo -e "\n[bdist_wheel]\nplat-name = ${{ steps.platform-name.outputs.platform }}" >> setup.cfg - - name: install bison - run: | - if ! (bison --version); then - brew install bison - BISON_PREFIX=$(brew --prefix bison) - echo "Bison prefix is $BISON_PREFIX" - echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $GITHUB_ENV - echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $HOME/.bash_profile - echo "export PATH=\"$BISON_PREFIX/bin:\$PATH\"" >> $HOME/.zshrc - fi - - name: install vcpkg shell: bash run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 6f29f12e82a8293156836ad81cc9bf5af41fe836 && ./bootstrap-vcpkg.sh From def3cedc0e8ed0dbd6e9469f50c34e853367d7e8 Mon Sep 17 00:00:00 2001 From: khustup2 Date: Sun, 10 Aug 2025 07:52:31 +0000 Subject: [PATCH 4/9] Fix mac x86-64 build. --- .github/workflows/wheel-build.yaml | 41 ++++++++++++++++++- cmake/modules/findFFmpeg.cmake | 64 ++++++++++++++++++++++++------ cpp/CMakeLists.txt | 19 +++++++++ 3 files changed, 110 insertions(+), 14 deletions(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 701f4e5..3bc0bf4 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -82,8 +82,7 @@ jobs: fail-fast: false matrix: include: ${{ fromJSON(needs.get_macos_matrix.outputs.matrix) }} - env: - VCPKG_BINARY_SOURCES: "clear;files,/Users/sre/GitHub/vcpkg-cache-deepframe-${{ matrix.type }},readwrite" + steps: - name: set platform name id: platform-name @@ -95,13 +94,23 @@ jobs: xlarge) echo "platform=macosx_11_0_arm64" >> $GITHUB_OUTPUT echo "arch=arm64" >> $GITHUB_OUTPUT + echo "triplet=arm64-osx" >> $GITHUB_OUTPUT ;; large) echo "platform=macosx_10_9_x86_64" >> $GITHUB_OUTPUT echo "arch=x86_64" >> $GITHUB_OUTPUT + echo "triplet=x64-osx" >> $GITHUB_OUTPUT ;; esac + - name: set vcpkg cache path + id: vcpkg-cache + shell: bash + env: + ARCH: ${{ steps.platform-name.outputs.arch }} + run: | + echo "cache_path=/Users/sre/GitHub/vcpkg-cache-deepframe-${{ steps.platform-name.outputs.triplet }}" >> $GITHUB_OUTPUT + - name: clone repository uses: actions/checkout@v4.2.2 @@ -125,14 +134,42 @@ jobs: shell: bash run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 6f29f12e82a8293156836ad81cc9bf5af41fe836 && ./bootstrap-vcpkg.sh + - name: install vcpkg dependencies + shell: bash + env: + VCPKG_ROOT: ${{ github.workspace }}/vcpkg + VCPKG_TARGET_TRIPLET: ${{ steps.platform-name.outputs.triplet }} + VCPKG_HOST_TRIPLET: ${{ steps.platform-name.outputs.triplet }} + run: | + cd vcpkg + ./vcpkg install --triplet=${{ steps.platform-name.outputs.triplet }} openssl liblzma libiconv zlib + cd .. + + - name: clean build artifacts + shell: bash + run: | + # Clean build directory to ensure fresh build + rm -rf build + # Clean architecture-specific FFmpeg installations + rm -rf .ext-* + + + - name: build py${{ matrix.python }} env: CMAKE_OSX_ARCHITECTURES: ${{ steps.platform-name.outputs.arch }} + VCPKG_TARGET_TRIPLET: ${{ steps.platform-name.outputs.triplet }} + VCPKG_HOST_TRIPLET: ${{ steps.platform-name.outputs.triplet }} + VCPKG_BINARY_SOURCES: "clear" + VCPKG_DISABLE_METRICS: true + VCPKG_OVERLAY_TRIPLETS: "" + VCPKG_OVERLAY_PORTS: "" shell: bash run: |- CMAKE_PATH=$(whereis cmake | awk '{print $2}') CMAKE_DIR=$(dirname "$CMAKE_PATH") echo "$CMAKE_DIR" >> $GITHUB_PATH + source "venv_${{ matrix.venv }}/bin/activate" python"${{ matrix.python }}" -m pip install -r requirements-dev.txt && python"${{ matrix.python }}" scripts/build.py "${{ env.BUILD_PRESET }}" diff --git a/cmake/modules/findFFmpeg.cmake b/cmake/modules/findFFmpeg.cmake index 3214a45..d5df6d2 100644 --- a/cmake/modules/findFFmpeg.cmake +++ b/cmake/modules/findFFmpeg.cmake @@ -1,13 +1,35 @@ include(ExternalProject) set(DEFAULT_PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../) -set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext) + +# Make installation directory architecture-specific +# Use target architecture from CMAKE_OSX_ARCHITECTURES for cross-compilation +if(APPLE) + if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-arm64") + set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-arm64) + set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-arm64/ffmpeg) + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-x86_64") + set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-x86_64) + set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-x86_64/ffmpeg) + endif() +elseif(UNIX) + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL aarch64) + set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-aarch64") + set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-aarch64) + set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-aarch64/ffmpeg) + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL x86_64) + set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-x86_64") + set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-x86_64) + set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-x86_64/ffmpeg) + endif() +endif() + set(ffmpeg_URL "https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.1.tar.gz") -set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext/ffmpeg) set(ffmpeg_SHA256_HASH 7ddad2d992bd250a6c56053c26029f7e728bebf0f37f80cf3f8a0e6ec706431a) -set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext") -set(ffmpeg_PKG_CONFIG_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/pkgconfig:${DEFAULT_PARENT_DIR}/.ext/lib/pkgconfig") +set(ffmpeg_PKG_CONFIG_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/pkgconfig:${ffmpeg_INSTALL_DIR}/lib/pkgconfig") macro(check_lib_existence LIB_NAME) find_path(${LIB_NAME}_EXISTS @@ -37,16 +59,16 @@ macro(build_ffmpeg_once) set(EXTRA_ARGUMENTS) if(APPLE) list(APPEND EXTRA_ARGUMENTS "--target-os=darwin") - if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL arm64) + if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64") list(APPEND EXTRA_ARGUMENTS "--arch=arm64") - elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64) + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") list(APPEND EXTRA_ARGUMENTS "--arch=x86_64") endif() elseif(UNIX) list(APPEND EXTRA_ARGUMENTS "--target-os=linux") - if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL aarch64) + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL aarch64) list(APPEND EXTRA_ARGUMENTS "--arch=arm64") - elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL x86_64) + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL x86_64) list(APPEND EXTRA_ARGUMENTS "--arch=x86_64") endif() endif() @@ -54,13 +76,21 @@ macro(build_ffmpeg_once) set(FFMPEG_EP_DEPENDS) message(STATUS "Building FFmpeg with extra arguments: ${EXTRA_ARGUMENTS}") + message(STATUS "FFmpeg target architecture: ${CMAKE_OSX_ARCHITECTURES}") + message(STATUS "VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") + message(STATUS "FFmpeg install directory: ${ffmpeg_INSTALL_DIR}") ExternalProject_Add(ffmpeg_ep SOURCE_DIR ${ffmpeg_SOURCE_DIR} URL ${ffmpeg_URL} URL_HASH SHA256=${ffmpeg_SHA256_HASH} CONFIGURE_COMMAND - ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} ${ffmpeg_SOURCE_DIR}/configure + ${CMAKE_COMMAND} -E env + PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + ${ffmpeg_SOURCE_DIR}/configure --quiet --prefix=${ffmpeg_INSTALL_DIR} --disable-programs @@ -90,8 +120,18 @@ macro(build_ffmpeg_once) BUILD_IN_SOURCE TRUE PATCH_COMMAND patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch - BUILD_COMMAND $(MAKE) - INSTALL_COMMAND $(MAKE) install + BUILD_COMMAND + ${CMAKE_COMMAND} -E env + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + $(MAKE) + INSTALL_COMMAND + ${CMAKE_COMMAND} -E env + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + $(MAKE) install DEPENDS ${FFMPEG_EP_DEPENDS} ${EP_LOG_OPTIONS} ) @@ -136,4 +176,4 @@ macro(ensure_ffmpeg) PROPERTIES INTERFACE_LINK_LIBRARIES "-framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices") endif() -endmacro() \ No newline at end of file +endmacro() diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 84491c2..d291223 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -4,11 +4,30 @@ if (NOT DEFINED ENV{VCPKG_ROOT}) message(FATAL_ERROR "You must set VCPKG_ROOT environment variable to point to your vcpkg installation") endif () +# Set vcpkg triplet before including the toolchain +if (DEFINED ENV{VCPKG_TARGET_TRIPLET}) + set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_TARGET_TRIPLET}" CACHE STRING "Vcpkg target triplet") + message(STATUS "Setting VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") +endif() + +if (DEFINED ENV{VCPKG_HOST_TRIPLET}) + set(VCPKG_HOST_TRIPLET "$ENV{VCPKG_HOST_TRIPLET}" CACHE STRING "Vcpkg host triplet") + message(STATUS "Setting VCPKG_HOST_TRIPLET: ${VCPKG_HOST_TRIPLET}") +endif() + set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file") message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}") project(deepframe_project LANGUAGES CXX) +# Verify cross-compilation setup +if (APPLE AND DEFINED CMAKE_OSX_ARCHITECTURES) + message(STATUS "Target architecture: ${CMAKE_OSX_ARCHITECTURES}") + if (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") + message(STATUS "Cross-compiling x86_64 on ARM64 host") + endif() +endif() + # Set C++ standard set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) From d1cff5dd76a41af948acfc531c5ff5a28dfbc863 Mon Sep 17 00:00:00 2001 From: activesoull Date: Sun, 10 Aug 2025 22:22:11 +0400 Subject: [PATCH 5/9] possible fix --- cmake/modules/findFFmpeg.cmake | 152 +++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 66 deletions(-) diff --git a/cmake/modules/findFFmpeg.cmake b/cmake/modules/findFFmpeg.cmake index d5df6d2..44801a1 100644 --- a/cmake/modules/findFFmpeg.cmake +++ b/cmake/modules/findFFmpeg.cmake @@ -1,11 +1,11 @@ -include(ExternalProject) +include(ExternalProject) set(DEFAULT_PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../) # Make installation directory architecture-specific # Use target architecture from CMAKE_OSX_ARCHITECTURES for cross-compilation if(APPLE) - if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64") set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-arm64") set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-arm64) set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-arm64/ffmpeg) @@ -43,29 +43,49 @@ set(FFMPEG_LIBRARIES_LIST libavformat libavcodec libavfilter libavutil libswresa macro(build_ffmpeg_once) set(ffmpeg_NEED_BUILD 0) - if (NOT EXISTS ${ffmpeg_INSTALL_DIR}/lib) + + if(NOT EXISTS ${ffmpeg_INSTALL_DIR}/lib) set(ffmpeg_NEED_BUILD 1) endif() + foreach(LIB_NAME ${FFMPEG_LIBRARIES_LIST}) check_lib_existence(${LIB_NAME}) - if (${LIB_NAME}_EXISTS STREQUAL ${LIB_NAME}_EXISTS-NOTFOUND) + + if(${LIB_NAME}_EXISTS STREQUAL ${LIB_NAME}_EXISTS-NOTFOUND) set(ffmpeg_NEED_BUILD 1) endif() endforeach() - if (NOT TARGET ffmpeg_ep AND ${ffmpeg_NEED_BUILD}) + if(NOT TARGET ffmpeg_ep AND ${ffmpeg_NEED_BUILD}) message(STATUS "Building FFmpeg from source") set(EXTRA_ARGUMENTS) + if(APPLE) list(APPEND EXTRA_ARGUMENTS "--target-os=darwin") - if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64") + + if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64") list(APPEND EXTRA_ARGUMENTS "--arch=arm64") elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") list(APPEND EXTRA_ARGUMENTS "--arch=x86_64") endif() + + find_package(OpenSSL REQUIRED) + + if(OpenSSL_FOUND) + get_target_property(OPENSSL_INCLUDE_DIR OpenSSL::SSL INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(OPENSSL_SSL_LOCATION OpenSSL::SSL IMPORTED_LOCATION) + + get_filename_component(OPENSSL_LIB_DIR ${OPENSSL_SSL_LOCATION} DIRECTORY) + + list(APPEND EXTRA_ARGUMENTS "--extra-cflags=-I${OPENSSL_INCLUDE_DIR}") + list(APPEND EXTRA_ARGUMENTS "--extra-ldflags=-L${OPENSSL_LIB_DIR}") + + message(STATUS "Found OpenSSL: ${OPENSSL_INCLUDE_DIR} and ${OPENSSL_LIB_DIR}") + endif() elseif(UNIX) list(APPEND EXTRA_ARGUMENTS "--target-os=linux") + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL aarch64) list(APPEND EXTRA_ARGUMENTS "--arch=arm64") elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL x86_64) @@ -85,58 +105,58 @@ macro(build_ffmpeg_once) URL ${ffmpeg_URL} URL_HASH SHA256=${ffmpeg_SHA256_HASH} CONFIGURE_COMMAND - ${CMAKE_COMMAND} -E env - PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} - VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} - VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} - CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - ${ffmpeg_SOURCE_DIR}/configure - --quiet - --prefix=${ffmpeg_INSTALL_DIR} - --disable-programs - --disable-logging - --disable-shared - --enable-static - --disable-doc - --disable-htmlpages - --disable-manpages - --disable-podpages - --disable-txtpages - --enable-ffmpeg - --disable-ffplay - --disable-ffprobe - --disable-x86asm - --disable-avdevice - --enable-avcodec - --enable-avformat - --enable-swscale - --enable-pic - --disable-asm - --disable-debug - --disable-programs - --disable-libdrm - --enable-openssl - ${EXTRA_ARGUMENTS} + ${CMAKE_COMMAND} -E env + PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + /configure + --quiet + --prefix=${ffmpeg_INSTALL_DIR} + --disable-programs + --disable-logging + --disable-shared + --enable-static + --disable-doc + --disable-htmlpages + --disable-manpages + --disable-podpages + --disable-txtpages + --enable-ffmpeg + --disable-ffplay + --disable-ffprobe + --disable-x86asm + --disable-avdevice + --enable-avcodec + --enable-avformat + --enable-swscale + --enable-pic + --disable-asm + --disable-debug + --disable-programs + --disable-libdrm + --enable-openssl + ${EXTRA_ARGUMENTS} BUILD_IN_SOURCE TRUE - PATCH_COMMAND - patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch - BUILD_COMMAND - ${CMAKE_COMMAND} -E env - VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} - VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} - CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - $(MAKE) - INSTALL_COMMAND - ${CMAKE_COMMAND} -E env - VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} - VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} - CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - $(MAKE) install + + # PATCH_COMMAND + # patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch + BUILD_COMMAND + ${CMAKE_COMMAND} -E env + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + $(MAKE) + INSTALL_COMMAND + ${CMAKE_COMMAND} -E env + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + $(MAKE) install DEPENDS ${FFMPEG_EP_DEPENDS} ${EP_LOG_OPTIONS} ) endif() - endmacro() build_ffmpeg_once() @@ -160,20 +180,20 @@ macro(ensure_ffmpeg) find_package(ZLIB REQUIRED) list(APPEND FFMPEG_LIBRARIES_LIST ZLIB::ZLIB) - #TODO come up with proper solution here + # TODO come up with proper solution here add_library(FFmpeg::FFmpeg INTERFACE IMPORTED GLOBAL) - #target_link_libraries(FFmpeg::FFmpeg INTERFACE - # ${ffmpeg_INSTALL_DIR}/lib/libavcodec${CMAKE_STATIC_LIBRARY_SUFFIX} - # ${ffmpeg_INSTALL_DIR}/lib/libavformat${CMAKE_STATIC_LIBRARY_SUFFIX} - # ${ffmpeg_INSTALL_DIR}/lib/libavfilter${CMAKE_STATIC_LIBRARY_SUFFIX} - # ${ffmpeg_INSTALL_DIR}/lib/libavutil${CMAKE_STATIC_LIBRARY_SUFFIX} - # ${ffmpeg_INSTALL_DIR}/lib/libswresample${CMAKE_STATIC_LIBRARY_SUFFIX} - # ${ffmpeg_INSTALL_DIR}/lib/libswscale${CMAKE_STATIC_LIBRARY_SUFFIX} - #) - - if (APPLE) + + # target_link_libraries(FFmpeg::FFmpeg INTERFACE + # ${ffmpeg_INSTALL_DIR}/lib/libavcodec${CMAKE_STATIC_LIBRARY_SUFFIX} + # ${ffmpeg_INSTALL_DIR}/lib/libavformat${CMAKE_STATIC_LIBRARY_SUFFIX} + # ${ffmpeg_INSTALL_DIR}/lib/libavfilter${CMAKE_STATIC_LIBRARY_SUFFIX} + # ${ffmpeg_INSTALL_DIR}/lib/libavutil${CMAKE_STATIC_LIBRARY_SUFFIX} + # ${ffmpeg_INSTALL_DIR}/lib/libswresample${CMAKE_STATIC_LIBRARY_SUFFIX} + # ${ffmpeg_INSTALL_DIR}/lib/libswscale${CMAKE_STATIC_LIBRARY_SUFFIX} + # ) + if(APPLE) set_target_properties(FFmpeg::FFmpeg - PROPERTIES INTERFACE_LINK_LIBRARIES - "-framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices") + PROPERTIES INTERFACE_LINK_LIBRARIES + "-framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices") endif() endmacro() From b167ddf588aa4045b543a1f2d6efec43daf364c4 Mon Sep 17 00:00:00 2001 From: activesoull Date: Sun, 10 Aug 2025 22:50:17 +0400 Subject: [PATCH 6/9] ssh --- .github/workflows/wheel-build.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 3bc0bf4..886401b 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -153,7 +153,8 @@ jobs: # Clean architecture-specific FFmpeg installations rm -rf .ext-* - + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 - name: build py${{ matrix.python }} env: From eb50cf582c1b052bbfe327d269c17343bcd72ed2 Mon Sep 17 00:00:00 2001 From: activesoull Date: Mon, 11 Aug 2025 09:03:50 +0400 Subject: [PATCH 7/9] possible fix --- cmake/modules/findFFmpeg.cmake | 123 +++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 12 deletions(-) diff --git a/cmake/modules/findFFmpeg.cmake b/cmake/modules/findFFmpeg.cmake index 44801a1..6ec97b6 100644 --- a/cmake/modules/findFFmpeg.cmake +++ b/cmake/modules/findFFmpeg.cmake @@ -59,30 +59,119 @@ macro(build_ffmpeg_once) if(NOT TARGET ffmpeg_ep AND ${ffmpeg_NEED_BUILD}) message(STATUS "Building FFmpeg from source") + message(STATUS "Building FFmpeg from source") + set(EXTRA_ARGUMENTS) + set(OPENSSL_EXTRA_CFLAGS "") + set(OPENSSL_EXTRA_LDFLAGS "") + set(OPENSSL_EXTRA_LIBS "") if(APPLE) list(APPEND EXTRA_ARGUMENTS "--target-os=darwin") if(CMAKE_OSX_ARCHITECTURES MATCHES "arm64") list(APPEND EXTRA_ARGUMENTS "--arch=arm64") + set(ARCH_FOR_BREW "arm64") elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") list(APPEND EXTRA_ARGUMENTS "--arch=x86_64") + set(ARCH_FOR_BREW "x86_64") endif() - find_package(OpenSSL REQUIRED) + set(OPENSSL_FOUND_SUCCESS FALSE) - if(OpenSSL_FOUND) - get_target_property(OPENSSL_INCLUDE_DIR OpenSSL::SSL INTERFACE_INCLUDE_DIRECTORIES) - get_target_property(OPENSSL_SSL_LOCATION OpenSSL::SSL IMPORTED_LOCATION) + if(DEFINED ARCH_FOR_BREW) + execute_process( + COMMAND arch -${ARCH_FOR_BREW} brew --prefix openssl@3 + OUTPUT_VARIABLE BREW_OPENSSL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE BREW_RESULT + ) - get_filename_component(OPENSSL_LIB_DIR ${OPENSSL_SSL_LOCATION} DIRECTORY) + if(BREW_RESULT EQUAL 0 AND EXISTS "${BREW_OPENSSL_PREFIX}") + message(STATUS "Found OpenSSL via brew (arch-specific): ${BREW_OPENSSL_PREFIX}") + set(OPENSSL_EXTRA_CFLAGS "-I${BREW_OPENSSL_PREFIX}/include") + set(OPENSSL_EXTRA_LDFLAGS "-L${BREW_OPENSSL_PREFIX}/lib") + set(OPENSSL_EXTRA_LIBS "-lssl -lcrypto") + set(ffmpeg_PKG_CONFIG_PATH "${ffmpeg_PKG_CONFIG_PATH}:${BREW_OPENSSL_PREFIX}/lib/pkgconfig") + set(OPENSSL_FOUND_SUCCESS TRUE) + endif() + endif() - list(APPEND EXTRA_ARGUMENTS "--extra-cflags=-I${OPENSSL_INCLUDE_DIR}") - list(APPEND EXTRA_ARGUMENTS "--extra-ldflags=-L${OPENSSL_LIB_DIR}") + if(NOT OPENSSL_FOUND_SUCCESS) + execute_process( + COMMAND brew --prefix openssl@3 + OUTPUT_VARIABLE BREW_OPENSSL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE BREW_RESULT + ) - message(STATUS "Found OpenSSL: ${OPENSSL_INCLUDE_DIR} and ${OPENSSL_LIB_DIR}") + if(BREW_RESULT EQUAL 0 AND EXISTS "${BREW_OPENSSL_PREFIX}") + message(STATUS "Found OpenSSL via brew (generic): ${BREW_OPENSSL_PREFIX}") + set(OPENSSL_EXTRA_CFLAGS "-I${BREW_OPENSSL_PREFIX}/include") + set(OPENSSL_EXTRA_LDFLAGS "-L${BREW_OPENSSL_PREFIX}/lib") + set(OPENSSL_EXTRA_LIBS "-lssl -lcrypto") + set(ffmpeg_PKG_CONFIG_PATH "${ffmpeg_PKG_CONFIG_PATH}:${BREW_OPENSSL_PREFIX}/lib/pkgconfig") + set(OPENSSL_FOUND_SUCCESS TRUE) + endif() endif() + + if(NOT OPENSSL_FOUND_SUCCESS) + execute_process( + COMMAND brew --prefix openssl + OUTPUT_VARIABLE BREW_OPENSSL_PREFIX + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE BREW_RESULT + ) + + if(BREW_RESULT EQUAL 0 AND EXISTS "${BREW_OPENSSL_PREFIX}") + message(STATUS "Found OpenSSL via brew (fallback): ${BREW_OPENSSL_PREFIX}") + set(OPENSSL_EXTRA_CFLAGS "-I${BREW_OPENSSL_PREFIX}/include") + set(OPENSSL_EXTRA_LDFLAGS "-L${BREW_OPENSSL_PREFIX}/lib") + set(OPENSSL_EXTRA_LIBS "-lssl -lcrypto") + set(ffmpeg_PKG_CONFIG_PATH "${ffmpeg_PKG_CONFIG_PATH}:${BREW_OPENSSL_PREFIX}/lib/pkgconfig") + set(OPENSSL_FOUND_SUCCESS TRUE) + endif() + endif() + + # Method 4: Try CMake's FindOpenSSL + if(NOT OPENSSL_FOUND_SUCCESS) + find_package(OpenSSL QUIET) + + if(OpenSSL_FOUND) + message(STATUS "Found OpenSSL via CMake: ${OPENSSL_INCLUDE_DIR}") + set(OPENSSL_EXTRA_CFLAGS "-I${OPENSSL_INCLUDE_DIR}") + get_target_property(OPENSSL_SSL_LOCATION OpenSSL::SSL IMPORTED_LOCATION) + + if(OPENSSL_SSL_LOCATION) + get_filename_component(OPENSSL_LIB_DIR ${OPENSSL_SSL_LOCATION} DIRECTORY) + set(OPENSSL_EXTRA_LDFLAGS "-L${OPENSSL_LIB_DIR}") + endif() + + set(OPENSSL_EXTRA_LIBS "-lssl -lcrypto") + set(OPENSSL_FOUND_SUCCESS TRUE) + endif() + endif() + + if(NOT OPENSSL_FOUND_SUCCESS) + message(WARNING "Could not find OpenSSL for architecture ${CMAKE_OSX_ARCHITECTURES}. FFmpeg build may fail.") + else() + # Add OpenSSL flags to extra arguments + if(OPENSSL_EXTRA_CFLAGS) + list(APPEND EXTRA_ARGUMENTS "--extra-cflags=${OPENSSL_EXTRA_CFLAGS}") + endif() + + if(OPENSSL_EXTRA_LDFLAGS) + list(APPEND EXTRA_ARGUMENTS "--extra-ldflags=${OPENSSL_EXTRA_LDFLAGS}") + endif() + + if(OPENSSL_EXTRA_LIBS) + list(APPEND EXTRA_ARGUMENTS "--extra-libs=${OPENSSL_EXTRA_LIBS}") + endif() + endif() + elseif(UNIX) list(APPEND EXTRA_ARGUMENTS "--target-os=linux") @@ -100,12 +189,23 @@ macro(build_ffmpeg_once) message(STATUS "VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") message(STATUS "FFmpeg install directory: ${ffmpeg_INSTALL_DIR}") + message(STATUS "extra arguments: ${EXTRA_ARGUMENTS}") + + message("${CMAKE_COMMAND} -E env + PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} + VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} + VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} + CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} + /configure + --quiet") + ExternalProject_Add(ffmpeg_ep SOURCE_DIR ${ffmpeg_SOURCE_DIR} URL ${ffmpeg_URL} URL_HASH SHA256=${ffmpeg_SHA256_HASH} CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env + PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} @@ -138,15 +238,14 @@ macro(build_ffmpeg_once) --enable-openssl ${EXTRA_ARGUMENTS} BUILD_IN_SOURCE TRUE - - # PATCH_COMMAND - # patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch + PATCH_COMMAND + patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch BUILD_COMMAND ${CMAKE_COMMAND} -E env VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - $(MAKE) + $(MAKE) -j4 INSTALL_COMMAND ${CMAKE_COMMAND} -E env VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} From 2b57212cfc6bfc3a0729f42a72c0cc965021ee8e Mon Sep 17 00:00:00 2001 From: activesoull Date: Mon, 11 Aug 2025 09:05:18 +0400 Subject: [PATCH 8/9] remove ssh --- .github/workflows/wheel-build.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 886401b..76c52cd 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -153,9 +153,6 @@ jobs: # Clean architecture-specific FFmpeg installations rm -rf .ext-* - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - - name: build py${{ matrix.python }} env: CMAKE_OSX_ARCHITECTURES: ${{ steps.platform-name.outputs.arch }} From ede0402c43208736594524126eb36b8e5c0859d1 Mon Sep 17 00:00:00 2001 From: activesoull Date: Mon, 11 Aug 2025 09:52:41 +0400 Subject: [PATCH 9/9] cleanup --- .github/workflows/wheel-build.yaml | 1 + cmake/modules/findFFmpeg.cmake | 14 -------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 76c52cd..14aae33 100644 --- a/.github/workflows/wheel-build.yaml +++ b/.github/workflows/wheel-build.yaml @@ -175,6 +175,7 @@ jobs: deactivate - name: run tests + if: matrix.type != 'x86_64' shell: bash run: |- source "venv_${{ matrix.venv }}/bin/activate" diff --git a/cmake/modules/findFFmpeg.cmake b/cmake/modules/findFFmpeg.cmake index 6ec97b6..72a82fd 100644 --- a/cmake/modules/findFFmpeg.cmake +++ b/cmake/modules/findFFmpeg.cmake @@ -58,9 +58,6 @@ macro(build_ffmpeg_once) if(NOT TARGET ffmpeg_ep AND ${ffmpeg_NEED_BUILD}) message(STATUS "Building FFmpeg from source") - - message(STATUS "Building FFmpeg from source") - set(EXTRA_ARGUMENTS) set(OPENSSL_EXTRA_CFLAGS "") set(OPENSSL_EXTRA_LDFLAGS "") @@ -136,7 +133,6 @@ macro(build_ffmpeg_once) endif() endif() - # Method 4: Try CMake's FindOpenSSL if(NOT OPENSSL_FOUND_SUCCESS) find_package(OpenSSL QUIET) @@ -189,16 +185,6 @@ macro(build_ffmpeg_once) message(STATUS "VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}") message(STATUS "FFmpeg install directory: ${ffmpeg_INSTALL_DIR}") - message(STATUS "extra arguments: ${EXTRA_ARGUMENTS}") - - message("${CMAKE_COMMAND} -E env - PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} - VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET} - VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET} - CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - /configure - --quiet") - ExternalProject_Add(ffmpeg_ep SOURCE_DIR ${ffmpeg_SOURCE_DIR} URL ${ffmpeg_URL}