Merge pull request #9515 from liamwhite/cmake-refactor
CMake: make more features optional
This commit is contained in:
		| @@ -22,6 +22,8 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON | |||||||
| # On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion | # On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion | ||||||
| CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF) | CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF) | ||||||
|  |  | ||||||
|  | option(ENABLE_LIBUSB "Enable the use of LibUSB" ON) | ||||||
|  |  | ||||||
| option(ENABLE_OPENGL "Enable OpenGL" ON) | option(ENABLE_OPENGL "Enable OpenGL" ON) | ||||||
| mark_as_advanced(FORCE ENABLE_OPENGL) | mark_as_advanced(FORCE ENABLE_OPENGL) | ||||||
| option(ENABLE_QT "Enable the Qt frontend" ON) | option(ENABLE_QT "Enable the Qt frontend" ON) | ||||||
| @@ -35,6 +37,8 @@ option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) | |||||||
|  |  | ||||||
| option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" "${WIN32}") | option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" "${WIN32}") | ||||||
|  |  | ||||||
|  | option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON) | ||||||
|  |  | ||||||
| option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) | option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) | ||||||
|  |  | ||||||
| option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF) | option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF) | ||||||
| @@ -47,6 +51,8 @@ option(YUZU_TESTS "Compile tests" ON) | |||||||
|  |  | ||||||
| option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) | option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) | ||||||
|  |  | ||||||
|  | option(YUZU_ROOM "Compile LDN room server" ON) | ||||||
|  |  | ||||||
| CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF) | CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF) | ||||||
|  |  | ||||||
| option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}") | option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}") | ||||||
| @@ -204,33 +210,39 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) | |||||||
| find_package(enet 1.3) | find_package(enet 1.3) | ||||||
| find_package(fmt 9 REQUIRED) | find_package(fmt 9 REQUIRED) | ||||||
| find_package(inih) | find_package(inih) | ||||||
| find_package(libusb 1.0.24) |  | ||||||
| find_package(lz4 REQUIRED) | find_package(lz4 REQUIRED) | ||||||
| find_package(nlohmann_json 3.8 REQUIRED) | find_package(nlohmann_json 3.8 REQUIRED) | ||||||
| find_package(Opus 1.3) | find_package(Opus 1.3) | ||||||
| find_package(Vulkan 1.3.238) |  | ||||||
| find_package(ZLIB 1.2 REQUIRED) | find_package(ZLIB 1.2 REQUIRED) | ||||||
| find_package(zstd 1.5 REQUIRED) | find_package(zstd 1.5 REQUIRED) | ||||||
|  |  | ||||||
|  | if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS) | ||||||
|  |     find_package(Vulkan 1.3.238) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if (ENABLE_LIBUSB) | ||||||
|  |     find_package(libusb 1.0.24) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) | if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) | ||||||
|     find_package(xbyak 6) |     find_package(xbyak 6 QUIET) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | ||||||
|     find_package(dynarmic 6.4.0) |     find_package(dynarmic 6.4.0 QUIET) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (ENABLE_CUBEB) | if (ENABLE_CUBEB) | ||||||
|     find_package(cubeb) |     find_package(cubeb QUIET) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (USE_DISCORD_PRESENCE) | if (USE_DISCORD_PRESENCE) | ||||||
|     find_package(DiscordRPC) |     find_package(DiscordRPC QUIET) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (ENABLE_WEB_SERVICE) | if (ENABLE_WEB_SERVICE) | ||||||
|     find_package(cpp-jwt 1.4) |     find_package(cpp-jwt 1.4 QUIET) | ||||||
|     find_package(httplib 0.11) |     find_package(httplib 0.11 QUIET) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (YUZU_TESTS) | if (YUZU_TESTS) | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -45,7 +45,7 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12" AND CMAKE_CXX_COMPILER | |||||||
| endif() | endif() | ||||||
|  |  | ||||||
| # libusb | # libusb | ||||||
| if (NOT TARGET libusb::usb) | if (ENABLE_LIBUSB AND NOT TARGET libusb::usb) | ||||||
|     add_subdirectory(libusb EXCLUDE_FROM_ALL) |     add_subdirectory(libusb EXCLUDE_FROM_ALL) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| @@ -152,6 +152,6 @@ if (YUZU_USE_BUNDLED_FFMPEG) | |||||||
| endif() | endif() | ||||||
|  |  | ||||||
| # Vulkan-Headers | # Vulkan-Headers | ||||||
| if (NOT TARGET Vulkan::Headers) | if (YUZU_USE_EXTERNAL_VULKAN_HEADERS) | ||||||
|     add_subdirectory(Vulkan-Headers EXCLUDE_FROM_ALL) |     add_subdirectory(Vulkan-Headers EXCLUDE_FROM_ALL) | ||||||
| endif() | endif() | ||||||
|   | |||||||
| @@ -161,7 +161,10 @@ add_subdirectory(video_core) | |||||||
| add_subdirectory(network) | add_subdirectory(network) | ||||||
| add_subdirectory(input_common) | add_subdirectory(input_common) | ||||||
| add_subdirectory(shader_recompiler) | add_subdirectory(shader_recompiler) | ||||||
|  |  | ||||||
|  | if (YUZU_ROOM) | ||||||
|      add_subdirectory(dedicated_room) |      add_subdirectory(dedicated_room) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| if (YUZU_TESTS) | if (YUZU_TESTS) | ||||||
|     add_subdirectory(tests) |     add_subdirectory(tests) | ||||||
|   | |||||||
| @@ -187,11 +187,7 @@ add_library(audio_core STATIC | |||||||
|     renderer/voice/voice_info.cpp |     renderer/voice/voice_info.cpp | ||||||
|     renderer/voice/voice_info.h |     renderer/voice/voice_info.h | ||||||
|     renderer/voice/voice_state.h |     renderer/voice/voice_state.h | ||||||
|     sink/cubeb_sink.cpp |  | ||||||
|     sink/cubeb_sink.h |  | ||||||
|     sink/null_sink.h |     sink/null_sink.h | ||||||
|     sink/sdl2_sink.cpp |  | ||||||
|     sink/sdl2_sink.h |  | ||||||
|     sink/sink.h |     sink/sink.h | ||||||
|     sink/sink_details.cpp |     sink/sink_details.cpp | ||||||
|     sink/sink_details.h |     sink/sink_details.h | ||||||
| @@ -223,10 +219,21 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | |||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (ENABLE_CUBEB) | if (ENABLE_CUBEB) | ||||||
|  |     target_sources(audio_core PRIVATE | ||||||
|  |         sink/cubeb_sink.cpp | ||||||
|  |         sink/cubeb_sink.h | ||||||
|  |     ) | ||||||
|  |  | ||||||
|     target_link_libraries(audio_core PRIVATE cubeb::cubeb) |     target_link_libraries(audio_core PRIVATE cubeb::cubeb) | ||||||
|     target_compile_definitions(audio_core PRIVATE -DHAVE_CUBEB=1) |     target_compile_definitions(audio_core PRIVATE -DHAVE_CUBEB=1) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if (ENABLE_SDL2) | if (ENABLE_SDL2) | ||||||
|  |     target_sources(audio_core PRIVATE | ||||||
|  |         sink/sdl2_sink.cpp | ||||||
|  |         sink/sdl2_sink.h | ||||||
|  |     ) | ||||||
|  |  | ||||||
|     target_link_libraries(audio_core PRIVATE SDL2::SDL2) |     target_link_libraries(audio_core PRIVATE SDL2::SDL2) | ||||||
|     target_compile_definitions(audio_core PRIVATE HAVE_SDL2) |     target_compile_definitions(audio_core PRIVATE HAVE_SDL2) | ||||||
| endif() | endif() | ||||||
|   | |||||||
| @@ -4,14 +4,10 @@ | |||||||
| add_library(input_common STATIC | add_library(input_common STATIC | ||||||
|     drivers/camera.cpp |     drivers/camera.cpp | ||||||
|     drivers/camera.h |     drivers/camera.h | ||||||
|     drivers/gc_adapter.cpp |  | ||||||
|     drivers/gc_adapter.h |  | ||||||
|     drivers/keyboard.cpp |     drivers/keyboard.cpp | ||||||
|     drivers/keyboard.h |     drivers/keyboard.h | ||||||
|     drivers/mouse.cpp |     drivers/mouse.cpp | ||||||
|     drivers/mouse.h |     drivers/mouse.h | ||||||
|     drivers/sdl_driver.cpp |  | ||||||
|     drivers/sdl_driver.h |  | ||||||
|     drivers/tas_input.cpp |     drivers/tas_input.cpp | ||||||
|     drivers/tas_input.h |     drivers/tas_input.h | ||||||
|     drivers/touch_screen.cpp |     drivers/touch_screen.cpp | ||||||
| @@ -62,8 +58,17 @@ if (ENABLE_SDL2) | |||||||
|     target_compile_definitions(input_common PRIVATE HAVE_SDL2) |     target_compile_definitions(input_common PRIVATE HAVE_SDL2) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | if (ENABLE_LIBUSB) | ||||||
|  |     target_sources(input_common PRIVATE | ||||||
|  |         drivers/gc_adapter.cpp | ||||||
|  |         drivers/gc_adapter.h | ||||||
|  |     ) | ||||||
|  |     target_link_libraries(input_common PRIVATE libusb::usb) | ||||||
|  |     target_compile_definitions(input_common PRIVATE HAVE_LIBUSB) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| create_target_directory_groups(input_common) | create_target_directory_groups(input_common) | ||||||
| target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost libusb::usb) | target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost) | ||||||
|  |  | ||||||
| if (YUZU_USE_PRECOMPILED_HEADERS) | if (YUZU_USE_PRECOMPILED_HEADERS) | ||||||
|     target_precompile_headers(input_common PRIVATE precompiled_headers.h) |     target_precompile_headers(input_common PRIVATE precompiled_headers.h) | ||||||
|   | |||||||
| @@ -5,7 +5,6 @@ | |||||||
| #include "common/input.h" | #include "common/input.h" | ||||||
| #include "common/param_package.h" | #include "common/param_package.h" | ||||||
| #include "input_common/drivers/camera.h" | #include "input_common/drivers/camera.h" | ||||||
| #include "input_common/drivers/gc_adapter.h" |  | ||||||
| #include "input_common/drivers/keyboard.h" | #include "input_common/drivers/keyboard.h" | ||||||
| #include "input_common/drivers/mouse.h" | #include "input_common/drivers/mouse.h" | ||||||
| #include "input_common/drivers/tas_input.h" | #include "input_common/drivers/tas_input.h" | ||||||
| @@ -19,6 +18,10 @@ | |||||||
| #include "input_common/input_mapping.h" | #include "input_common/input_mapping.h" | ||||||
| #include "input_common/input_poller.h" | #include "input_common/input_poller.h" | ||||||
| #include "input_common/main.h" | #include "input_common/main.h" | ||||||
|  |  | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|  | #include "input_common/drivers/gc_adapter.h" | ||||||
|  | #endif | ||||||
| #ifdef HAVE_SDL2 | #ifdef HAVE_SDL2 | ||||||
| #include "input_common/drivers/sdl_driver.h" | #include "input_common/drivers/sdl_driver.h" | ||||||
| #endif | #endif | ||||||
| @@ -45,7 +48,9 @@ struct InputSubsystem::Impl { | |||||||
|         RegisterEngine("keyboard", keyboard); |         RegisterEngine("keyboard", keyboard); | ||||||
|         RegisterEngine("mouse", mouse); |         RegisterEngine("mouse", mouse); | ||||||
|         RegisterEngine("touch", touch_screen); |         RegisterEngine("touch", touch_screen); | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         RegisterEngine("gcpad", gcadapter); |         RegisterEngine("gcpad", gcadapter); | ||||||
|  | #endif | ||||||
|         RegisterEngine("cemuhookudp", udp_client); |         RegisterEngine("cemuhookudp", udp_client); | ||||||
|         RegisterEngine("tas", tas_input); |         RegisterEngine("tas", tas_input); | ||||||
|         RegisterEngine("camera", camera); |         RegisterEngine("camera", camera); | ||||||
| @@ -72,7 +77,9 @@ struct InputSubsystem::Impl { | |||||||
|         UnregisterEngine(keyboard); |         UnregisterEngine(keyboard); | ||||||
|         UnregisterEngine(mouse); |         UnregisterEngine(mouse); | ||||||
|         UnregisterEngine(touch_screen); |         UnregisterEngine(touch_screen); | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         UnregisterEngine(gcadapter); |         UnregisterEngine(gcadapter); | ||||||
|  | #endif | ||||||
|         UnregisterEngine(udp_client); |         UnregisterEngine(udp_client); | ||||||
|         UnregisterEngine(tas_input); |         UnregisterEngine(tas_input); | ||||||
|         UnregisterEngine(camera); |         UnregisterEngine(camera); | ||||||
| @@ -95,8 +102,10 @@ struct InputSubsystem::Impl { | |||||||
|         devices.insert(devices.end(), keyboard_devices.begin(), keyboard_devices.end()); |         devices.insert(devices.end(), keyboard_devices.begin(), keyboard_devices.end()); | ||||||
|         auto mouse_devices = mouse->GetInputDevices(); |         auto mouse_devices = mouse->GetInputDevices(); | ||||||
|         devices.insert(devices.end(), mouse_devices.begin(), mouse_devices.end()); |         devices.insert(devices.end(), mouse_devices.begin(), mouse_devices.end()); | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         auto gcadapter_devices = gcadapter->GetInputDevices(); |         auto gcadapter_devices = gcadapter->GetInputDevices(); | ||||||
|         devices.insert(devices.end(), gcadapter_devices.begin(), gcadapter_devices.end()); |         devices.insert(devices.end(), gcadapter_devices.begin(), gcadapter_devices.end()); | ||||||
|  | #endif | ||||||
|         auto udp_devices = udp_client->GetInputDevices(); |         auto udp_devices = udp_client->GetInputDevices(); | ||||||
|         devices.insert(devices.end(), udp_devices.begin(), udp_devices.end()); |         devices.insert(devices.end(), udp_devices.begin(), udp_devices.end()); | ||||||
| #ifdef HAVE_SDL2 | #ifdef HAVE_SDL2 | ||||||
| @@ -119,9 +128,11 @@ struct InputSubsystem::Impl { | |||||||
|         if (engine == mouse->GetEngineName()) { |         if (engine == mouse->GetEngineName()) { | ||||||
|             return mouse; |             return mouse; | ||||||
|         } |         } | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         if (engine == gcadapter->GetEngineName()) { |         if (engine == gcadapter->GetEngineName()) { | ||||||
|             return gcadapter; |             return gcadapter; | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|         if (engine == udp_client->GetEngineName()) { |         if (engine == udp_client->GetEngineName()) { | ||||||
|             return udp_client; |             return udp_client; | ||||||
|         } |         } | ||||||
| @@ -194,9 +205,11 @@ struct InputSubsystem::Impl { | |||||||
|         if (engine == mouse->GetEngineName()) { |         if (engine == mouse->GetEngineName()) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         if (engine == gcadapter->GetEngineName()) { |         if (engine == gcadapter->GetEngineName()) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|         if (engine == udp_client->GetEngineName()) { |         if (engine == udp_client->GetEngineName()) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
| @@ -217,7 +230,9 @@ struct InputSubsystem::Impl { | |||||||
|     void BeginConfiguration() { |     void BeginConfiguration() { | ||||||
|         keyboard->BeginConfiguration(); |         keyboard->BeginConfiguration(); | ||||||
|         mouse->BeginConfiguration(); |         mouse->BeginConfiguration(); | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         gcadapter->BeginConfiguration(); |         gcadapter->BeginConfiguration(); | ||||||
|  | #endif | ||||||
|         udp_client->BeginConfiguration(); |         udp_client->BeginConfiguration(); | ||||||
| #ifdef HAVE_SDL2 | #ifdef HAVE_SDL2 | ||||||
|         sdl->BeginConfiguration(); |         sdl->BeginConfiguration(); | ||||||
| @@ -227,7 +242,9 @@ struct InputSubsystem::Impl { | |||||||
|     void EndConfiguration() { |     void EndConfiguration() { | ||||||
|         keyboard->EndConfiguration(); |         keyboard->EndConfiguration(); | ||||||
|         mouse->EndConfiguration(); |         mouse->EndConfiguration(); | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|         gcadapter->EndConfiguration(); |         gcadapter->EndConfiguration(); | ||||||
|  | #endif | ||||||
|         udp_client->EndConfiguration(); |         udp_client->EndConfiguration(); | ||||||
| #ifdef HAVE_SDL2 | #ifdef HAVE_SDL2 | ||||||
|         sdl->EndConfiguration(); |         sdl->EndConfiguration(); | ||||||
| @@ -248,7 +265,6 @@ struct InputSubsystem::Impl { | |||||||
|  |  | ||||||
|     std::shared_ptr<Keyboard> keyboard; |     std::shared_ptr<Keyboard> keyboard; | ||||||
|     std::shared_ptr<Mouse> mouse; |     std::shared_ptr<Mouse> mouse; | ||||||
|     std::shared_ptr<GCAdapter> gcadapter; |  | ||||||
|     std::shared_ptr<TouchScreen> touch_screen; |     std::shared_ptr<TouchScreen> touch_screen; | ||||||
|     std::shared_ptr<TasInput::Tas> tas_input; |     std::shared_ptr<TasInput::Tas> tas_input; | ||||||
|     std::shared_ptr<CemuhookUDP::UDPClient> udp_client; |     std::shared_ptr<CemuhookUDP::UDPClient> udp_client; | ||||||
| @@ -256,6 +272,10 @@ struct InputSubsystem::Impl { | |||||||
|     std::shared_ptr<VirtualAmiibo> virtual_amiibo; |     std::shared_ptr<VirtualAmiibo> virtual_amiibo; | ||||||
|     std::shared_ptr<VirtualGamepad> virtual_gamepad; |     std::shared_ptr<VirtualGamepad> virtual_gamepad; | ||||||
|  |  | ||||||
|  | #ifdef HAVE_LIBUSB | ||||||
|  |     std::shared_ptr<GCAdapter> gcadapter; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef HAVE_SDL2 | #ifdef HAVE_SDL2 | ||||||
|     std::shared_ptr<SDLDriver> sdl; |     std::shared_ptr<SDLDriver> sdl; | ||||||
| #endif | #endif | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user