diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b6dc9c40..a52c4f66a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ CMAKE_DEPENDENT_OPTION(ENABLE_TESTS "Enable generating tests executable" ON "NOT CMAKE_DEPENDENT_OPTION(ENABLE_DEDICATED_ROOM "Enable generating dedicated room executable" ON "NOT ANDROID AND NOT IOS" OFF) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) +option(ENABLE_SCRIPTING "Enable RPC server for scripting" ON) CMAKE_DEPENDENT_OPTION(ENABLE_CUBEB "Enables the cubeb audio backend" ON "NOT IOS" OFF) option(ENABLE_OPENAL "Enables the OpenAL audio backend" ON) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 1927d2ef6..38038af1d 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -173,37 +173,38 @@ endif() add_library(json-headers INTERFACE) target_include_directories(json-headers INTERFACE ./json) +# OpenSSL +if (USE_SYSTEM_OPENSSL) + find_package(OpenSSL 1.1) + if (OPENSSL_FOUND) + set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) + endif() +endif() + +if (NOT OPENSSL_FOUND) + # LibreSSL + set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") + set(OPENSSLDIR "/etc/ssl/") + add_subdirectory(libressl EXCLUDE_FROM_ALL) + target_include_directories(ssl INTERFACE ./libressl/include) + target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) + get_directory_property(OPENSSL_LIBRARIES + DIRECTORY libressl + DEFINITION OPENSSL_LIBS) +endif() + +# httplib +add_library(httplib INTERFACE) +target_include_directories(httplib INTERFACE ./httplib) +target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT) +target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES}) + +if(ANDROID) + add_subdirectory(android-ifaddrs) +endif() + +# cpp-jwt if (ENABLE_WEB_SERVICE) - if (USE_SYSTEM_OPENSSL) - find_package(OpenSSL 1.1) - if (OPENSSL_FOUND) - set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) - endif() - endif() - - if (NOT OPENSSL_FOUND) - # LibreSSL - set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") - set(OPENSSLDIR "/etc/ssl/") - add_subdirectory(libressl EXCLUDE_FROM_ALL) - target_include_directories(ssl INTERFACE ./libressl/include) - target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) - get_directory_property(OPENSSL_LIBRARIES - DIRECTORY libressl - DEFINITION OPENSSL_LIBS) - endif() - - if(ANDROID) - add_subdirectory(android-ifaddrs) - endif() - - # httplib - add_library(httplib INTERFACE) - target_include_directories(httplib INTERFACE ./httplib) - target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT) - target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES}) - - # cpp-jwt add_library(cpp-jwt INTERFACE) target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include) target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 4961e17e5..5ac61ce23 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -461,14 +461,6 @@ add_library(citra_core STATIC perf_stats.cpp perf_stats.h precompiled_headers.h - rpc/packet.cpp - rpc/packet.h - rpc/rpc_server.cpp - rpc/rpc_server.h - rpc/server.cpp - rpc/server.h - rpc/udp_server.cpp - rpc/udp_server.h savestate.cpp savestate.h system_titles.cpp @@ -495,6 +487,20 @@ if (ENABLE_WEB_SERVICE) endif() endif() +if (ENABLE_SCRIPTING) + target_compile_definitions(citra_core PRIVATE -DENABLE_SCRIPTING) + target_sources(citra_core PRIVATE + rpc/packet.cpp + rpc/packet.h + rpc/rpc_server.cpp + rpc/rpc_server.h + rpc/server.cpp + rpc/server.h + rpc/udp_server.cpp + rpc/udp_server.h + ) +endif() + if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) target_sources(citra_core PRIVATE arm/dynarmic/arm_dynarmic.cpp diff --git a/src/core/core.cpp b/src/core/core.cpp index 97f71d7d6..de239fe21 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -45,7 +45,9 @@ #include "core/hw/lcd.h" #include "core/loader/loader.h" #include "core/movie.h" +#ifdef ENABLE_SCRIPTING #include "core/rpc/server.h" +#endif #include "core/telemetry_session.h" #include "network/network.h" #include "video_core/custom_textures/custom_tex_manager.h" @@ -418,7 +420,9 @@ System::ResultStatus System::Init(Frontend::EmuWindow& emu_window, telemetry_session = std::make_unique(); +#ifdef ENABLE_SCRIPTING rpc_server = std::make_unique(*this); +#endif service_manager = std::make_unique(*this); archive_manager = std::make_unique(*this); @@ -555,7 +559,9 @@ void System::Shutdown(bool is_deserializing) { } custom_tex_manager.reset(); telemetry_session.reset(); +#ifdef ENABLE_SCRIPTING rpc_server.reset(); +#endif archive_manager.reset(); service_manager.reset(); dsp_core.reset(); diff --git a/src/core/core.h b/src/core/core.h index 4c401b736..ae3310ca7 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -405,8 +405,10 @@ private: /// Image interface std::shared_ptr registered_image_interface; +#ifdef ENABLE_SCRIPTING /// RPC Server for scripting support std::unique_ptr rpc_server; +#endif std::unique_ptr archive_manager;