Merge pull request #6459 from lat9nq/ubuntu-fixes
cmake: Improve Linux dependency checking for externals
This commit is contained in:
		| @@ -253,11 +253,82 @@ if(ENABLE_QT) | ||||
|  | ||||
|     # Check for system Qt on Linux, fallback to bundled Qt | ||||
|     if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") | ||||
|         if (NOT YUZU_USE_BUNDLED_QT) | ||||
|             find_package(Qt5 ${QT_VERSION} COMPONENTS Widgets QUIET) | ||||
|             if (NOT Qt5_FOUND) | ||||
|                 set(YUZU_USE_BUNDLED_QT ON CACHE BOOL "Download bundled Qt" FORCE) | ||||
|         find_package(Qt5 ${QT_VERSION} COMPONENTS Widgets) | ||||
|         if (NOT Qt5_FOUND OR YUZU_USE_BUNDLED_QT) | ||||
|             # Check for dependencies, then enable bundled Qt download | ||||
|  | ||||
|             # Check that the system GLIBCXX version is compatible | ||||
|             find_program(OBJDUMP objdump) | ||||
|             if ("${OBJDUMP}" STREQUAL "OBJDUMP-NOTFOUND") | ||||
|                 message(FATAL_ERROR "Required program `objdump` not found.") | ||||
|             endif() | ||||
|             find_library(LIBSTDCXX libstdc++.so.6) | ||||
|             execute_process( | ||||
|                 COMMAND | ||||
|                     ${OBJDUMP} -T ${LIBSTDCXX} | ||||
|                 COMMAND | ||||
|                     grep GLIBCXX_3.4.28 | ||||
|                 COMMAND | ||||
|                     sed "s/[0-9a-f]*.*  //" | ||||
|                 COMMAND | ||||
|                     sed "s/ .*//" | ||||
|                 COMMAND | ||||
|                     sort -u | ||||
|                 OUTPUT_VARIABLE | ||||
|                     GLIBCXX_MET | ||||
|             ) | ||||
|             if (NOT GLIBCXX_MET) | ||||
|                 message(FATAL_ERROR "Qt too old or not found, and bundled Qt package is not \ | ||||
|                     compatible with this system. Either install Qt ${QT_VERSION}, or provide the path \ | ||||
|                     to Qt by setting the variable Qt5_ROOT.") | ||||
|             endif() | ||||
|  | ||||
|             # Check for headers | ||||
|             Include(FindPkgConfig REQUIRED) | ||||
|             pkg_check_modules(QT_DEP_GLU QUIET glu>=9.0.0) | ||||
|             if (NOT QT_DEP_GLU_FOUND) | ||||
|                 message(FATAL_ERROR "Qt bundled pacakge dependency `glu` not found. \ | ||||
|                     Perhaps `libglu1-mesa-dev` needs to be installed?") | ||||
|             endif() | ||||
|             pkg_check_modules(QT_DEP_MESA QUIET dri>=20.0.8) | ||||
|             if (NOT QT_DEP_MESA_FOUND) | ||||
|                 message(FATAL_ERROR "Qt bundled pacakge dependency `dri` not found. \ | ||||
|                     Perhaps `mesa-common-dev` needs to be installed?") | ||||
|             endif() | ||||
|  | ||||
|             # Check for X libraries | ||||
|             set(BUNDLED_QT_REQUIREMENTS | ||||
|                 libxcb-icccm.so.4 | ||||
|                 libxcb-image.so.0 | ||||
|                 libxcb-keysyms.so.1 | ||||
|                 libxcb-randr.so.0 | ||||
|                 libxcb-render-util.so.0 | ||||
|                 libxcb-render.so.0 | ||||
|                 libxcb-shape.so.0 | ||||
|                 libxcb-shm.so.0 | ||||
|                 libxcb-sync.so.1 | ||||
|                 libxcb-xfixes.so.0 | ||||
|                 libxcb-xinerama.so.0 | ||||
|                 libxcb-xkb.so.1 | ||||
|                 libxcb.so.1 | ||||
|                 libxkbcommon-x11.so.0 | ||||
|                 libxkbcommon.so.0 | ||||
|             ) | ||||
|             set(UNRESOLVED_QT_DEPS "") | ||||
|             foreach (REQUIREMENT ${BUNDLED_QT_REQUIREMENTS}) | ||||
|                 find_library(BUNDLED_QT_${REQUIREMENT} ${REQUIREMENT}) | ||||
|                 if ("${BUNDLED_QT_${REQUIREMENT}}" STREQUAL "BUNDLED_QT_${REQUIREMENT}-NOTFOUND") | ||||
|                     set(UNRESOLVED_QT_DEPS ${UNRESOLVED_QT_DEPS} ${REQUIREMENT}) | ||||
|                 endif() | ||||
|                 unset(BUNDLED_QT_${REQUIREMENT}) | ||||
|             endforeach() | ||||
|             unset(BUNDLED_QT_REQUIREMENTS) | ||||
|  | ||||
|             if (NOT "${UNRESOLVED_QT_DEPS}" STREQUAL "") | ||||
|                 message(FATAL_ERROR "Bundled Qt package missing required dependencies: ${UNRESOLVED_QT_DEPS}") | ||||
|             endif() | ||||
|  | ||||
|             set(YUZU_USE_BUNDLED_QT ON CACHE BOOL "Download bundled Qt" FORCE) | ||||
|         endif() | ||||
|         if (YUZU_USE_BUNDLED_QT) | ||||
|             # Binary package currently does not support Qt webengine, so make sure it's disabled | ||||
| @@ -473,7 +544,15 @@ if (YUZU_USE_BUNDLED_FFMPEG) | ||||
|  | ||||
|         # FFmpeg has source that requires one of nasm or yasm to assemble it. | ||||
|         # REQUIRED throws an error if not found here during configuration rather than during compilation. | ||||
|         find_program(ASSEMBLER NAMES nasm yasm REQUIRED) | ||||
|         find_program(ASSEMBLER NAMES nasm yasm) | ||||
|         if ("${ASSEMBLER}" STREQUAL "ASSEMBLER-NOTFOUND") | ||||
|             message(FATAL_ERROR "One of either `nasm` or `yasm` not found but is required.") | ||||
|         endif() | ||||
|  | ||||
|         find_program(AUTOCONF autoconf) | ||||
|         if ("${AUTOCONF}" STREQUAL "AUTOCONF-NOTFOUND") | ||||
|             message(FATAL_ERROR "Required program `autoconf` not found.") | ||||
|         endif() | ||||
|  | ||||
|         set(FFmpeg_PREFIX ${PROJECT_SOURCE_DIR}/externals/ffmpeg) | ||||
|         set(FFmpeg_BUILD_DIR ${PROJECT_BINARY_DIR}/externals/ffmpeg) | ||||
|   | ||||
							
								
								
									
										11
									
								
								externals/libusb/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								externals/libusb/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -5,6 +5,17 @@ if (MINGW OR (${CMAKE_SYSTEM_NAME} MATCHES "Linux") OR APPLE) | ||||
|     # GNU toolchains for some reason doesn't work with the later half of this CMakeLists after | ||||
|     # updating to 1.0.24, so we do it the old-fashioned way for now. | ||||
|  | ||||
|     # Require autoconf and libtoolize here, rather than crash during compilation | ||||
|     find_program(AUTOCONF autoconf) | ||||
|     if ("${AUTOCONF}" STREQUAL "AUTOCONF-NOTFOUND") | ||||
|         message(FATAL_ERROR "Required program `autoconf` not found.") | ||||
|     endif() | ||||
|  | ||||
|     find_program(LIBTOOLIZE libtoolize) | ||||
|     if ("${LIBTOOLIZE}" STREQUAL "LIBTOOLIZE-NOTFOUND") | ||||
|         message(FATAL_ERROR "Required program `libtoolize` not found.") | ||||
|     endif() | ||||
|  | ||||
|     set(LIBUSB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libusb") | ||||
|     set(LIBUSB_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libusb") | ||||
|  | ||||
|   | ||||
| @@ -18,7 +18,10 @@ set(SHADER_FILES | ||||
|     vulkan_uint8.comp | ||||
| ) | ||||
|  | ||||
| find_program(GLSLANGVALIDATOR "glslangValidator" REQUIRED) | ||||
| find_program(GLSLANGVALIDATOR "glslangValidator") | ||||
| if ("${GLSLANGVALIDATOR}" STREQUAL "GLSLANGVALIDATOR-NOTFOUND") | ||||
|     message(FATAL_ERROR "Required program `glslangValidator` not found.") | ||||
| endif() | ||||
|  | ||||
| set(GLSL_FLAGS "") | ||||
| set(QUIET_FLAG "--quiet") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ameer J
					Ameer J