Build universal binary on macOS
This commit is contained in:
+40
-13
@@ -33,9 +33,8 @@ if(CMAKE_POSITION_INDEPENDENT_CODE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MACOSX)
|
if(MACOSX)
|
||||||
find_program(FFMPEG_YASM_EXECUTABLE yasm
|
list(APPEND FFMPEG_CONFIGURE "--disable-asm")
|
||||||
PATHS /usr/bin /usr/local/bin /opt/local/bin)
|
list(APPEND FFMPEG_CONFIGURE "--enable-cross-compile")
|
||||||
list(APPEND FFMPEG_CONFIGURE "--x86asmexe=${FFMPEG_YASM_EXECUTABLE}")
|
|
||||||
list(APPEND FFMPEG_CONFIGURE "--enable-videotoolbox")
|
list(APPEND FFMPEG_CONFIGURE "--enable-videotoolbox")
|
||||||
else()
|
else()
|
||||||
list(APPEND FFMPEG_CONFIGURE "--enable-vaapi")
|
list(APPEND FFMPEG_CONFIGURE "--enable-vaapi")
|
||||||
@@ -51,14 +50,42 @@ if(WITH_FFMPEG_JOBS GREATER 0)
|
|||||||
endif()
|
endif()
|
||||||
list(APPEND SM_FFMPEG_MAKE "&&" "make" "DESTDIR=./dest" "install")
|
list(APPEND SM_FFMPEG_MAKE "&&" "make" "DESTDIR=./dest" "install")
|
||||||
|
|
||||||
externalproject_add("ffmpeg"
|
if(MACOSX)
|
||||||
SOURCE_DIR "${SM_FFMPEG_SRC_DIR}"
|
externalproject_add("ffmpeg_arm64"
|
||||||
CONFIGURE_COMMAND ${FFMPEG_CONFIGURE}
|
SOURCE_DIR "${SM_FFMPEG_SRC_DIR}"
|
||||||
BUILD_COMMAND "${SM_FFMPEG_MAKE}"
|
CONFIGURE_COMMAND ${FFMPEG_CONFIGURE} "--arch=arm64" "--extra-cflags=-arch arm64" "--extra-ldflags=-arch arm64"
|
||||||
UPDATE_COMMAND ""
|
BUILD_COMMAND "${SM_FFMPEG_MAKE}"
|
||||||
INSTALL_COMMAND ""
|
UPDATE_COMMAND ""
|
||||||
TEST_COMMAND "")
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND "")
|
||||||
|
|
||||||
externalproject_get_property("ffmpeg" BINARY_DIR)
|
externalproject_get_property("ffmpeg_arm64" BINARY_DIR)
|
||||||
set(SM_FFMPEG_LIB ${BINARY_DIR}/dest/lib)
|
set(SM_FFMPEG_LIB_ARM64 ${BINARY_DIR}/dest/lib)
|
||||||
set(SM_FFMPEG_INCLUDE ${BINARY_DIR}/dest/include)
|
|
||||||
|
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()
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/CMake/CMakeMacros.cmake)
|
|||||||
|
|
||||||
# Make Xcode's 'Archive' build work
|
# Make Xcode's 'Archive' build work
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/extern")
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/extern")
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES arm64;x86_64)
|
||||||
|
|
||||||
# Set up helper variables for future configuring.
|
# Set up helper variables for future configuring.
|
||||||
set(SM_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/CMake")
|
set(SM_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/CMake")
|
||||||
|
|||||||
+9
-5
@@ -512,10 +512,14 @@ elseif(APPLE)
|
|||||||
|
|
||||||
if(HAS_FFMPEG)
|
if(HAS_FFMPEG)
|
||||||
list(APPEND SMDATA_LINK_LIB
|
list(APPEND SMDATA_LINK_LIB
|
||||||
"${SM_FFMPEG_LIB}/libavformat.a"
|
"${SM_FFMPEG_LIB_ARM64}/libavformat.a"
|
||||||
"${SM_FFMPEG_LIB}/libavcodec.a"
|
"${SM_FFMPEG_LIB_ARM64}/libavcodec.a"
|
||||||
"${SM_FFMPEG_LIB}/libswscale.a"
|
"${SM_FFMPEG_LIB_ARM64}/libswscale.a"
|
||||||
"${SM_FFMPEG_LIB}/libavutil.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_COREMEDIA}"
|
||||||
"${MAC_FRAME_COREVIDEO}"
|
"${MAC_FRAME_COREVIDEO}"
|
||||||
"${MAC_FRAME_VIDEOTOOLBOX}")
|
"${MAC_FRAME_VIDEOTOOLBOX}")
|
||||||
@@ -665,7 +669,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
list(APPEND SM_INCLUDE_DIRS "archutils/Unix")
|
list(APPEND SM_INCLUDE_DIRS "archutils/Unix")
|
||||||
if(HAS_FFMPEG)
|
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}")
|
list(APPEND SM_INCLUDE_DIRS "${SM_FFMPEG_INCLUDE}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user