diff --git a/.github/workflows/Qt_Build.yml b/.github/workflows/Qt_Build.yml index d3078a6a..9b0d64bf 100644 --- a/.github/workflows/Qt_Build.yml +++ b/.github/workflows/Qt_Build.yml @@ -19,6 +19,12 @@ jobs: - name: Fetch submodules run: git submodule update --init --recursive + - name: Setup Qt + uses: jurplel/install-qt-action@v3 + with: + arch: win64_msvc2019_64 + version: 6.2.0 + - name: Setup Vulkan SDK uses: humbletim/setup-vulkan-sdk@v1.2.0 with: diff --git a/CMakeLists.txt b/CMakeLists.txt index 89565045..332f7c5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,6 @@ option(ENABLE_HTTP_SERVER "Enable HTTP server. Used for Discord bot support" OFF option(ENABLE_DISCORD_RPC "Compile with Discord RPC support (disabled by default)" ON) option(ENABLE_LUAJIT "Enable scripting with the Lua programming language" ON) option(ENABLE_QT_GUI "Enable the Qt GUI. If not selected then the emulator uses a minimal SDL-based UI instead" OFF) -option(USE_SYSTEM_QT "Use your own version of Qt instead of automatically downloading one" OFF) include_directories(${PROJECT_SOURCE_DIR}/include/) include_directories(${PROJECT_SOURCE_DIR}/include/kernel) @@ -65,12 +64,6 @@ if(ENABLE_DISCORD_RPC AND NOT ANDROID) endif() if (ENABLE_QT_GUI) - if (NOT USE_SYSTEM_QT) - # Shout-out to whoever made this - include(third_party/CMakeModules/install_qt.cmake) - download_qt(6.2.0) - endif() - find_package(Qt6 REQUIRED COMPONENTS Widgets) # We can't use qt_standard_project_setup since it's Qt 6.3+ and we don't need to set the minimum that high @@ -380,8 +373,10 @@ if(ENABLE_VULKAN) endif() if(ENABLE_QT_GUI) - target_compile_definitions(Alber PUBLIC "PANDA3DS_ENABLE_QT=1") + target_compile_definitions(Alber PUBLIC "PANDA3DS_FRONTEND_QT=1") target_link_libraries(Alber PRIVATE Qt6::Widgets) +else() + target_compile_definitions(Alber PUBLIC "PANDA3DS_FRONTEND_SDL=1") endif() if(GPU_DEBUG_INFO) diff --git a/src/main.cpp b/src/main.cpp index 646b8cb7..19badf12 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,14 @@ #include "emulator.hpp" +#ifdef PANDA3DS_FRONTEND_QT +#include +#endif int main(int argc, char *argv[]) { Emulator emu; +#ifdef PANDA3DS_FRONTEND_QT + QApplication app(argc, argv); + return app.exec(); +#endif emu.initGraphicsContext(); @@ -16,4 +23,4 @@ int main(int argc, char *argv[]) { } emu.run(); -} \ No newline at end of file +} \ No newline at end of file diff --git a/third_party/CMakeModules/install_qt.cmake b/third_party/CMakeModules/install_qt.cmake deleted file mode 100644 index 93cd3fe4..00000000 --- a/third_party/CMakeModules/install_qt.cmake +++ /dev/null @@ -1,135 +0,0 @@ -# Adapted from https://github.com/citra-emu/citra/blob/master/CMakeModules/DownloadExternals.cmake - -# This function downloads Qt using aqt. The path of the downloaded content will be added to the CMAKE_PREFIX_PATH. -# Params: -# target: Qt dependency to install. Specify a version number to download Qt, or "tools_(name)" for a specific build tool. -function(download_qt target) - # Detect architecture to find which Qt version to fetch - if (CMAKE_OSX_ARCHITECTURES) - set(ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}") - elseif (MSVC) - detect_architecture("_M_AMD64" x86_64) - detect_architecture("_M_IX86" x86) - detect_architecture("_M_ARM" arm) - detect_architecture("_M_ARM64" arm64) - else() - detect_architecture("__x86_64__" x86_64) - detect_architecture("__i386__" x86) - detect_architecture("__arm__" arm) - detect_architecture("__aarch64__" arm64) - endif() - message(STATUS "Qt Downloader: Detected target architecture: ${ARCHITECTURE}") - - if (target MATCHES "tools_.*") - set(DOWNLOAD_QT_TOOL ON) - else() - set(DOWNLOAD_QT_TOOL OFF) - endif() - - # Determine installation parameters for OS, architecture, and compiler - if (WIN32) - set(host "windows") - set(type "desktop") - if (NOT DOWNLOAD_QT_TOOL) - if (MINGW) - set(arch "win64_mingw") - set(arch_path "mingw_64") - elseif (MSVC) - if ("arm64" IN_LIST ARCHITECTURE) - set(arch_path "msvc2019_arm64") - elseif ("x86_64" IN_LIST ARCHITECTURE) - set(arch_path "msvc2019_64") - else() - message(FATAL_ERROR "Unsupported bundled Qt architecture. Enable USE_SYSTEM_QT and provide your own.") - endif() - set(arch "win64_${arch_path}") - else() - message(FATAL_ERROR "Unsupported bundled Qt toolchain. Enable USE_SYSTEM_QT and provide your own.") - endif() - endif() - elseif (APPLE) - set(host "mac") - if (IOS AND NOT DOWNLOAD_QT_TOOL) - set(type "ios") - set(arch "ios") - set(arch_path "ios") - set(host_arch_path "macos") - else() - set(type "desktop") - set(arch "clang_64") - set(arch_path "macos") - endif() - else() - set(host "linux") - set(type "desktop") - set(arch "gcc_64") - set(arch_path "linux") - endif() - - get_external_prefix(qt base_path) - file(MAKE_DIRECTORY "${base_path}") - - if (DOWNLOAD_QT_TOOL) - set(prefix "${base_path}/Tools") - set(install_args install-tool --outputdir ${base_path} ${host} desktop ${target}) - else() - set(prefix "${base_path}/${target}/${arch_path}") - if (host_arch_path) - set(host_flag "--autodesktop") - set(host_prefix "${base_path}/${target}/${host_arch_path}") - endif() - set(install_args install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} ${host_flag} - -m qtmultimedia --archives qttranslations qttools qtsvg qtbase) - endif() - - if (NOT EXISTS "${prefix}") - message(STATUS "Downloading binaries for Qt...") - if (WIN32) - set(aqt_path "${base_path}/aqt.exe") - file(DOWNLOAD - https://github.com/miurahr/aqtinstall/releases/download/v3.1.7/aqt.exe - ${aqt_path} SHOW_PROGRESS) - execute_process(COMMAND ${aqt_path} ${install_args} - WORKING_DIRECTORY ${base_path}) - else() - # aqt does not offer binary releases for other platforms, so download and run from pip. - set(aqt_install_path "${base_path}/aqt") - file(MAKE_DIRECTORY "${aqt_install_path}") - - execute_process(COMMAND python3 -m pip install --target=${aqt_install_path} aqtinstall - WORKING_DIRECTORY ${base_path}) - execute_process(COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${aqt_install_path} python3 -m aqt ${install_args} - WORKING_DIRECTORY ${base_path}) - endif() - endif() - - message(STATUS "Using downloaded Qt binaries at ${prefix}") - - # Add the Qt prefix path so CMake can locate it. - list(APPEND CMAKE_PREFIX_PATH "${prefix}") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) - - if (DEFINED host_prefix) - message(STATUS "Using downloaded host Qt binaries at ${host_prefix}") - set(QT_HOST_PATH "${host_prefix}" CACHE STRING "") - endif() -endfunction() - -function(get_external_prefix lib_name prefix_var) - set(${prefix_var} "${CMAKE_BINARY_DIR}/externals/${lib_name}" PARENT_SCOPE) -endfunction() - -function(detect_architecture symbol arch) - include(CheckSymbolExists) - if (NOT DEFINED ARCHITECTURE) - set(CMAKE_REQUIRED_QUIET 1) - check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch}) - unset(CMAKE_REQUIRED_QUIET) - - # The output variable needs to be unique across invocations otherwise - # CMake's crazy scope rules will keep it defined - if (ARCHITECTURE_${arch}) - set(ARCHITECTURE "${arch}" PARENT_SCOPE) - endif() - endif() -endfunction() \ No newline at end of file