Skip to content

Commit 8f67c3e

Browse files
committed
Fix mac x86-64 build.
1 parent 090c9fe commit 8f67c3e

File tree

3 files changed

+110
-14
lines changed

3 files changed

+110
-14
lines changed

.github/workflows/wheel-build.yaml

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ jobs:
8282
fail-fast: false
8383
matrix:
8484
include: ${{ fromJSON(needs.get_macos_matrix.outputs.matrix) }}
85-
env:
86-
VCPKG_BINARY_SOURCES: "clear;files,/Users/sre/GitHub/vcpkg-cache-deepframe-${{ matrix.type }},readwrite"
85+
8786
steps:
8887
- name: set platform name
8988
id: platform-name
@@ -95,13 +94,23 @@ jobs:
9594
xlarge)
9695
echo "platform=macosx_11_0_arm64" >> $GITHUB_OUTPUT
9796
echo "arch=arm64" >> $GITHUB_OUTPUT
97+
echo "triplet=arm64-osx" >> $GITHUB_OUTPUT
9898
;;
9999
large)
100100
echo "platform=macosx_10_9_x86_64" >> $GITHUB_OUTPUT
101101
echo "arch=x86_64" >> $GITHUB_OUTPUT
102+
echo "triplet=x64-osx" >> $GITHUB_OUTPUT
102103
;;
103104
esac
104105
106+
- name: set vcpkg cache path
107+
id: vcpkg-cache
108+
shell: bash
109+
env:
110+
ARCH: ${{ steps.platform-name.outputs.arch }}
111+
run: |
112+
echo "cache_path=/Users/sre/GitHub/vcpkg-cache-deepframe-${{ steps.platform-name.outputs.triplet }}" >> $GITHUB_OUTPUT
113+
105114
- name: clone repository
106115
uses: actions/checkout@v4.2.2
107116

@@ -125,14 +134,42 @@ jobs:
125134
shell: bash
126135
run: git clone https://github.com/microsoft/vcpkg.git && cd vcpkg && git checkout 6f29f12e82a8293156836ad81cc9bf5af41fe836 && ./bootstrap-vcpkg.sh
127136

137+
- name: install vcpkg dependencies
138+
shell: bash
139+
env:
140+
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
141+
VCPKG_TARGET_TRIPLET: ${{ steps.platform-name.outputs.triplet }}
142+
VCPKG_HOST_TRIPLET: ${{ steps.platform-name.outputs.triplet }}
143+
run: |
144+
cd vcpkg
145+
./vcpkg install --triplet=${{ steps.platform-name.outputs.triplet }} openssl liblzma libiconv zlib
146+
cd ..
147+
148+
- name: clean build artifacts
149+
shell: bash
150+
run: |
151+
# Clean build directory to ensure fresh build
152+
rm -rf build
153+
# Clean architecture-specific FFmpeg installations
154+
rm -rf .ext-*
155+
156+
157+
128158
- name: build py${{ matrix.python }}
129159
env:
130160
CMAKE_OSX_ARCHITECTURES: ${{ steps.platform-name.outputs.arch }}
161+
VCPKG_TARGET_TRIPLET: ${{ steps.platform-name.outputs.triplet }}
162+
VCPKG_HOST_TRIPLET: ${{ steps.platform-name.outputs.triplet }}
163+
VCPKG_BINARY_SOURCES: "clear"
164+
VCPKG_DISABLE_METRICS: true
165+
VCPKG_OVERLAY_TRIPLETS: ""
166+
VCPKG_OVERLAY_PORTS: ""
131167
shell: bash
132168
run: |-
133169
CMAKE_PATH=$(whereis cmake | awk '{print $2}')
134170
CMAKE_DIR=$(dirname "$CMAKE_PATH")
135171
echo "$CMAKE_DIR" >> $GITHUB_PATH
172+
136173
source "venv_${{ matrix.venv }}/bin/activate"
137174
python"${{ matrix.python }}" -m pip install -r requirements-dev.txt &&
138175
python"${{ matrix.python }}" scripts/build.py "${{ env.BUILD_PRESET }}"

cmake/modules/findFFmpeg.cmake

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,35 @@
11
include(ExternalProject)
22

33
set(DEFAULT_PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../)
4-
set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext)
4+
5+
# Make installation directory architecture-specific
6+
# Use target architecture from CMAKE_OSX_ARCHITECTURES for cross-compilation
7+
if(APPLE)
8+
if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
9+
set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-arm64")
10+
set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-arm64)
11+
set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-arm64/ffmpeg)
12+
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
13+
set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-x86_64")
14+
set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-x86_64)
15+
set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-x86_64/ffmpeg)
16+
endif()
17+
elseif(UNIX)
18+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL aarch64)
19+
set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-aarch64")
20+
set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-aarch64)
21+
set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-aarch64/ffmpeg)
22+
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL x86_64)
23+
set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext-x86_64")
24+
set(ffmpeg_BUILD_INSTALL_PREFIX ${DEFAULT_PARENT_DIR}/.ext-x86_64)
25+
set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext-x86_64/ffmpeg)
26+
endif()
27+
endif()
28+
529
set(ffmpeg_URL "https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.1.tar.gz")
6-
set(ffmpeg_SOURCE_DIR ${DEFAULT_PARENT_DIR}/.ext/ffmpeg)
730
set(ffmpeg_SHA256_HASH 7ddad2d992bd250a6c56053c26029f7e728bebf0f37f80cf3f8a0e6ec706431a)
8-
set(ffmpeg_INSTALL_DIR "${DEFAULT_PARENT_DIR}/.ext")
931

10-
set(ffmpeg_PKG_CONFIG_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/pkgconfig:${DEFAULT_PARENT_DIR}/.ext/lib/pkgconfig")
32+
set(ffmpeg_PKG_CONFIG_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/pkgconfig:${ffmpeg_INSTALL_DIR}/lib/pkgconfig")
1133

1234
macro(check_lib_existence LIB_NAME)
1335
find_path(${LIB_NAME}_EXISTS
@@ -37,30 +59,38 @@ macro(build_ffmpeg_once)
3759
set(EXTRA_ARGUMENTS)
3860
if(APPLE)
3961
list(APPEND EXTRA_ARGUMENTS "--target-os=darwin")
40-
if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL arm64)
62+
if (CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
4163
list(APPEND EXTRA_ARGUMENTS "--arch=arm64")
42-
elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64)
64+
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
4365
list(APPEND EXTRA_ARGUMENTS "--arch=x86_64")
4466
endif()
4567
elseif(UNIX)
4668
list(APPEND EXTRA_ARGUMENTS "--target-os=linux")
47-
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL aarch64)
69+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL aarch64)
4870
list(APPEND EXTRA_ARGUMENTS "--arch=arm64")
49-
elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL x86_64)
71+
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL x86_64)
5072
list(APPEND EXTRA_ARGUMENTS "--arch=x86_64")
5173
endif()
5274
endif()
5375

5476
set(FFMPEG_EP_DEPENDS)
5577

5678
message(STATUS "Building FFmpeg with extra arguments: ${EXTRA_ARGUMENTS}")
79+
message(STATUS "FFmpeg target architecture: ${CMAKE_OSX_ARCHITECTURES}")
80+
message(STATUS "VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
81+
message(STATUS "FFmpeg install directory: ${ffmpeg_INSTALL_DIR}")
5782

5883
ExternalProject_Add(ffmpeg_ep
5984
SOURCE_DIR ${ffmpeg_SOURCE_DIR}
6085
URL ${ffmpeg_URL}
6186
URL_HASH SHA256=${ffmpeg_SHA256_HASH}
6287
CONFIGURE_COMMAND
63-
${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH} ${ffmpeg_SOURCE_DIR}/configure
88+
${CMAKE_COMMAND} -E env
89+
PKG_CONFIG_PATH=${ffmpeg_PKG_CONFIG_PATH}
90+
VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}
91+
VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET}
92+
CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
93+
${ffmpeg_SOURCE_DIR}/configure
6494
--quiet
6595
--prefix=${ffmpeg_INSTALL_DIR}
6696
--disable-programs
@@ -90,8 +120,18 @@ macro(build_ffmpeg_once)
90120
BUILD_IN_SOURCE TRUE
91121
PATCH_COMMAND
92122
patch -p1 < ${DEFAULT_PARENT_DIR}/cmake/modules/url_max_length_fix.patch
93-
BUILD_COMMAND $(MAKE)
94-
INSTALL_COMMAND $(MAKE) install
123+
BUILD_COMMAND
124+
${CMAKE_COMMAND} -E env
125+
VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}
126+
VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET}
127+
CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
128+
$(MAKE)
129+
INSTALL_COMMAND
130+
${CMAKE_COMMAND} -E env
131+
VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}
132+
VCPKG_HOST_TRIPLET=${VCPKG_HOST_TRIPLET}
133+
CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
134+
$(MAKE) install
95135
DEPENDS ${FFMPEG_EP_DEPENDS}
96136
${EP_LOG_OPTIONS}
97137
)
@@ -136,4 +176,4 @@ macro(ensure_ffmpeg)
136176
PROPERTIES INTERFACE_LINK_LIBRARIES
137177
"-framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices")
138178
endif()
139-
endmacro()
179+
endmacro()

cpp/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,30 @@ if (NOT DEFINED ENV{VCPKG_ROOT})
44
message(FATAL_ERROR "You must set VCPKG_ROOT environment variable to point to your vcpkg installation")
55
endif ()
66

7+
# Set vcpkg triplet before including the toolchain
8+
if (DEFINED ENV{VCPKG_TARGET_TRIPLET})
9+
set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_TARGET_TRIPLET}" CACHE STRING "Vcpkg target triplet")
10+
message(STATUS "Setting VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
11+
endif()
12+
13+
if (DEFINED ENV{VCPKG_HOST_TRIPLET})
14+
set(VCPKG_HOST_TRIPLET "$ENV{VCPKG_HOST_TRIPLET}" CACHE STRING "Vcpkg host triplet")
15+
message(STATUS "Setting VCPKG_HOST_TRIPLET: ${VCPKG_HOST_TRIPLET}")
16+
endif()
17+
718
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
819
message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
920

1021
project(deepframe_project LANGUAGES CXX)
1122

23+
# Verify cross-compilation setup
24+
if (APPLE AND DEFINED CMAKE_OSX_ARCHITECTURES)
25+
message(STATUS "Target architecture: ${CMAKE_OSX_ARCHITECTURES}")
26+
if (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
27+
message(STATUS "Cross-compiling x86_64 on ARM64 host")
28+
endif()
29+
endif()
30+
1231
# Set C++ standard
1332
set(CMAKE_CXX_STANDARD 20)
1433
set(CMAKE_CXX_STANDARD_REQUIRED ON)

0 commit comments

Comments
 (0)