summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeModules/DownloadExternals.cmake7
-rw-r--r--externals/ffmpeg/CMakeLists.txt64
-rw-r--r--src/video_core/CMakeLists.txt2
3 files changed, 63 insertions, 10 deletions
diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake
index 8fe5ba48d..814069f0b 100644
--- a/CMakeModules/DownloadExternals.cmake
+++ b/CMakeModules/DownloadExternals.cmake
@@ -7,6 +7,7 @@
7# prefix_var: name of a variable which will be set with the path to the extracted contents 7# prefix_var: name of a variable which will be set with the path to the extracted contents
8function(download_bundled_external remote_path lib_name prefix_var) 8function(download_bundled_external remote_path lib_name prefix_var)
9 9
10set(package_base_url "https://github.com/yuzu-emu/")
10set(package_repo "no_platform") 11set(package_repo "no_platform")
11set(package_extension "no_platform") 12set(package_extension "no_platform")
12if (WIN32) 13if (WIN32)
@@ -15,10 +16,14 @@ if (WIN32)
15elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") 16elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
16 set(package_repo "ext-linux-bin/raw/main/") 17 set(package_repo "ext-linux-bin/raw/main/")
17 set(package_extension ".tar.xz") 18 set(package_extension ".tar.xz")
19elseif (ANDROID)
20 set(package_base_url "https://gitlab.com/tertius42/")
21 set(package_repo "ext-android-bin/-/raw/main/")
22 set(package_extension ".tar.xz") #ffmpeg/ffmpeg-android-20221229.tar.xz")
18else() 23else()
19 message(FATAL_ERROR "No package available for this platform") 24 message(FATAL_ERROR "No package available for this platform")
20endif() 25endif()
21set(package_url "https://github.com/yuzu-emu/${package_repo}") 26set(package_url "${package_base_url}${package_repo}")
22 27
23set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}") 28set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}")
24if (NOT EXISTS "${prefix}") 29if (NOT EXISTS "${prefix}")
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 @@
1# SPDX-FileCopyrightText: 2021 yuzu Emulator Project 1# SPDX-FileCopyrightText: 2021 yuzu Emulator Project
2# SPDX-License-Identifier: GPL-2.0-or-later 2# SPDX-License-Identifier: GPL-2.0-or-later
3 3
4if (NOT WIN32) 4if (NOT WIN32 AND NOT ANDROID)
5 # Build FFmpeg from externals 5 # Build FFmpeg from externals
6 message(STATUS "Using FFmpeg from externals") 6 message(STATUS "Using FFmpeg from externals")
7 7
@@ -44,10 +44,12 @@ if (NOT WIN32)
44 endforeach() 44 endforeach()
45 45
46 find_package(PkgConfig REQUIRED) 46 find_package(PkgConfig REQUIRED)
47 pkg_check_modules(LIBVA libva) 47 if (NOT ANDROID)
48 pkg_check_modules(CUDA cuda) 48 pkg_check_modules(LIBVA libva)
49 pkg_check_modules(FFNVCODEC ffnvcodec) 49 pkg_check_modules(CUDA cuda)
50 pkg_check_modules(VDPAU vdpau) 50 pkg_check_modules(FFNVCODEC ffnvcodec)
51 pkg_check_modules(VDPAU vdpau)
52 endif()
51 53
52 set(FFmpeg_HWACCEL_LIBRARIES) 54 set(FFmpeg_HWACCEL_LIBRARIES)
53 set(FFmpeg_HWACCEL_FLAGS) 55 set(FFmpeg_HWACCEL_FLAGS)
@@ -121,6 +123,26 @@ if (NOT WIN32)
121 list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) 123 list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau)
122 endif() 124 endif()
123 125
126 find_program(BASH_PROGRAM bash REQUIRED)
127
128 set(FFmpeg_CROSS_COMPILE_FLAGS "")
129 if (ANDROID)
130 string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME)
131 set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}")
132 set(SYSROOT "${TOOLCHAIN}/sysroot")
133 set(FFmpeg_CPU "armv8-a")
134 list(APPEND FFmpeg_CROSS_COMPILE_FLAGS
135 --arch=arm64
136 #--cpu=${FFmpeg_CPU}
137 --enable-cross-compile
138 --cross-prefix=${TOOLCHAIN}/bin/aarch64-linux-android-
139 --sysroot=${SYSROOT}
140 --target-os=android
141 --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld"
142 --extra-ldflags="-nostdlib"
143 )
144 endif()
145
124 # `configure` parameters builds only exactly what yuzu needs from FFmpeg 146 # `configure` parameters builds only exactly what yuzu needs from FFmpeg
125 # `--disable-vdpau` is needed to avoid linking issues 147 # `--disable-vdpau` is needed to avoid linking issues
126 set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}) 148 set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER})
@@ -129,7 +151,7 @@ if (NOT WIN32)
129 OUTPUT 151 OUTPUT
130 ${FFmpeg_MAKEFILE} 152 ${FFmpeg_MAKEFILE}
131 COMMAND 153 COMMAND
132 /bin/bash ${FFmpeg_PREFIX}/configure 154 ${BASH_PROGRAM} ${FFmpeg_PREFIX}/configure
133 --disable-avdevice 155 --disable-avdevice
134 --disable-avformat 156 --disable-avformat
135 --disable-doc 157 --disable-doc
@@ -146,12 +168,14 @@ if (NOT WIN32)
146 --cc="${FFmpeg_CC}" 168 --cc="${FFmpeg_CC}"
147 --cxx="${FFmpeg_CXX}" 169 --cxx="${FFmpeg_CXX}"
148 ${FFmpeg_HWACCEL_FLAGS} 170 ${FFmpeg_HWACCEL_FLAGS}
171 ${FFmpeg_CROSS_COMPILE_FLAGS}
149 WORKING_DIRECTORY 172 WORKING_DIRECTORY
150 ${FFmpeg_BUILD_DIR} 173 ${FFmpeg_BUILD_DIR}
151 ) 174 )
152 unset(FFmpeg_CC) 175 unset(FFmpeg_CC)
153 unset(FFmpeg_CXX) 176 unset(FFmpeg_CXX)
154 unset(FFmpeg_HWACCEL_FLAGS) 177 unset(FFmpeg_HWACCEL_FLAGS)
178 unset(FFmpeg_CROSS_COMPILE_FLAGS)
155 179
156 # Workaround for Ubuntu 18.04's older version of make not being able to call make as a child 180 # Workaround for Ubuntu 18.04's older version of make not being able to call make as a child
157 # with context of the jobserver. Also helps ninja users. 181 # with context of the jobserver. Also helps ninja users.
@@ -197,7 +221,32 @@ if (NOT WIN32)
197 else() 221 else()
198 message(FATAL_ERROR "FFmpeg not found") 222 message(FATAL_ERROR "FFmpeg not found")
199 endif() 223 endif()
200else(WIN32) 224elseif(ANDROID)
225 # Use yuzu FFmpeg binaries
226 set(FFmpeg_EXT_NAME "ffmpeg-android-v4.4.LTS")
227 set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}")
228 download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "")
229 set(FFmpeg_FOUND YES)
230 set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE)
231 set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/lib" CACHE PATH "Path to FFmpeg library directory" FORCE)
232 set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE)
233 set(FFmpeg_LIBRARIES
234 ${FFmpeg_LIBRARY_DIR}/libavcodec.so
235 ${FFmpeg_LIBRARY_DIR}/libavdevice.so
236 ${FFmpeg_LIBRARY_DIR}/libavfilter.so
237 ${FFmpeg_LIBRARY_DIR}/libavformat.so
238 ${FFmpeg_LIBRARY_DIR}/libavutil.so
239 ${FFmpeg_LIBRARY_DIR}/libswresample.so
240 ${FFmpeg_LIBRARY_DIR}/libswscale.so
241 ${FFmpeg_LIBRARY_DIR}/libvpx.a
242 ${FFmpeg_LIBRARY_DIR}/libx264.a
243 CACHE PATH "Paths to FFmpeg libraries" FORCE)
244 # exported variables
245 set(FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE)
246 set(FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE)
247 set(FFmpeg_LIBRARIES "${FFmpeg_LIBRARIES}" PARENT_SCOPE)
248 set(FFmpeg_INCLUDE_DIR "${FFmpeg_INCLUDE_DIR}" PARENT_SCOPE)
249elseif(WIN32)
201 # Use yuzu FFmpeg binaries 250 # Use yuzu FFmpeg binaries
202 set(FFmpeg_EXT_NAME "ffmpeg-5.1.3") 251 set(FFmpeg_EXT_NAME "ffmpeg-5.1.3")
203 set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}") 252 set(FFmpeg_PATH "${CMAKE_BINARY_DIR}/externals/${FFmpeg_EXT_NAME}")
@@ -206,7 +255,6 @@ else(WIN32)
206 set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE) 255 set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include" CACHE PATH "Path to FFmpeg headers" FORCE)
207 set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE) 256 set(FFmpeg_LIBRARY_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg library directory" FORCE)
208 set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE) 257 set(FFmpeg_LDFLAGS "" CACHE STRING "FFmpeg linker flags" FORCE)
209 set(FFmpeg_DLL_DIR "${FFmpeg_PATH}/bin" CACHE PATH "Path to FFmpeg dll's" FORCE)
210 set(FFmpeg_LIBRARIES 258 set(FFmpeg_LIBRARIES
211 ${FFmpeg_LIBRARY_DIR}/swscale.lib 259 ${FFmpeg_LIBRARY_DIR}/swscale.lib
212 ${FFmpeg_LIBRARY_DIR}/avcodec.lib 260 ${FFmpeg_LIBRARY_DIR}/avcodec.lib
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index 308d013d6..027259f57 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -281,7 +281,7 @@ create_target_directory_groups(video_core)
281target_link_libraries(video_core PUBLIC common core) 281target_link_libraries(video_core PUBLIC common core)
282target_link_libraries(video_core PUBLIC glad shader_recompiler stb) 282target_link_libraries(video_core PUBLIC glad shader_recompiler stb)
283 283
284if (YUZU_USE_BUNDLED_FFMPEG AND NOT WIN32) 284if (YUZU_USE_BUNDLED_FFMPEG AND NOT (WIN32 OR ANDROID))
285 add_dependencies(video_core ffmpeg-build) 285 add_dependencies(video_core ffmpeg-build)
286endif() 286endif()
287 287