From 851b1008a881010b90002f4af9d0a4ac36710fea Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 30 Dec 2022 00:29:53 -0800 Subject: cmake: Integrate bundled FFmpeg for Android. --- externals/ffmpeg/CMakeLists.txt | 64 +++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 8 deletions(-) (limited to 'externals') diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index 03fad0778..093616629 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2021 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later -if (NOT WIN32) +if (NOT WIN32 AND NOT ANDROID) # Build FFmpeg from externals message(STATUS "Using FFmpeg from externals") @@ -44,10 +44,12 @@ if (NOT WIN32) endforeach() find_package(PkgConfig REQUIRED) - pkg_check_modules(LIBVA libva) - pkg_check_modules(CUDA cuda) - pkg_check_modules(FFNVCODEC ffnvcodec) - pkg_check_modules(VDPAU vdpau) + if (NOT ANDROID) + pkg_check_modules(LIBVA libva) + pkg_check_modules(CUDA cuda) + pkg_check_modules(FFNVCODEC ffnvcodec) + pkg_check_modules(VDPAU vdpau) + endif() set(FFmpeg_HWACCEL_LIBRARIES) set(FFmpeg_HWACCEL_FLAGS) @@ -121,6 +123,26 @@ if (NOT WIN32) list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) endif() + find_program(BASH_PROGRAM bash REQUIRED) + + set(FFmpeg_CROSS_COMPILE_FLAGS "") + if (ANDROID) + string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME) + set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}") + set(SYSROOT "${TOOLCHAIN}/sysroot") + set(FFmpeg_CPU "armv8-a") + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS + --arch=arm64 + #--cpu=${FFmpeg_CPU} + --enable-cross-compile + --cross-prefix=${TOOLCHAIN}/bin/aarch64-linux-android- + --sysroot=${SYSROOT} + --target-os=android + --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld" + --extra-ldflags="-nostdlib" + ) + endif() + # `configure` parameters builds only exactly what yuzu needs from FFmpeg # `--disable-vdpau` is needed to avoid linking issues set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}) @@ -129,7 +151,7 @@ if (NOT WIN32) OUTPUT ${FFmpeg_MAKEFILE} COMMAND - /bin/bash ${FFmpeg_PREFIX}/configure + ${BASH_PROGRAM} ${FFmpeg_PREFIX}/configure --disable-avdevice --disable-avformat --disable-doc @@ -146,12 +168,14 @@ if (NOT WIN32) --cc="${FFmpeg_CC}" --cxx="${FFmpeg_CXX}" ${FFmpeg_HWACCEL_FLAGS} + ${FFmpeg_CROSS_COMPILE_FLAGS} WORKING_DIRECTORY ${FFmpeg_BUILD_DIR} ) unset(FFmpeg_CC) unset(FFmpeg_CXX) unset(FFmpeg_HWACCEL_FLAGS) + unset(FFmpeg_CROSS_COMPILE_FLAGS) # Workaround for Ubuntu 18.04's older version of make not being able to call make as a child # with context of the jobserver. Also helps ninja users. @@ -197,7 +221,32 @@ if (NOT WIN32) else() message(FATAL_ERROR "FFmpeg not found") endif() -else(WIN32) +elseif(ANDROID) + # Use yuzu FFmpeg binaries + set(FFmpeg_EXT_NAME "ffmpeg-android-v4.4.LTS") + set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}") + download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "") + set(FFmpeg_FOUND YES) + set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE) + set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/lib" CACHE PATH "Path to FFmpeg library directory" FORCE) + set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE) + set(FFmpeg_LIBRARIES + ${FFmpeg_LIBRARY_DIR}/libavcodec.so + ${FFmpeg_LIBRARY_DIR}/libavdevice.so + ${FFmpeg_LIBRARY_DIR}/libavfilter.so + ${FFmpeg_LIBRARY_DIR}/libavformat.so + ${FFmpeg_LIBRARY_DIR}/libavutil.so + ${FFmpeg_LIBRARY_DIR}/libswresample.so + ${FFmpeg_LIBRARY_DIR}/libswscale.so + ${FFmpeg_LIBRARY_DIR}/libvpx.a + ${FFmpeg_LIBRARY_DIR}/libx264.a + CACHE PATH "Paths to FFmpeg libraries" FORCE) + # exported variables + set(FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE) + set(FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE) + set(FFmpeg_LIBRARIES "${FFmpeg_LIBRARIES}" PARENT_SCOPE) + set(FFmpeg_INCLUDE_DIR "${FFmpeg_INCLUDE_DIR}" PARENT_SCOPE) +elseif(WIN32) # Use yuzu FFmpeg binaries set(FFmpeg_EXT_NAME "ffmpeg-5.1.3") set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}") @@ -206,7 +255,6 @@ else(WIN32) set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE) set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE) set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE) - set(FFmpeg_DLL_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg dll's" FORCE) set(FFmpeg_LIBRARIES ${FFmpeg_LIBRARY_DIR}/swscale.lib ${FFmpeg_LIBRARY_DIR}/avcodec.lib -- cgit v1.2.3 From f7a3f1ddf49a2471fd92ee92faea61880285b2d5 Mon Sep 17 00:00:00 2001 From: Liam Date: Sun, 1 Jan 2023 18:34:38 -0500 Subject: externals: add adrenotools for bcenabler --- externals/CMakeLists.txt | 4 ++++ externals/libadrenotools | 1 + 2 files changed, 5 insertions(+) create mode 160000 externals/libadrenotools (limited to 'externals') diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index d78d10147..2bd7b457a 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -147,3 +147,7 @@ endif() add_library(stb stb/stb_dxt.cpp) target_include_directories(stb PUBLIC ./stb) + +if (ANDROID) + add_subdirectory(libadrenotools) +endif() diff --git a/externals/libadrenotools b/externals/libadrenotools new file mode 160000 index 000000000..a6c0947df --- /dev/null +++ b/externals/libadrenotools @@ -0,0 +1 @@ +Subproject commit a6c0947df6b152b350342f5191b3082768e15e38 -- cgit v1.2.3 From 616cf70a801ccf7c2312118d163185a8d341e517 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 16 Mar 2023 11:56:51 -0400 Subject: build: only enable adrenotools on arm64 --- externals/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'externals') diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 2bd7b457a..500eb21e3 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -149,5 +149,7 @@ add_library(stb stb/stb_dxt.cpp) target_include_directories(stb PUBLIC ./stb) if (ANDROID) - add_subdirectory(libadrenotools) + if (ARCHITECTURE_arm64) + add_subdirectory(libadrenotools) + endif() endif() -- cgit v1.2.3 From ee10cdad35e46245aac799d31314d4e960e6b791 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 16 Mar 2023 14:41:27 -0400 Subject: cmake: download architecture-specific ffmpeg for android --- externals/ffmpeg/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'externals') diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index 093616629..0a926e399 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -223,7 +223,13 @@ if (NOT WIN32 AND NOT ANDROID) endif() elseif(ANDROID) # Use yuzu FFmpeg binaries - set(FFmpeg_EXT_NAME "ffmpeg-android-v4.4.LTS") + if (ARCHITECTURE_arm64) + set(FFmpeg_EXT_NAME "ffmpeg-android-v5.1.LTS-aarch64") + elseif (ARCHITECTURE_x86_64) + set(FFmpeg_EXT_NAME "ffmpeg-android-v5.1.LTS-x86_64") + else() + message(FATAL_ERROR "Unsupported architecture for Android FFmpeg") + endif() set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}") download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "") set(FFmpeg_FOUND YES) -- cgit v1.2.3 From 17b5ed9baf44e81c81c29c63e5ae4a91c558c5df Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 29 May 2023 16:05:39 -0700 Subject: android: externals: Update libadrenotools, use useLegacyPackaging. --- externals/libadrenotools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'externals') diff --git a/externals/libadrenotools b/externals/libadrenotools index a6c0947df..5cd3f5c5c 160000 --- a/externals/libadrenotools +++ b/externals/libadrenotools @@ -1 +1 @@ -Subproject commit a6c0947df6b152b350342f5191b3082768e15e38 +Subproject commit 5cd3f5c5ceea6d9e9d435ccdd922d9b99e55d10b -- cgit v1.2.3