mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	CMake, CI: Add FFmpeg library dependency
This commit is contained in:
		
							parent
							
								
									0224ae13c4
								
							
						
					
					
						commit
						cf2c354fb9
					
				
					 8 changed files with 48 additions and 26 deletions
				
			
		|  | @ -3,7 +3,7 @@ | ||||||
| cd /citra | cd /citra | ||||||
| 
 | 
 | ||||||
| mkdir build && cd build | mkdir build && cd build | ||||||
| cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON | cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_FFMPEG=ON | ||||||
| ninja | ninja | ||||||
| 
 | 
 | ||||||
| ctest -VV -C Release | ctest -VV -C Release | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ cd /citra | ||||||
| echo 'max_size = 3.0G' > "$HOME/.ccache/ccache.conf" | echo 'max_size = 3.0G' > "$HOME/.ccache/ccache.conf" | ||||||
| 
 | 
 | ||||||
| mkdir build && cd build | mkdir build && cd build | ||||||
| cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$(pwd)/../CMakeModules/MinGWCross.cmake" -DUSE_CCACHE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_MF=ON | cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$(pwd)/../CMakeModules/MinGWCross.cmake" -DUSE_CCACHE=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_MF=ON -DENABLE_FFMPEG=ON -DCMAKE_NO_SYSTEM_FROM_IMPORTED=TRUE | ||||||
| ninja | ninja | ||||||
| 
 | 
 | ||||||
| echo "Tests skipped" | echo "Tests skipped" | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| cd /citra | cd /citra | ||||||
| 
 | 
 | ||||||
| mkdir build && cd build | mkdir build && cd build | ||||||
| cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON | cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_FFMPEG=ON | ||||||
| ninja | ninja | ||||||
| 
 | 
 | ||||||
| ctest -VV -C Release | ctest -VV -C Release | ||||||
|  |  | ||||||
|  | @ -21,10 +21,11 @@ option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) | ||||||
| option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) | option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) | ||||||
| 
 | 
 | ||||||
| option(ENABLE_FFMPEG "Enable FFmpeg decoder/encoder" OFF) | option(ENABLE_FFMPEG "Enable FFmpeg decoder/encoder" OFF) | ||||||
|  | CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_FFMPEG "Download bundled FFmpeg binaries" ON "ENABLE_FFMPEG;MSVC" OFF) | ||||||
| 
 | 
 | ||||||
| option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF) | option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF) | ||||||
| 
 | 
 | ||||||
| CMAKE_DEPENDENT_OPTION(ENABLE_MF "Use Media Foundation decoder" ON "WIN32;NOT ENABLE_FFMPEG" OFF) | CMAKE_DEPENDENT_OPTION(ENABLE_MF "Use Media Foundation decoder (preferred over FFmpeg)" ON "WIN32" OFF) | ||||||
| 
 | 
 | ||||||
| if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit) | if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.git/hooks/pre-commit) | ||||||
|     message(STATUS "Copying pre-commit hook") |     message(STATUS "Copying pre-commit hook") | ||||||
|  | @ -189,26 +190,23 @@ endif() | ||||||
| if (ENABLE_FFMPEG) | if (ENABLE_FFMPEG) | ||||||
|     if (CITRA_USE_BUNDLED_FFMPEG) |     if (CITRA_USE_BUNDLED_FFMPEG) | ||||||
|         if ((MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1930) AND ARCHITECTURE_x86_64) |         if ((MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1930) AND ARCHITECTURE_x86_64) | ||||||
|             set(FFmpeg_VER "ffmpeg-4.0.2-msvc") |             set(FFmpeg_VER "ffmpeg-4.1-win64") | ||||||
|         else() |         else() | ||||||
|             message(FATAL_ERROR "No bundled FFmpeg binaries for your toolchain. Disable CITRA_USE_BUNDLED_FFMPEG and provide your own.") |             message(FATAL_ERROR "No bundled FFmpeg binaries for your toolchain. Disable CITRA_USE_BUNDLED_FFMPEG and provide your own.") | ||||||
|         endif() |         endif() | ||||||
| 
 | 
 | ||||||
|         if (DEFINED FFmpeg_VER) |         if (DEFINED FFmpeg_VER) | ||||||
|             download_bundled_external("ffmpeg/" ${FFmpeg_VER} FFmpeg_PREFIX) |             download_bundled_external("ffmpeg/" ${FFmpeg_VER} FFmpeg_PREFIX) | ||||||
|             set(FFMPEG_DIR "${FFmpeg_PREFIX}/../") |             set(FFMPEG_DIR "${FFmpeg_PREFIX}") | ||||||
|             set(FFMPEG_FOUND YES) |  | ||||||
|         endif() |  | ||||||
|     else() |  | ||||||
|         find_package(FFmpeg REQUIRED COMPONENTS avcodec) |  | ||||||
|         if ("${FFmpeg_avcodec_VERSION}" VERSION_LESS "57.48.101") |  | ||||||
|             message(FATAL_ERROR "Found version for libavcodec is too low. The required version is at least 57.48.101 (included in FFmpeg 3.1 and later).") |  | ||||||
|         else() |  | ||||||
|             set(FFMPEG_FOUND YES) |  | ||||||
|         endif() |         endif() | ||||||
|     endif() |     endif() | ||||||
| else() | 
 | ||||||
|     set(FFMPEG_FOUND NO) |     find_package(FFmpeg REQUIRED COMPONENTS avcodec avformat avutil swscale swresample) | ||||||
|  |     if ("${FFmpeg_avcodec_VERSION}" VERSION_LESS "57.48.101") | ||||||
|  |         message(FATAL_ERROR "Found version for libavcodec is too low. The required version is at least 57.48.101 (included in FFmpeg 3.1 and later).") | ||||||
|  |     endif() | ||||||
|  | 
 | ||||||
|  |     add_definitions(-DENABLE_FFMPEG) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # Platform-specific library requirements | # Platform-specific library requirements | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								CMakeModules/CopyCitraFFmpegDeps.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								CMakeModules/CopyCitraFFmpegDeps.cmake
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | function(copy_citra_FFmpeg_deps target_dir) | ||||||
|  |     include(WindowsCopyFiles) | ||||||
|  |     set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/") | ||||||
|  |     windows_copy_files(${target_dir} ${FFMPEG_DIR}/bin ${DLL_DEST} | ||||||
|  |         avcodec*.dll | ||||||
|  |         avformat*.dll | ||||||
|  |         avutil*.dll | ||||||
|  |         swresample*.dll | ||||||
|  |         swscale*.dll | ||||||
|  |     ) | ||||||
|  | endfunction(copy_citra_FFmpeg_deps) | ||||||
|  | @ -43,9 +43,9 @@ before_build: | ||||||
|         $COMPAT = if ($env:ENABLE_COMPATIBILITY_REPORTING -eq $null) {0} else {$env:ENABLE_COMPATIBILITY_REPORTING} |         $COMPAT = if ($env:ENABLE_COMPATIBILITY_REPORTING -eq $null) {0} else {$env:ENABLE_COMPATIBILITY_REPORTING} | ||||||
|         if ($env:BUILD_TYPE -eq 'msvc') { |         if ($env:BUILD_TYPE -eq 'msvc') { | ||||||
|           # redirect stderr and change the exit code to prevent powershell from cancelling the build if cmake prints a warning |           # redirect stderr and change the exit code to prevent powershell from cancelling the build if cmake prints a warning | ||||||
|           cmd /C 'cmake -G "Visual Studio 15 2017 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${COMPAT} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON  -DENABLE_MF=ON .. 2>&1 && exit 0' |           cmd /C 'cmake -G "Visual Studio 15 2017 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${COMPAT} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON  -DENABLE_MF=ON -DENABLE_FFMPEG=ON .. 2>&1 && exit 0' | ||||||
|         } else { |         } else { | ||||||
|           C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DCMAKE_BUILD_TYPE=Release -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${COMPAT} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON  -DENABLE_MF=ON .. 2>&1" |           C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DCMAKE_BUILD_TYPE=Release -DENABLE_QT_TRANSLATION=ON -DCITRA_ENABLE_COMPATIBILITY_REPORTING=${COMPAT} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON  -DENABLE_MF=ON -DENABLE_FFMPEG=ON .. 2>&1" | ||||||
|         } |         } | ||||||
|   - cd .. |   - cd .. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,8 +31,6 @@ add_library(audio_core STATIC | ||||||
| 
 | 
 | ||||||
|     $<$<BOOL:${SDL2_FOUND}>:sdl2_sink.cpp sdl2_sink.h> |     $<$<BOOL:${SDL2_FOUND}>:sdl2_sink.cpp sdl2_sink.h> | ||||||
|     $<$<BOOL:${ENABLE_CUBEB}>:cubeb_sink.cpp cubeb_sink.h cubeb_input.cpp cubeb_input.h> |     $<$<BOOL:${ENABLE_CUBEB}>:cubeb_sink.cpp cubeb_sink.h cubeb_input.cpp cubeb_input.h> | ||||||
|     $<$<BOOL:${FFMPEG_FOUND}>:hle/ffmpeg_decoder.cpp hle/ffmpeg_decoder.h hle/ffmpeg_dl.cpp hle/ffmpeg_dl.h> |  | ||||||
|     $<$<BOOL:${ENABLE_MF}>:hle/wmf_decoder.cpp hle/wmf_decoder.h hle/wmf_decoder_utils.cpp hle/wmf_decoder_utils.h> |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| create_target_directory_groups(audio_core) | create_target_directory_groups(audio_core) | ||||||
|  | @ -40,7 +38,22 @@ create_target_directory_groups(audio_core) | ||||||
| target_link_libraries(audio_core PUBLIC common core) | target_link_libraries(audio_core PUBLIC common core) | ||||||
| target_link_libraries(audio_core PRIVATE SoundTouch teakra) | target_link_libraries(audio_core PRIVATE SoundTouch teakra) | ||||||
| 
 | 
 | ||||||
| if(FFMPEG_FOUND) | if(ENABLE_MF) | ||||||
|  |     target_sources(audio_core PRIVATE | ||||||
|  |         hle/wmf_decoder.cpp | ||||||
|  |         hle/wmf_decoder.h | ||||||
|  |         hle/wmf_decoder_utils.cpp | ||||||
|  |         hle/wmf_decoder_utils.h | ||||||
|  |     ) | ||||||
|  |     target_link_libraries(audio_core PRIVATE mf.lib mfplat.lib mfuuid.lib) | ||||||
|  |     target_compile_definitions(audio_core PUBLIC HAVE_MF) | ||||||
|  | elseif(ENABLE_FFMPEG) | ||||||
|  |     target_sources(audio_core PRIVATE | ||||||
|  |         hle/ffmpeg_decoder.cpp | ||||||
|  |         hle/ffmpeg_decoder.h | ||||||
|  |         hle/ffmpeg_dl.cpp | ||||||
|  |         hle/ffmpeg_dl.h | ||||||
|  |     ) | ||||||
|     if(UNIX) |     if(UNIX) | ||||||
|         target_link_libraries(audio_core PRIVATE FFmpeg::avcodec) |         target_link_libraries(audio_core PRIVATE FFmpeg::avcodec) | ||||||
|     else() |     else() | ||||||
|  | @ -49,11 +62,6 @@ if(FFMPEG_FOUND) | ||||||
|     target_compile_definitions(audio_core PUBLIC HAVE_FFMPEG) |     target_compile_definitions(audio_core PUBLIC HAVE_FFMPEG) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| if(ENABLE_MF) |  | ||||||
|     target_link_libraries(audio_core PRIVATE mf.lib mfplat.lib mfuuid.lib) |  | ||||||
|     target_compile_definitions(audio_core PUBLIC HAVE_MF) |  | ||||||
| endif() |  | ||||||
| 
 |  | ||||||
| if(SDL2_FOUND) | if(SDL2_FOUND) | ||||||
|     target_link_libraries(audio_core PRIVATE SDL2) |     target_link_libraries(audio_core PRIVATE SDL2) | ||||||
|     target_compile_definitions(audio_core PRIVATE HAVE_SDL2) |     target_compile_definitions(audio_core PRIVATE HAVE_SDL2) | ||||||
|  |  | ||||||
|  | @ -265,4 +265,9 @@ if (MSVC) | ||||||
|     include(CopyCitraSDLDeps) |     include(CopyCitraSDLDeps) | ||||||
|     copy_citra_Qt5_deps(citra-qt) |     copy_citra_Qt5_deps(citra-qt) | ||||||
|     copy_citra_SDL_deps(citra-qt) |     copy_citra_SDL_deps(citra-qt) | ||||||
|  | 
 | ||||||
|  |     if (ENABLE_FFMPEG) | ||||||
|  |         include(CopyCitraFFmpegDeps) | ||||||
|  |         copy_citra_FFmpeg_deps(citra-qt) | ||||||
|  |     endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue