diff --git a/.github/workflows/wheel-build.yaml b/.github/workflows/wheel-build.yaml index 057e46f..14aae33 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,42 +77,110 @@ 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: 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 + shell: bash + env: + TYPE: ${{ matrix.type }} + run: | + case "${TYPE}" in + 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 + - 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 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: 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 }}" - python"${{ matrix.python }}" -m build; deactivate + python"${{ matrix.python }}" -m build + deactivate - name: run tests + if: matrix.type != 'x86_64' 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 +237,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 diff --git a/cmake/modules/findFFmpeg.cmake b/cmake/modules/findFFmpeg.cmake index 3214a45..72a82fd 100644 --- a/cmake/modules/findFFmpeg.cmake +++ b/cmake/modules/findFFmpeg.cmake @@ -1,13 +1,35 @@ -include(ExternalProject) +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 @@ -21,32 +43,137 @@ 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) + set(OPENSSL_EXTRA_CFLAGS "") + set(OPENSSL_EXTRA_LDFLAGS "") + set(OPENSSL_EXTRA_LIBS "") + 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) + 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() + + set(OPENSSL_FOUND_SUCCESS FALSE) + + 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 + ) + + 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() + + 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 + ) + + 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() + + 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") - 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,49 +181,67 @@ 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 - --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 $(MAKE) - INSTALL_COMMAND $(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) -j4 + 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() @@ -120,20 +265,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() \ 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)