diff --git a/CMake/SetupFfmpeg.cmake b/CMake/SetupFfmpeg.cmake index cc1b6daf02..cece8c760d 100644 --- a/CMake/SetupFfmpeg.cmake +++ b/CMake/SetupFfmpeg.cmake @@ -33,9 +33,8 @@ if(CMAKE_POSITION_INDEPENDENT_CODE) endif() if(MACOSX) - find_program(FFMPEG_YASM_EXECUTABLE yasm - PATHS /usr/bin /usr/local/bin /opt/local/bin) - list(APPEND FFMPEG_CONFIGURE "--x86asmexe=${FFMPEG_YASM_EXECUTABLE}") + list(APPEND FFMPEG_CONFIGURE "--disable-asm") + list(APPEND FFMPEG_CONFIGURE "--enable-cross-compile") list(APPEND FFMPEG_CONFIGURE "--enable-videotoolbox") else() list(APPEND FFMPEG_CONFIGURE "--enable-vaapi") @@ -51,14 +50,42 @@ if(WITH_FFMPEG_JOBS GREATER 0) endif() list(APPEND SM_FFMPEG_MAKE "&&" "make" "DESTDIR=./dest" "install") -externalproject_add("ffmpeg" - SOURCE_DIR "${SM_FFMPEG_SRC_DIR}" - CONFIGURE_COMMAND ${FFMPEG_CONFIGURE} - BUILD_COMMAND "${SM_FFMPEG_MAKE}" - UPDATE_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "") +if(MACOSX) + externalproject_add("ffmpeg_arm64" + SOURCE_DIR "${SM_FFMPEG_SRC_DIR}" + CONFIGURE_COMMAND ${FFMPEG_CONFIGURE} "--arch=arm64" "--extra-cflags=-arch arm64" "--extra-ldflags=-arch arm64" + BUILD_COMMAND "${SM_FFMPEG_MAKE}" + UPDATE_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "") -externalproject_get_property("ffmpeg" BINARY_DIR) -set(SM_FFMPEG_LIB ${BINARY_DIR}/dest/lib) -set(SM_FFMPEG_INCLUDE ${BINARY_DIR}/dest/include) + externalproject_get_property("ffmpeg_arm64" BINARY_DIR) + set(SM_FFMPEG_LIB_ARM64 ${BINARY_DIR}/dest/lib) + + externalproject_add("ffmpeg_x86_64" + SOURCE_DIR "${SM_FFMPEG_SRC_DIR}" + CONFIGURE_COMMAND ${FFMPEG_CONFIGURE} "--arch=x86_64" "--extra-cflags=-arch x86_64" "--extra-ldflags=-arch x86_64" + BUILD_COMMAND "${SM_FFMPEG_MAKE}" + UPDATE_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "") + + externalproject_get_property("ffmpeg_x86_64" BINARY_DIR) + set(SM_FFMPEG_LIB_X86_64 ${BINARY_DIR}/dest/lib) + + # The header files are the same for both architectures, so it doesn't matter + # which one of the two binary dirs we use. + set(SM_FFMPEG_INCLUDE ${BINARY_DIR}/dest/include) +else() + externalproject_add("ffmpeg" + SOURCE_DIR "${SM_FFMPEG_SRC_DIR}" + CONFIGURE_COMMAND ${FFMPEG_CONFIGURE} + BUILD_COMMAND "${SM_FFMPEG_MAKE}" + UPDATE_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "") + + externalproject_get_property("ffmpeg" BINARY_DIR) + set(SM_FFMPEG_LIB ${BINARY_DIR}/dest/lib) + set(SM_FFMPEG_INCLUDE ${BINARY_DIR}/dest/include) +endif() diff --git a/StepmaniaCore.cmake b/StepmaniaCore.cmake index 45fff9ff3a..68f9494d17 100644 --- a/StepmaniaCore.cmake +++ b/StepmaniaCore.cmake @@ -4,6 +4,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/CMake/CMakeMacros.cmake) # Make Xcode's 'Archive' build work set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/extern") +set(CMAKE_OSX_ARCHITECTURES arm64;x86_64) # Set up helper variables for future configuring. set(SM_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/CMake") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e79a30a61..cae52db740 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -512,10 +512,14 @@ elseif(APPLE) if(HAS_FFMPEG) list(APPEND SMDATA_LINK_LIB - "${SM_FFMPEG_LIB}/libavformat.a" - "${SM_FFMPEG_LIB}/libavcodec.a" - "${SM_FFMPEG_LIB}/libswscale.a" - "${SM_FFMPEG_LIB}/libavutil.a" + "${SM_FFMPEG_LIB_ARM64}/libavformat.a" + "${SM_FFMPEG_LIB_ARM64}/libavcodec.a" + "${SM_FFMPEG_LIB_ARM64}/libswscale.a" + "${SM_FFMPEG_LIB_ARM64}/libavutil.a" + "${SM_FFMPEG_LIB_X86_64}/libavformat.a" + "${SM_FFMPEG_LIB_X86_64}/libavcodec.a" + "${SM_FFMPEG_LIB_X86_64}/libswscale.a" + "${SM_FFMPEG_LIB_X86_64}/libavutil.a" "${MAC_FRAME_COREMEDIA}" "${MAC_FRAME_COREVIDEO}" "${MAC_FRAME_VIDEOTOOLBOX}") @@ -665,7 +669,7 @@ else() endif() list(APPEND SM_INCLUDE_DIRS "archutils/Unix") if(HAS_FFMPEG) - add_dependencies("${SM_EXE_NAME}" "ffmpeg") + add_dependencies("${SM_EXE_NAME}" "ffmpeg_arm64" "ffmpeg_x86_64") list(APPEND SM_INCLUDE_DIRS "${SM_FFMPEG_INCLUDE}") endif() endif()