mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	cmake: Use autotools to build libusb generally for GNU
Building libusb was also broken on GCC (and maybe Clang) on our CMakeLists after upgrading to 1.0.24, but it was not being checked because our 18.04 container had libusb installed on it. This builds on the MinGW work from earlier and extends it to the rest of the GNU toolchains. In addition we make use of pkg-config when present to find libusb. pkg-config is preferrable because we can specify a minimum required version.
This commit is contained in:
		
							parent
							
								
									c41451af75
								
							
						
					
					
						commit
						55dd027115
					
				| @ -23,6 +23,8 @@ option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) | ||||
| 
 | ||||
| option(YUZU_USE_BUNDLED_BOOST "Download bundled Boost" OFF) | ||||
| 
 | ||||
| option(YUZU_USE_BUNDLED_LIBUSB "Compile bundled libusb" OFF) | ||||
| 
 | ||||
| CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON "WIN32" OFF) | ||||
| 
 | ||||
| option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF) | ||||
| @ -422,11 +424,15 @@ endif() | ||||
| # Ensure libusb is properly configured (based on dolphin libusb include) | ||||
| if(NOT APPLE) | ||||
|     include(FindPkgConfig) | ||||
|     find_package(LibUSB) | ||||
|     if (PKG_CONFIG_FOUND) | ||||
|         pkg_check_modules(LIBUSB QUIET libusb-1.0>=1.0.24) | ||||
|     else() | ||||
|         find_package(LibUSB) | ||||
|     endif() | ||||
| endif() | ||||
| if (NOT LIBUSB_FOUND) | ||||
| if (NOT LIBUSB_FOUND OR YUZU_USE_BUNDLED_LIBUSB) | ||||
|     add_subdirectory(externals/libusb) | ||||
|     set(LIBUSB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals/libusb/libusb/libusb") | ||||
|     set(LIBUSB_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/externals/libusb/libusb/libusb") | ||||
|     set(LIBUSB_LIBRARIES usb) | ||||
| endif() | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										44
									
								
								externals/libusb/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										44
									
								
								externals/libusb/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @ -1,10 +1,10 @@ | ||||
| if (MINGW) | ||||
|     # The MinGW toolchain for some reason doesn't work with this CMakeLists file after updating to | ||||
|     # 1.0.24, so we do it the old-fashioned way for now. We may want to move native Linux toolchains | ||||
|     # to here, too (TODO lat9nq?). | ||||
| if (MINGW OR NOT WIN32) | ||||
|     # 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. | ||||
| 
 | ||||
|     set(LIBUSB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libusb") | ||||
|     set(LIBUSB_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libusb") | ||||
| 
 | ||||
|     # Workarounds for MSYS/MinGW | ||||
|     if (MSYS) | ||||
|         # CMake on Windows passes `C:/`, but we need `/C/` or `/c/` to use `configure` | ||||
| @ -19,9 +19,18 @@ if (MINGW) | ||||
| 
 | ||||
|     set(LIBUSB_CONFIGURE "${LIBUSB_SRC_DIR}/configure") | ||||
|     set(LIBUSB_MAKEFILE "${LIBUSB_PREFIX}/Makefile") | ||||
|     set(LIBUSB_LIBRARY "${LIBUSB_PREFIX}/libusb/.libs/libusb-1.0.dll.a") | ||||
|     set(LIBUSB_SHARED_LIBRARY "${LIBUSB_PREFIX}/libusb/.libs/libusb-1.0.dll") | ||||
|     set(LIBUSB_SHARED_LIBRARY_DEST "${CMAKE_BINARY_DIR}/bin/libusb-1.0.dll") | ||||
| 
 | ||||
|     if (MINGW) | ||||
|         set(LIBUSB_LIBRARY "${LIBUSB_PREFIX}/libusb/.libs/libusb-1.0.dll.a") | ||||
|         set(LIBUSB_SHARED_LIBRARY "${LIBUSB_PREFIX}/libusb/.libs/libusb-1.0.dll") | ||||
|         set(LIBUSB_SHARED_LIBRARY_DEST "${CMAKE_BINARY_DIR}/bin/libusb-1.0.dll") | ||||
| 
 | ||||
|         set(LIBUSB_CONFIGURE_ARGS --host=x86_64-w64-mingw32 --build=x86_64-windows) | ||||
|     else() | ||||
|         set(LIBUSB_LIBRARY "${LIBUSB_PREFIX}/libusb/.libs/libusb-1.0.so") | ||||
|         set(LIBUSB_SHARED_LIBRARY "${LIBUSB_LIBRARY}") | ||||
|         set(LIBUSB_SHARED_LIBRARY_DEST "${CMAKE_BINARY_DIR}/bin/libusb-1.0.so") | ||||
|     endif() | ||||
| 
 | ||||
|     # Causes "externals/libusb/libusb/libusb/os/windows_winusb.c:1427:2: error: conversion to non-scalar type requested", so cannot statically link it for now. | ||||
|     # set(LIBUSB_CFLAGS "-DGUID_DEVINTERFACE_USB_DEVICE=\\(GUID\\){0xA5DCBF10,0x6530,0x11D2,{0x90,0x1F,0x00,0xC0,0x4F,0xB9,0x51,0xED}}") | ||||
| @ -37,11 +46,6 @@ if (MINGW) | ||||
|             "${LIBUSB_PREFIX}" | ||||
|     ) | ||||
| 
 | ||||
|     # We may use this path for other GNU toolchains, so put all of the MinGW-specific stuff here | ||||
|     if (MINGW) | ||||
|         set(LIBUSB_CONFIGURE_ARGS --host=x86_64-w64-mingw32 --build=x86_64-windows) | ||||
|     endif() | ||||
| 
 | ||||
|     add_custom_command( | ||||
|         OUTPUT | ||||
|             "${LIBUSB_MAKEFILE}" | ||||
| @ -71,16 +75,24 @@ if (MINGW) | ||||
|             /bin/cp "${LIBUSB_SHARED_LIBRARY}" "${LIBUSB_SHARED_LIBRARY_DEST}" | ||||
|     ) | ||||
| 
 | ||||
|     add_custom_target(usb-bootstrap ALL DEPENDS "${LIBUSB_CONFIGURE}") | ||||
|     add_custom_target(usb-configure ALL DEPENDS "${LIBUSB_MAKEFILE}" usb-bootstrap) | ||||
|     add_custom_target(usb-bootstrap DEPENDS "${LIBUSB_CONFIGURE}") | ||||
|     add_custom_target(usb-configure DEPENDS "${LIBUSB_MAKEFILE}" usb-bootstrap) | ||||
|     add_custom_target(usb-build ALL DEPENDS "${LIBUSB_LIBRARY}" usb-configure) | ||||
|     # Workaround since static linking didn't work out -- We need to copy the DLL to the bin directory | ||||
|     add_custom_target(usb-copy ALL DEPENDS "${LIBUSB_SHARED_LIBRARY_DEST}" usb-build) | ||||
| 
 | ||||
|     # Make `usb` alias to LIBUSB_LIBRARY | ||||
|     add_library(usb INTERFACE) | ||||
|     add_dependencies(usb usb-copy) | ||||
|     target_link_libraries(usb INTERFACE "${LIBUSB_LIBRARY}") | ||||
| else() # MINGW | ||||
| 
 | ||||
|     if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") | ||||
|         find_package(Libudev QUIET) | ||||
|         if(LIBUDEV_FOUND) | ||||
|             target_link_libraries(usb INTERFACE "${LIBUDEV_LIBRARIES}") | ||||
|             target_include_directories(usb INTERFACE "${LIBUDEV_INCLUDE_DIR}") | ||||
|         endif() | ||||
|     endif() | ||||
| else() # MINGW OR NOT WIN32 | ||||
|     # Ensure libusb compiles with UTF-8 encoding on MSVC | ||||
|     if(MSVC) | ||||
|         add_compile_options(/utf-8) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user