diff --git a/CMakeLists.txt b/CMakeLists.txt index b0904a08..f5f108c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,34 +5,75 @@ endif() add_library(${FFMPEG_CORE_NAME} INTERFACE) target_include_directories(${FFMPEG_CORE_NAME} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") + +# Detect OS if (WIN32 AND NOT MINGW) + set(FFMPEG_PREBUILTS_NAME "ffmpeg-windows") +elseif (APPLE) + set(FFMPEG_PREBUILTS_NAME "ffmpeg-macos") +elseif (UNIX) + set(FFMPEG_PREBUILTS_NAME "ffmpeg-linux") +else () + message(FATAL_ERROR "Unsupported OS.") +endif () + +# Detect Architecture +if(NOT DEFINED ARCHITECTURE) + message(FATAL_ERROR "ARCHITECTURE variable is not set up") +elseif (ARCHITECTURE STREQUAL "x86_64") + set(FFMPEG_PREBUILTS_NAME "${FFMPEG_PREBUILTS_NAME}-x64.zip") +elseif(ARCHITECTURE STREQUAL "arm64") + set(FFMPEG_PREBUILTS_NAME "${FFMPEG_PREBUILTS_NAME}-arm64.zip") +elseif(APPLE AND "x86_64" IN_LIST ARCHITECTURE AND "arm64" IN_LIST ARCHITECTURE) # macOS universal + set(FFMPEG_PREBUILTS_NAME "${FFMPEG_PREBUILTS_NAME}-universal.zip") +else () + message(FATAL_ERROR "Unsupported architecture.") +endif() + +# Compute current short git commit SHA +execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE FFMPEG_GIT_SHA + OUTPUT_STRIP_TRAILING_WHITESPACE) + +# Download prebuilt ffmpeg +if(NOT EXISTS "${CMAKE_BINARY_DIR}/external/ffmpeg.zip") + message(STATUS "Downloading FFMPEG prebuilts...") + file(DOWNLOAD https://github.com/Vita3K/ffmpeg-core/releases/download/${FFMPEG_GIT_SHA}/${FFMPEG_PREBUILTS_NAME} + "${CMAKE_BINARY_DIR}/external/ffmpeg.zip" SHOW_PROGRESS + STATUS FILE_STATUS) + list(GET FILE_STATUS 0 STATUS_CODE) + if (NOT STATUS_CODE EQUAL 0) + file(REMOVE "${CMAKE_BINARY_DIR}/external/ffmpeg.zip") # CMake create 0 byte file even if URL is invalid. So need to delete it. + message(FATAL_ERROR "No FFMPEG prebuilt found with corresponding commit SHA (${FFMPEG_GIT_SHA})") + endif() +endif() + +if(NOT EXISTS "${CMAKE_BINARY_DIR}/external/ffmpeg/lib") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/external/ffmpeg/lib") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${CMAKE_BINARY_DIR}/external/ffmpeg.zip" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/external/ffmpeg/lib") +endif() + +set(LIB_PREFIX "lib") +set(LIB_EXT "a") +if (WIN32 AND NOT MINGW) + set(LIB_PREFIX "") + set(LIB_EXT "lib") target_link_libraries(${FFMPEG_CORE_NAME} INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/avformat.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/avcodec.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/swscale.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/avutil.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/avfilter.lib" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/windows/x86_64/swresample.lib" "psapi;strmiids;uuid;oleaut32;shlwapi;ws2_32;ole32;user32;bcrypt") elseif (APPLE) target_link_libraries(${FFMPEG_CORE_NAME} INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libavformat.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libavcodec.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libswscale.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libavutil.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libavfilter.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/macos/libswresample.a" "-framework CoreServices" "-framework CoreFoundation" "-framework AudioUnit" "-framework AudioToolbox" "-framework CoreAudio" "-framework CoreMedia" "-framework VideoToolbox" "-framework CoreVideo" "-framework Security") -elseif (UNIX) - target_link_libraries(${FFMPEG_CORE_NAME} INTERFACE - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libavformat.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libavcodec.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libswscale.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libavutil.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libavfilter.a" - "${CMAKE_CURRENT_SOURCE_DIR}/lib/linux/x86_64/libswresample.a") -else () - message(FATAL_ERROR "No prebuilt was found for ffmpeg") endif () + +target_link_libraries(${FFMPEG_CORE_NAME} INTERFACE + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}avformat.${LIB_EXT}" + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}avcodec.${LIB_EXT}" + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}swscale.${LIB_EXT}" + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}avutil.${LIB_EXT}" + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}avfilter.${LIB_EXT}" + "${CMAKE_BINARY_DIR}/external/ffmpeg/lib/${LIB_PREFIX}swresample.${LIB_EXT}") \ No newline at end of file diff --git a/lib/linux/x86_64/libavcodec.a b/lib/linux/x86_64/libavcodec.a deleted file mode 100644 index cd6efc0b..00000000 Binary files a/lib/linux/x86_64/libavcodec.a and /dev/null differ diff --git a/lib/linux/x86_64/libavdevice.a b/lib/linux/x86_64/libavdevice.a deleted file mode 100644 index 56b13ac7..00000000 Binary files a/lib/linux/x86_64/libavdevice.a and /dev/null differ diff --git a/lib/linux/x86_64/libavfilter.a b/lib/linux/x86_64/libavfilter.a deleted file mode 100644 index ecacefb4..00000000 Binary files a/lib/linux/x86_64/libavfilter.a and /dev/null differ diff --git a/lib/linux/x86_64/libavformat.a b/lib/linux/x86_64/libavformat.a deleted file mode 100644 index 9e47026e..00000000 Binary files a/lib/linux/x86_64/libavformat.a and /dev/null differ diff --git a/lib/linux/x86_64/libavutil.a b/lib/linux/x86_64/libavutil.a deleted file mode 100644 index 64f2f309..00000000 Binary files a/lib/linux/x86_64/libavutil.a and /dev/null differ diff --git a/lib/linux/x86_64/libswresample.a b/lib/linux/x86_64/libswresample.a deleted file mode 100644 index 1d527bf0..00000000 Binary files a/lib/linux/x86_64/libswresample.a and /dev/null differ diff --git a/lib/linux/x86_64/libswscale.a b/lib/linux/x86_64/libswscale.a deleted file mode 100644 index ce7288a4..00000000 Binary files a/lib/linux/x86_64/libswscale.a and /dev/null differ diff --git a/lib/macos/libavcodec.a b/lib/macos/libavcodec.a deleted file mode 100644 index dc1f41e1..00000000 Binary files a/lib/macos/libavcodec.a and /dev/null differ diff --git a/lib/macos/libavdevice.a b/lib/macos/libavdevice.a deleted file mode 100644 index c1e26e2a..00000000 Binary files a/lib/macos/libavdevice.a and /dev/null differ diff --git a/lib/macos/libavfilter.a b/lib/macos/libavfilter.a deleted file mode 100644 index 61e98c94..00000000 Binary files a/lib/macos/libavfilter.a and /dev/null differ diff --git a/lib/macos/libavformat.a b/lib/macos/libavformat.a deleted file mode 100644 index 6a7014f9..00000000 Binary files a/lib/macos/libavformat.a and /dev/null differ diff --git a/lib/macos/libavutil.a b/lib/macos/libavutil.a deleted file mode 100644 index aae14741..00000000 Binary files a/lib/macos/libavutil.a and /dev/null differ diff --git a/lib/macos/libswresample.a b/lib/macos/libswresample.a deleted file mode 100644 index 6e9454f3..00000000 Binary files a/lib/macos/libswresample.a and /dev/null differ diff --git a/lib/macos/libswscale.a b/lib/macos/libswscale.a deleted file mode 100644 index 2eb25d41..00000000 Binary files a/lib/macos/libswscale.a and /dev/null differ diff --git a/lib/windows/x86_64/avcodec.lib b/lib/windows/x86_64/avcodec.lib deleted file mode 100644 index 1157a50b..00000000 Binary files a/lib/windows/x86_64/avcodec.lib and /dev/null differ diff --git a/lib/windows/x86_64/avdevice.lib b/lib/windows/x86_64/avdevice.lib deleted file mode 100644 index cdbc7c8e..00000000 Binary files a/lib/windows/x86_64/avdevice.lib and /dev/null differ diff --git a/lib/windows/x86_64/avfilter.lib b/lib/windows/x86_64/avfilter.lib deleted file mode 100644 index 6e15334e..00000000 Binary files a/lib/windows/x86_64/avfilter.lib and /dev/null differ diff --git a/lib/windows/x86_64/avformat.lib b/lib/windows/x86_64/avformat.lib deleted file mode 100644 index 43ae74a2..00000000 Binary files a/lib/windows/x86_64/avformat.lib and /dev/null differ diff --git a/lib/windows/x86_64/avutil.lib b/lib/windows/x86_64/avutil.lib deleted file mode 100644 index e93a5747..00000000 Binary files a/lib/windows/x86_64/avutil.lib and /dev/null differ diff --git a/lib/windows/x86_64/swresample.lib b/lib/windows/x86_64/swresample.lib deleted file mode 100644 index 9d5ccf33..00000000 Binary files a/lib/windows/x86_64/swresample.lib and /dev/null differ diff --git a/lib/windows/x86_64/swscale.lib b/lib/windows/x86_64/swscale.lib deleted file mode 100644 index d6697aff..00000000 Binary files a/lib/windows/x86_64/swscale.lib and /dev/null differ