From 42a324d7cbdf315823f1cacfefa118a2f32406d7 Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 20 May 2026 19:13:54 +0000 Subject: [PATCH] fix defined threads --- externals/ffmpeg/CMakeLists.txt | 47 ++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index fd32d512b9..ed152f673a 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -37,7 +37,15 @@ if (NOT YUZU_USE_BUNDLED_FFMPEG) elseif (NOT ("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "${CMAKE_SYSTEM_PROCESSOR}" AND "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "${CMAKE_SYSTEM_NAME}")) string(TOLOWER "${CMAKE_SYSTEM_NAME}" FFmpeg_SYSTEM_NAME) - if (FFmpeg_SYSTEM_NAME STREQUAL "openorbis" OR FFmpeg_SYSTEM_NAME STREQUAL "managarm") + # All of these platforms are supported by ffmpeg as native build OSes + # anything else (like Redox or Managarm or PS4) is NOT natively supported + # hence, assume the "unix like" is just "none" for the sake of OUR sanity. + # If YOUR OS/platform has actual native support: + # 1. congrats + # 2. feel free to add it on the condition below + if (NOT (NETBSD OR SOLARIS OR FREEBSD + OR OPENBSD OR DRAGONFLYBSD OR HAIKU + OR LINUX OR MSYS OR WIN32 OR ANDROID OR APPLE)) set(FFmpeg_SYSTEM_NAME "none") endif() # TODO: Can we really do better? Auto-detection? Something clever? @@ -59,7 +67,7 @@ if (NOT YUZU_USE_BUNDLED_FFMPEG) endif() endif() -if (OPENORBIS OR MANAGARM) +if (OPENORBIS OR MANAGARM OR EMSCRIPTEN) # Doesn't support VA-API, don't go thru the embarrassment of trying to enable it list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) elseif (ANDROID) @@ -184,20 +192,28 @@ if (OPENORBIS) -lSceUserService -lSceSysmodule -lSceNet - -lSceLibcInternal - ) + -lSceLibcInternal) list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --disable-pthreads --extra-cflags=${CMAKE_SYSROOT}/usr/include --extra-cxxflags=${CMAKE_SYSROOT}/usr/include - --extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}" - ) + --extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}") elseif (MANAGARM) # Required for proper stuff list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --disable-pthreads - --extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}" - ) + --extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}") +endif() + +# Usually used by Emscripten +if (DEFINED CMAKE_AR) + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --ar=${CMAKE_AR}) +endif() +if (DEFINED CMAKE_NM) + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --nm=${CMAKE_NM}) +endif() +if (DEFINED CMAKE_RANLIB) + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --ranlib=${CMAKE_RANLIB}) endif() if (YUZU_USE_BUNDLED_FFMPEG) @@ -313,26 +329,27 @@ else() # 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. - execute_process( - COMMAND - nproc - OUTPUT_VARIABLE - SYSTEM_THREADS) + cmake_host_system_information(RESULT SYSTEM_THREADS QUERY NUMBER_OF_LOGICAL_CORES) set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES}) # BSD make or Solaris make don't support ffmpeg make-j8 - if (LINUX OR ANDROID OR APPLE OR WIN32 OR FREEBSD) + if (DEFINED SYSTEM_THREADS AND (LINUX OR ANDROID OR APPLE OR WIN32)) set(FFmpeg_MAKE_ARGS -j${SYSTEM_THREADS}) else() set(FFmpeg_MAKE_ARGS "") endif() + find_program(MAKE gmake) + if (NOT MAKE_FOUND) + # Arch famously names 'gmake' as 'make' + find_program(MAKE make REQUIRED) + endif() add_custom_command( OUTPUT ${FFmpeg_BUILD_LIBRARIES} COMMAND - gmake ${FFmpeg_MAKE_ARGS} + ${MAKE} ${FFmpeg_MAKE_ARGS} WORKING_DIRECTORY ${FFmpeg_BUILD_DIR} )