Finish Linux x86_64 build
@ -1,93 +0,0 @@
|
||||
[submodule "boost"]
|
||||
path = externals/boost
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "nihstro"]
|
||||
path = externals/nihstro
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "soundtouch"]
|
||||
path = externals/soundtouch
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "catch2"]
|
||||
path = externals/catch2
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "dynarmic"]
|
||||
path = externals/dynarmic
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "xbyak"]
|
||||
path = externals/xbyak
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "fmt"]
|
||||
path = externals/fmt
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "enet"]
|
||||
path = externals/enet
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "inih"]
|
||||
path = externals/inih/inih
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libressl"]
|
||||
path = externals/libressl
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libusb"]
|
||||
path = externals/libusb/libusb
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cubeb"]
|
||||
path = externals/cubeb
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "discord-rpc"]
|
||||
path = externals/discord-rpc
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cpp-jwt"]
|
||||
path = externals/cpp-jwt
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "teakra"]
|
||||
path = externals/teakra
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "lodepng"]
|
||||
path = externals/lodepng/lodepng
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "zstd"]
|
||||
path = externals/zstd
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libyuv"]
|
||||
path = externals/libyuv
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "sdl2"]
|
||||
path = externals/sdl2/SDL
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cryptopp-cmake"]
|
||||
path = externals/cryptopp-cmake
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cryptopp"]
|
||||
path = externals/cryptopp
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "dds-ktx"]
|
||||
path = externals/dds-ktx
|
||||
url = https://github.com/septag/dds-ktx
|
||||
[submodule "openal-soft"]
|
||||
path = externals/openal-soft
|
||||
url = https://github.com/kcat/openal-soft
|
||||
[submodule "glslang"]
|
||||
path = externals/glslang
|
||||
url = https://github.com/KhronosGroup/glslang
|
||||
[submodule "vma"]
|
||||
path = externals/vma
|
||||
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
|
||||
[submodule "vulkan-headers"]
|
||||
path = externals/vulkan-headers
|
||||
url = https://github.com/KhronosGroup/Vulkan-Headers
|
||||
[submodule "sirit"]
|
||||
path = externals/sirit
|
||||
url = https://github.com/PabloMK7/sirit
|
||||
[submodule "faad2"]
|
||||
path = externals/faad2/faad2
|
||||
url = https://github.com/knik0/faad2
|
||||
[submodule "library-headers"]
|
||||
path = externals/library-headers
|
||||
url = https://github.com/PabloMK7/ext-library-headers.git
|
||||
[submodule "libadrenotools"]
|
||||
path = externals/libadrenotools
|
||||
url = https://github.com/bylaws/libadrenotools
|
||||
[submodule "oaknut"]
|
||||
path = externals/oaknut
|
||||
url = https://github.com/merryhime/oaknut.git
|
||||
@ -1,93 +0,0 @@
|
||||
[submodule "boost"]
|
||||
path = externals/boost
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "nihstro"]
|
||||
path = externals/nihstro
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "soundtouch"]
|
||||
path = externals/soundtouch
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "catch2"]
|
||||
path = externals/catch2
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "dynarmic"]
|
||||
path = externals/dynarmic
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "xbyak"]
|
||||
path = externals/xbyak
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "fmt"]
|
||||
path = externals/fmt
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "enet"]
|
||||
path = externals/enet
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "inih"]
|
||||
path = externals/inih/inih
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libressl"]
|
||||
path = externals/libressl
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libusb"]
|
||||
path = externals/libusb/libusb
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cubeb"]
|
||||
path = externals/cubeb
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "discord-rpc"]
|
||||
path = externals/discord-rpc
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cpp-jwt"]
|
||||
path = externals/cpp-jwt
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "teakra"]
|
||||
path = externals/teakra
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "lodepng"]
|
||||
path = externals/lodepng/lodepng
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "zstd"]
|
||||
path = externals/zstd
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libyuv"]
|
||||
path = externals/libyuv
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "sdl2"]
|
||||
path = externals/sdl2/SDL
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cryptopp-cmake"]
|
||||
path = externals/cryptopp-cmake
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "cryptopp"]
|
||||
path = externals/cryptopp
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "dds-ktx"]
|
||||
path = externals/dds-ktx
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "openal-soft"]
|
||||
path = externals/openal-soft
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "glslang"]
|
||||
path = externals/glslang
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "vma"]
|
||||
path = externals/vma
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "vulkan-headers"]
|
||||
path = externals/vulkan-headers
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "sirit"]
|
||||
path = externals/sirit
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "faad2"]
|
||||
path = externals/faad2/faad2
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "library-headers"]
|
||||
path = externals/library-headers
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "libadrenotools"]
|
||||
path = externals/libadrenotools
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
[submodule "oaknut"]
|
||||
path = externals/oaknut
|
||||
url = http://rocky.hifuu.ink:3000/gh0s7/Lucina3DS
|
||||
3345
.history/src/lucina3ds_qt/main_20250209230836.cpp
Normal file
3345
.history/src/lucina3ds_qt/main_20250209233216.cpp
Normal file
3345
.history/src/lucina3ds_qt/main_20250209233407.cpp
Normal file
3346
.history/src/lucina3ds_qt/main_20250209234822.cpp
Normal file
3348
.history/src/lucina3ds_qt/main_20250209234858.cpp
Normal file
3348
.history/src/lucina3ds_qt/main_20250209235145.cpp
Normal file
@ -15,7 +15,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modul
|
||||
include(DownloadExternals)
|
||||
include(CMakeDependentOption)
|
||||
|
||||
project(citra LANGUAGES C CXX ASM)
|
||||
project(Lucina3DS LANGUAGES C CXX ASM)
|
||||
|
||||
# Some submodules like to pick their own default build type if not specified.
|
||||
# Make sure we default to Release build type always, unless the generator has custom types.
|
||||
@ -88,12 +88,12 @@ option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
|
||||
# Compile options
|
||||
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF)
|
||||
option(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
|
||||
option(CITRA_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
|
||||
option(CITRA_WARNINGS_AS_ERRORS "Enable warnings as errors" ON)
|
||||
option(LUCINA3DS_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
|
||||
option(LUCINA3DS_WARNINGS_AS_ERRORS "Enable warnings as errors" ON)
|
||||
|
||||
include(CitraHandleSystemLibs)
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
message(STATUS "Using Precompiled Headers.")
|
||||
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
|
||||
|
||||
@ -434,11 +434,11 @@ add_subdirectory(src)
|
||||
add_subdirectory(dist/installer)
|
||||
|
||||
|
||||
# Set citra-qt project or citra project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
||||
# Set lucina3ds-qt project or lucina3ds project as default StartUp Project in Visual Studio depending on whether QT is enabled or not
|
||||
if(ENABLE_QT)
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT citra-qt)
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT lucina3ds-qt)
|
||||
else()
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT citra)
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT lucina3ds)
|
||||
endif()
|
||||
|
||||
# Create target for outputting distributable bundles.
|
||||
@ -446,13 +446,13 @@ endif()
|
||||
if (NOT ANDROID AND NOT IOS)
|
||||
include(BundleTarget)
|
||||
if (ENABLE_SDL2_FRONTEND)
|
||||
bundle_target(citra)
|
||||
bundle_target(lucina3ds)
|
||||
endif()
|
||||
if (ENABLE_QT)
|
||||
bundle_target(citra-qt)
|
||||
bundle_target(lucina3ds-qt)
|
||||
endif()
|
||||
if (ENABLE_DEDICATED_ROOM)
|
||||
bundle_target(citra-room)
|
||||
bundle_target(lucina3ds-room)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -464,22 +464,22 @@ endif()
|
||||
# http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
|
||||
# http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
|
||||
if(ENABLE_QT AND UNIX AND NOT APPLE)
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra-qt.desktop"
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/lucina3ds-qt.desktop"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications")
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra.svg"
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/lucina3ds.svg"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps")
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra.xml"
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/lucina3ds.xml"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/mime/packages")
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
if(ENABLE_SDL2)
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra.6"
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/lucina3ds.6"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man6")
|
||||
endif()
|
||||
|
||||
if (ENABLE_QT)
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/citra-qt.6"
|
||||
install(FILES "${PROJECT_SOURCE_DIR}/dist/lucina3ds-qt.6"
|
||||
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man6")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -1 +0,0 @@
|
||||
**The Contributor's Guide has moved to [the wiki](https://github.com/citra-emu/citra/wiki/Contributing).**
|
||||
2
Doxyfile
@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||
# title of most generated pages and in a few other places.
|
||||
# The default value is: My Project.
|
||||
|
||||
PROJECT_NAME = Citra
|
||||
PROJECT_NAME = Lucina3DS
|
||||
|
||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
|
||||
BIN
dist/Lucina3DS.png
vendored
Normal file
|
After Width: | Height: | Size: 22 KiB |
10
dist/citra-room.desktop
vendored
@ -1,10 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Citra Room
|
||||
Comment=Multiplayer room host for Citra
|
||||
Icon=citra
|
||||
TryExec=citra-room
|
||||
Exec=citra-room %f
|
||||
Categories=Game;Emulator;
|
||||
Keywords=3DS;Nintendo
|
||||
BIN
dist/citra.ico
vendored
|
Before Width: | Height: | Size: 361 KiB |
2
dist/citra.svg
vendored
|
Before Width: | Height: | Size: 17 KiB |
9638
dist/compatibility_list/compatibility_list.json
vendored
BIN
dist/doc-icon.png
vendored
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
dist/icon.png
vendored
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 22 KiB |
14
dist/citra-qt.6 → dist/lucina3ds-qt.6
vendored
@ -1,22 +1,22 @@
|
||||
.Dd November 22 2016
|
||||
.Dt citra-qt 6
|
||||
.Dt lucina3ds-qt 6
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm Citra-Qt
|
||||
.Nm Lucina3DS-Qt
|
||||
.Nd Nintendo 3DS Emulator/Debugger (Qt)
|
||||
.Sh SYNOPSIS
|
||||
.Nm citra-qt
|
||||
.Nm Lucina3DS-qt
|
||||
.Op Ar file
|
||||
.Sh DESCRIPTION
|
||||
Citra is an experimental open-source Nintendo 3DS emulator/debugger.
|
||||
Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
|
||||
.Pp
|
||||
.Nm citra-qt
|
||||
.Nm lucina3ds-qt
|
||||
is the Qt implementation.
|
||||
.Sh FILES
|
||||
.Bl -tag -width Ds
|
||||
.It Pa $XDG_DATA_HOME/citra-emu
|
||||
.It Pa $XDG_DATA_HOME/lucina3ds
|
||||
Emulator storage.
|
||||
.It Pa $XDG_CONFIG_HOME/citra-emu
|
||||
.It Pa $XDG_CONFIG_HOME/lucina3ds
|
||||
Configuration files.
|
||||
.El
|
||||
.Sh AUTHORS
|
||||
@ -1,14 +1,14 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Citra
|
||||
Name=Lucina3DS
|
||||
GenericName=3DS Emulator
|
||||
GenericName[fr]=Émulateur 3DS
|
||||
Comment=Nintendo 3DS video game console emulator
|
||||
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
|
||||
Icon=citra
|
||||
TryExec=citra-qt
|
||||
Exec=citra-qt %f
|
||||
Icon=lucina3ds
|
||||
TryExec=lucina3ds-qt
|
||||
Exec=lucina3ds-qt %f
|
||||
Categories=Game;Emulator;Qt;
|
||||
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
|
||||
Keywords=3DS;Nintendo;
|
||||
10
dist/lucina3ds-room.desktop
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Lucina3DS Room
|
||||
Comment=Multiplayer room host for Lucina3DS
|
||||
Icon=lucina3ds
|
||||
TryExec=lucina3ds-room
|
||||
Exec=lucina3ds-room %f
|
||||
Categories=Game;Emulator;
|
||||
Keywords=3DS;Nintendo
|
||||
10
dist/citra.6 → dist/lucina3ds.6
vendored
@ -1,11 +1,11 @@
|
||||
.Dd September 13 2024
|
||||
.Dt citra 6
|
||||
.Dt lucina3ds 6
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm Citra
|
||||
.Nm Lucina3DS
|
||||
.Nd Nintendo 3DS Emulator/Debugger (SDL)
|
||||
.Sh SYNOPSIS
|
||||
.Nm citra
|
||||
.Nm lucina3ds
|
||||
.Op Ar options
|
||||
.Op Ar file
|
||||
.Sh OPTIONS
|
||||
@ -31,9 +31,9 @@ Shows syntax help and exits
|
||||
.It Fl v , Fl Fl version
|
||||
Describes the installed version and exits
|
||||
.Sh DESCRIPTION
|
||||
Citra is an experimental open-source Nintendo 3DS emulator/debugger.
|
||||
Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
|
||||
.Pp
|
||||
.Nm citra
|
||||
.Nm lucina3ds
|
||||
is the Simple DirectMedia Layer (SDL) implementation.
|
||||
.Sh FILES
|
||||
.Bl -tag -width Ds
|
||||
8
dist/citra.desktop → dist/lucina3ds.desktop
vendored
@ -1,14 +1,14 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Citra
|
||||
Name=Lucina3DS
|
||||
GenericName=3DS Emulator
|
||||
GenericName[fr]=Émulateur 3DS
|
||||
Comment=Nintendo 3DS video game console emulator
|
||||
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
|
||||
Icon=citra
|
||||
TryExec=citra
|
||||
Exec=citra %f
|
||||
Icon=lucina3ds
|
||||
TryExec=lucina3ds-qt
|
||||
Exec=lucina3ds-qt %f
|
||||
Categories=Game;Emulator;
|
||||
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
|
||||
Keywords=3DS;Nintendo;
|
||||
BIN
dist/lucina3ds.ico
vendored
Normal file
|
After Width: | Height: | Size: 264 KiB |
131
dist/lucina3ds.svg
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="Lucina3DS_G.svg"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
inkscape:export-filename="Lucina3DS.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="1.2753906"
|
||||
inkscape:cx="270.8974"
|
||||
inkscape:cy="256.00001"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1380"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1"><inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect12"
|
||||
is_visible="true"
|
||||
lpeversion="1" /><linearGradient
|
||||
id="linearGradient8"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#fef600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9" /><stop
|
||||
style="stop-color:#ff8803;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop10" /></linearGradient><inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect1"
|
||||
is_visible="true"
|
||||
lpeversion="1" /><inkscape:path-effect
|
||||
effect="circle_with_radius"
|
||||
id="path-effect6"
|
||||
is_visible="true"
|
||||
lpeversion="1" /><linearGradient
|
||||
id="linearGradient1"
|
||||
inkscape:collect="always"><stop
|
||||
style="stop-color:#fef600;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop1" /><stop
|
||||
style="stop-color:#ff8803;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2" /></linearGradient><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1"
|
||||
id="linearGradient2"
|
||||
x1="142.00873"
|
||||
y1="142.00873"
|
||||
x2="369.99124"
|
||||
y2="369.99124"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1264159,0,0,1.1264159,-32.362465,-32.362465)" /><inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect1-7"
|
||||
is_visible="true"
|
||||
lpeversion="1" /><inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect12-2"
|
||||
is_visible="true"
|
||||
lpeversion="1" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8"
|
||||
id="linearGradient13"
|
||||
x1="222.62624"
|
||||
y1="166.19441"
|
||||
x2="294.93878"
|
||||
y2="238.50694"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.77232939,0,0,0.77232939,58.767238,59.784916)" /></defs><g
|
||||
inkscape:label="图层 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="mix-blend-mode:normal;fill:url(#linearGradient2);fill-rule:evenodd;stroke:none;stroke-width:8.75079;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1"
|
||||
width="461.48184"
|
||||
height="461.48184"
|
||||
x="25.259001"
|
||||
y="25.259001"
|
||||
rx="20"
|
||||
ry="20" /><path
|
||||
style="display:inline;fill:#ffffff;fill-opacity:0.999969;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
|
||||
d="m 256.39204,108.98622 c 2.318,9.14731 5.47166,18.08268 9.40888,26.6585 12.86653,28.02509 34.12047,52.40001 41.5559,82.32772 3.61286,14.54182 3.68319,30.22381 -1.62595,44.23561 -2.65457,7.00589 -6.63536,13.53227 -11.82978,18.93109 -5.19442,5.39883 -11.61188,9.65255 -18.69128,12.10436 -12.47119,4.31915 -26.62823,2.79237 -38.41961,-3.1363 -7.99311,-4.01891 -15.00816,-10.00609 -20.1073,-17.3573 -5.09913,-7.35121 -8.25739,-16.05943 -8.90342,-24.98267 -0.63444,-8.76308 1.12172,-17.55976 3.90867,-25.89205 2.78695,-8.33228 6.59253,-16.27949 10.20466,-24.28865 9.26015,-20.5325 17.29654,-41.5932 25.09035,-62.72588 3.17557,-8.61046 6.3119,-17.23539 9.40888,-25.87443 z"
|
||||
id="path1"
|
||||
inkscape:path-effect="#path-effect1"
|
||||
inkscape:original-d="m 256.39204,108.98622 c 0,0 6.27259,18.29505 9.40888,26.6585 3.1363,8.36345 27.70394,55.1465 41.5559,82.32772 13.85197,27.18121 -21.43134,50.1807 -32.14701,75.27106 -10.71568,25.09035 -25.61307,-2.61358 -38.41961,-3.1363 -12.80653,-0.52271 -19.60183,-27.70393 -29.01072,-42.33997 -9.40888,-14.63604 9.40889,-33.19244 14.11333,-50.1807 4.70444,-16.98826 16.98826,-42.33997 25.09035,-62.72588 8.10209,-20.38592 9.40888,-25.87443 9.40888,-25.87443 z"
|
||||
transform="matrix(1.2947843,0,0,1.2947843,-78.054433,-75.464863)" /><path
|
||||
style="fill:url(#linearGradient13);stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
|
||||
d="m 256.39204,108.98622 c 2.318,9.14731 5.47166,18.08268 9.40888,26.6585 12.86653,28.02509 34.12047,52.40001 41.5559,82.32772 3.61286,14.54182 3.68319,30.22381 -1.62595,44.23561 -2.65457,7.00589 -6.63536,13.53227 -11.82978,18.93109 -5.19442,5.39883 -11.61188,9.65255 -18.69128,12.10436 -12.47119,4.31915 -26.62823,2.79237 -38.41961,-3.1363 -7.99311,-4.01891 -15.00816,-10.00609 -20.1073,-17.3573 -5.09913,-7.35121 -8.25739,-16.05943 -8.90342,-24.98267 -0.63444,-8.76308 1.12172,-17.55976 3.90867,-25.89205 2.78695,-8.33228 6.59253,-16.27949 10.20466,-24.28865 9.26015,-20.5325 17.29654,-41.5932 25.09035,-62.72588 3.17557,-8.61046 6.3119,-17.23539 9.40888,-25.87443 z"
|
||||
id="path1-3"
|
||||
inkscape:path-effect="#path-effect1-7"
|
||||
inkscape:original-d="m 256.39204,108.98622 c 0,0 6.27259,18.29505 9.40888,26.6585 3.1363,8.36345 27.70394,55.1465 41.5559,82.32772 13.85197,27.18121 -21.43134,50.1807 -32.14701,75.27106 -10.71568,25.09035 -25.61307,-2.61358 -38.41961,-3.1363 -12.80653,-0.52271 -19.60183,-27.70393 -29.01072,-42.33997 -9.40888,-14.63604 9.40889,-33.19244 14.11333,-50.1807 4.70444,-16.98826 16.98826,-42.33997 25.09035,-62.72588 8.10209,-20.38592 9.40888,-25.87443 9.40888,-25.87443 z"
|
||||
transform="matrix(0.80835273,0,0,0.91964574,47.345041,14.506872)" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
|
||||
d="m 79.975499,256.39204 c 5.425018,-11.9183 12.57961,-23.04766 21.169981,-32.93109 14.08853,-16.20919 31.8107,-28.86269 50.18071,-39.98775 17.11103,-10.36261 34.94011,-19.53934 53.317,-27.44257 -5.93477,20.02227 -10.39389,40.48176 -13.32925,61.15774 -2.18434,15.38592 -3.48986,31.3194 0.78407,46.26033 3.79604,13.2703 12.00304,25.20779 22.91567,33.65914 10.91263,8.45136 24.46093,13.40061 38.24207,14.16935 2.61087,0.14564 5.22986,0.14564 7.84073,0 4.27324,9.29986 4.55091,20.35688 0.74986,29.85952 -3.80105,9.50263 -11.62766,17.31794 -21.13577,21.10526 -3.25312,1.2958 -6.69776,2.13869 -10.19295,2.35222 -6.22311,0.38018 -12.4517,-1.24772 -18.08978,-3.90924 -5.63808,-2.66152 -10.74044,-6.32996 -15.62539,-10.20409 -16.20385,-12.85087 -30.67834,-28.65082 -38.4196,-47.82848 -7.45891,-18.4782 -8.24323,-39.19541 -4.70444,-58.80551 2.14912,-11.90928 5.8491,-23.53777 10.97703,-34.49924 -12.06684,6.45184 -24.08968,12.98599 -36.06738,19.60184 -16.28858,8.99695 -32.493692,18.145 -48.612561,27.44257 z"
|
||||
id="path12-1"
|
||||
inkscape:path-effect="#path-effect12-2"
|
||||
inkscape:original-d="m 79.975499,256.39204 c 0,0 14.374682,-22.47677 21.169981,-32.93109 6.79531,-10.45431 33.19245,-26.13578 50.18071,-39.98775 16.98826,-13.85196 53.317,-27.44257 53.317,-27.44257 0,0 -9.14753,41.5559 -13.32925,61.15774 -4.18173,19.60183 1.04543,30.57886 0.78407,46.26033 -0.26135,15.68147 40.24911,31.6243 61.15774,47.82849 20.90862,16.20418 7.84073,0 7.84073,0 0,0 -14.11332,33.71516 -20.38591,50.96478 -6.27259,17.24961 -6.7953,1.8295 -10.19295,2.35222 -3.39766,0.52271 -22.47678,-9.9316 -33.71517,-14.11333 -11.23838,-4.18172 -25.35171,-31.36294 -38.4196,-47.82848 -13.06789,-16.46554 -3.13629,-39.20368 -4.70444,-58.80551 -1.56815,-19.60184 10.97703,-34.49924 10.97703,-34.49924 0,0 -24.04492,13.06789 -36.06738,19.60184 -12.02246,6.53394 -48.612561,27.44257 -48.612561,27.44257 z"
|
||||
transform="matrix(-1.2947843,0,0,1.2947843,587.75426,-76.137043)" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
|
||||
d="m 79.975499,256.39204 c 5.425018,-11.9183 12.57961,-23.04766 21.169981,-32.93109 14.08853,-16.20919 31.8107,-28.86269 50.18071,-39.98775 17.11103,-10.36261 34.94011,-19.53934 53.317,-27.44257 -5.93477,20.02227 -10.39389,40.48176 -13.32925,61.15774 -2.18434,15.38592 -3.48986,31.3194 0.78407,46.26033 3.79604,13.2703 12.00304,25.20779 22.91567,33.65914 10.91263,8.45136 24.46093,13.40061 38.24207,14.16935 2.61087,0.14564 5.22986,0.14564 7.84073,0 4.27324,9.29986 4.55091,20.35688 0.74986,29.85952 -3.80105,9.50263 -11.62766,17.31794 -21.13577,21.10526 -3.25312,1.2958 -6.69776,2.13869 -10.19295,2.35222 -6.22311,0.38018 -12.4517,-1.24772 -18.08978,-3.90924 -5.63808,-2.66152 -10.74044,-6.32996 -15.62539,-10.20409 -16.20385,-12.85087 -30.67834,-28.65082 -38.4196,-47.82848 -7.45891,-18.4782 -8.24323,-39.19541 -4.70444,-58.80551 2.14912,-11.90928 5.8491,-23.53777 10.97703,-34.49924 -12.06684,6.45184 -24.08968,12.98599 -36.06738,19.60184 -16.28858,8.99695 -32.493692,18.145 -48.612561,27.44257 z"
|
||||
id="path12"
|
||||
inkscape:path-effect="#path-effect12"
|
||||
inkscape:original-d="m 79.975499,256.39204 c 0,0 14.374682,-22.47677 21.169981,-32.93109 6.79531,-10.45431 33.19245,-26.13578 50.18071,-39.98775 16.98826,-13.85196 53.317,-27.44257 53.317,-27.44257 0,0 -9.14753,41.5559 -13.32925,61.15774 -4.18173,19.60183 1.04543,30.57886 0.78407,46.26033 -0.26135,15.68147 40.24911,31.6243 61.15774,47.82849 20.90862,16.20418 7.84073,0 7.84073,0 0,0 -14.11332,33.71516 -20.38591,50.96478 -6.27259,17.24961 -6.7953,1.8295 -10.19295,2.35222 -3.39766,0.52271 -22.47678,-9.9316 -33.71517,-14.11333 -11.23838,-4.18172 -25.35171,-31.36294 -38.4196,-47.82848 -13.06789,-16.46554 -3.13629,-39.20368 -4.70444,-58.80551 -1.56815,-19.60184 10.97703,-34.49924 10.97703,-34.49924 0,0 -24.04492,13.06789 -36.06738,19.60184 -12.02246,6.53394 -48.612561,27.44257 -48.612561,27.44257 z"
|
||||
transform="matrix(1.2947843,0,0,1.2947843,-75.464865,-75.464863)" /><path
|
||||
style="fill:#ffffff;fill-opacity:0.999969;stroke-width:8.48321;stroke-linejoin:round;paint-order:fill markers stroke"
|
||||
d="m 221.43137,394.8085 34.06963,69.25714 32.93398,-71.42141 -34.06964,-27.05358 z"
|
||||
id="path13" /></g></svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
8
dist/citra.xml → dist/lucina3ds.xml
vendored
@ -4,7 +4,7 @@
|
||||
<comment>Nintendo 3DS homebrew executable</comment>
|
||||
<comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS </comment>
|
||||
<acronym>3DSX</acronym>
|
||||
<icon name="citra"/>
|
||||
<icon name="lucina3ds"/>
|
||||
<glob pattern="*.3dsx"/>
|
||||
<magic><match value="3DSX" type="string" offset="0"/></magic>
|
||||
</mime-type>
|
||||
@ -14,7 +14,7 @@
|
||||
<comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment>
|
||||
<acronym>CCI</acronym>
|
||||
<expanded-acronym>CTR Cart Image</expanded-acronym>
|
||||
<icon name="citra"/>
|
||||
<icon name="lucina3ds"/>
|
||||
<glob pattern="*.cci"/>
|
||||
<glob pattern="*.3ds"/>
|
||||
<magic><match value="NCSD" type="string" offset="256"/></magic>
|
||||
@ -25,7 +25,7 @@
|
||||
<comment xml:lang="fr">Exécutable Nintendo 3DS</comment>
|
||||
<acronym>CXI</acronym>
|
||||
<expanded-acronym>CTR eXecutable Image</expanded-acronym>
|
||||
<icon name="citra"/>
|
||||
<icon name="lucina3ds"/>
|
||||
<glob pattern="*.cxi"/>
|
||||
<magic><match value="NCCH" type="string" offset="256"/></magic>
|
||||
</mime-type>
|
||||
@ -35,7 +35,7 @@
|
||||
<comment xml:lang="fr">Archive installable Nintendo 3DS</comment>
|
||||
<acronym>CIA</acronym>
|
||||
<expanded-acronym>CTR Importable Archive</expanded-acronym>
|
||||
<icon name="citra"/>
|
||||
<icon name="lucina3ds"/>
|
||||
<glob pattern="*.cia"/>
|
||||
</mime-type>
|
||||
|
||||
2
dist/qt_themes/default/default.qrc
vendored
@ -13,7 +13,7 @@
|
||||
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
|
||||
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
|
||||
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
|
||||
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
|
||||
<file alias="256x256/lucina3ds.png">icons/256x256/lucina3ds.png</file>
|
||||
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="default">
|
||||
|
||||
BIN
dist/qt_themes/default/icons/256x256/citra.png
vendored
|
Before Width: | Height: | Size: 26 KiB |
BIN
dist/qt_themes/default/icons/256x256/lucina3ds.png
vendored
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
12
dist/scripting/citra.py
vendored
@ -11,10 +11,10 @@ class RequestType(enum.IntEnum):
|
||||
ReadMemory = 1,
|
||||
WriteMemory = 2
|
||||
|
||||
CITRA_PORT = 45987
|
||||
LUCINA3DS_PORT = 45987
|
||||
|
||||
class Citra:
|
||||
def __init__(self, address="127.0.0.1", port=CITRA_PORT):
|
||||
class Lucina3DS:
|
||||
def __init__(self, address="127.0.0.1", port=LUCINA3DS_PORT):
|
||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self.address = address
|
||||
|
||||
@ -45,7 +45,7 @@ class Citra:
|
||||
request_data = struct.pack("II", read_address, temp_read_size)
|
||||
request, request_id = self._generate_header(RequestType.ReadMemory, len(request_data))
|
||||
request += request_data
|
||||
self.socket.sendto(request, (self.address, CITRA_PORT))
|
||||
self.socket.sendto(request, (self.address, LUCINA3DS_PORT))
|
||||
|
||||
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
|
||||
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.ReadMemory)
|
||||
@ -77,7 +77,7 @@ class Citra:
|
||||
request_data += write_contents[:temp_write_size]
|
||||
request, request_id = self._generate_header(RequestType.WriteMemory, len(request_data))
|
||||
request += request_data
|
||||
self.socket.sendto(request, (self.address, CITRA_PORT))
|
||||
self.socket.sendto(request, (self.address, LUCINA3DS_PORT))
|
||||
|
||||
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
|
||||
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.WriteMemory)
|
||||
@ -92,4 +92,4 @@ class Citra:
|
||||
|
||||
if "__main__" == __name__:
|
||||
import doctest
|
||||
doctest.testmod(extraglobs={'c': Citra()})
|
||||
doctest.testmod(extraglobs={'c': LUCINA3DS()})
|
||||
|
||||
2
externals/CMakeLists.txt
vendored
@ -116,7 +116,7 @@ if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE)
|
||||
else()
|
||||
set(DYNARMIC_TESTS OFF CACHE BOOL "")
|
||||
set(DYNARMIC_FRONTENDS "A32" CACHE STRING "")
|
||||
set(DYNARMIC_USE_PRECOMPILED_HEADERS ${CITRA_USE_PRECOMPILED_HEADERS} CACHE BOOL "")
|
||||
set(DYNARMIC_USE_PRECOMPILED_HEADERS ${LUCINA3DS_USE_PRECOMPILED_HEADERS} CACHE BOOL "")
|
||||
add_subdirectory(dynarmic EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -85,14 +85,14 @@ if (MSVC)
|
||||
/wd4324 # 'struct_name': structure was padded due to __declspec(align())
|
||||
)
|
||||
|
||||
if (CITRA_WARNINGS_AS_ERRORS)
|
||||
if (LUCINA3DS_WARNINGS_AS_ERRORS)
|
||||
add_compile_options(/WX)
|
||||
endif()
|
||||
|
||||
# Since MSVC's debugging information is not very deterministic, so we have to disable it
|
||||
# when using ccache or other caching tools
|
||||
if (CMAKE_C_COMPILER_LAUNCHER STREQUAL "ccache" OR CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "ccache"
|
||||
OR CITRA_USE_PRECOMPILED_HEADERS)
|
||||
OR LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
# Precompiled headers are deleted if not using /Z7. See https://github.com/nanoant/CMakePCHCompiler/issues/21
|
||||
add_compile_options(/Z7)
|
||||
else()
|
||||
@ -120,7 +120,7 @@ else()
|
||||
add_compile_options(-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)
|
||||
endif()
|
||||
|
||||
if (CITRA_WARNINGS_AS_ERRORS)
|
||||
if (LUCINA3DS_WARNINGS_AS_ERRORS)
|
||||
add_compile_options(-Werror)
|
||||
endif()
|
||||
|
||||
@ -181,11 +181,11 @@ if (ENABLE_TESTS)
|
||||
endif()
|
||||
|
||||
if (ENABLE_SDL2 AND ENABLE_SDL2_FRONTEND)
|
||||
add_subdirectory(citra)
|
||||
add_subdirectory(lucina3ds)
|
||||
endif()
|
||||
|
||||
if (ENABLE_QT)
|
||||
add_subdirectory(citra_qt)
|
||||
add_subdirectory(lucina3ds_qt)
|
||||
endif()
|
||||
|
||||
if (ENABLE_DEDICATED_ROOM)
|
||||
@ -194,7 +194,7 @@ endif()
|
||||
|
||||
if (ANDROID)
|
||||
add_subdirectory(android/app/src/main/jni)
|
||||
target_include_directories(citra-android PRIVATE android/app/src/main)
|
||||
target_include_directories(lucina3ds-android PRIVATE android/app/src/main)
|
||||
endif()
|
||||
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
|
||||
@ -43,7 +43,7 @@ add_library(audio_core STATIC
|
||||
|
||||
create_target_directory_groups(audio_core)
|
||||
|
||||
target_link_libraries(audio_core PUBLIC citra_common citra_core)
|
||||
target_link_libraries(audio_core PUBLIC lucina3ds_common lucina3ds_core)
|
||||
target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra)
|
||||
|
||||
if(ENABLE_SDL2)
|
||||
@ -62,6 +62,6 @@ if(ENABLE_OPENAL)
|
||||
add_definitions(-DAL_LIBTYPE_STATIC)
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(audio_core PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
@ -52,7 +52,7 @@ add_custom_command(OUTPUT scm_rev.cpp
|
||||
"${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake"
|
||||
)
|
||||
|
||||
add_library(citra_common STATIC
|
||||
add_library(lucina3ds_common STATIC
|
||||
aarch64/cpu_detect.cpp
|
||||
aarch64/cpu_detect.h
|
||||
aarch64/oaknut_abi.h
|
||||
@ -151,23 +151,23 @@ add_library(citra_common STATIC
|
||||
)
|
||||
|
||||
if (UNIX AND NOT APPLE)
|
||||
target_sources(citra_common PRIVATE
|
||||
target_sources(lucina3ds_common PRIVATE
|
||||
linux/gamemode.cpp
|
||||
linux/gamemode.h
|
||||
)
|
||||
|
||||
target_link_libraries(citra_common PRIVATE gamemode)
|
||||
target_link_libraries(lucina3ds_common PRIVATE gamemode)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
target_sources(citra_common PUBLIC
|
||||
target_sources(lucina3ds_common PUBLIC
|
||||
apple_authorization.h
|
||||
apple_authorization.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(citra_common PRIVATE
|
||||
target_compile_options(lucina3ds_common PRIVATE
|
||||
/W4
|
||||
|
||||
/we4242 # 'identifier': conversion from 'type1' to 'type2', possible loss of data
|
||||
@ -175,30 +175,30 @@ if (MSVC)
|
||||
/we4800 # Implicit conversion from 'type' to bool. Possible information loss
|
||||
)
|
||||
else()
|
||||
target_compile_options(citra_common PRIVATE
|
||||
target_compile_options(lucina3ds_common PRIVATE
|
||||
$<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation>
|
||||
)
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(citra_common)
|
||||
create_target_directory_groups(lucina3ds_common)
|
||||
|
||||
target_link_libraries(citra_common PUBLIC fmt library-headers microprofile Boost::boost Boost::serialization Boost::iostreams)
|
||||
target_link_libraries(citra_common PRIVATE zstd)
|
||||
target_link_libraries(lucina3ds_common PUBLIC fmt library-headers microprofile Boost::boost Boost::serialization Boost::iostreams)
|
||||
target_link_libraries(lucina3ds_common PRIVATE zstd)
|
||||
|
||||
if ("x86_64" IN_LIST ARCHITECTURE)
|
||||
target_link_libraries(citra_common PRIVATE xbyak)
|
||||
target_link_libraries(lucina3ds_common PRIVATE xbyak)
|
||||
endif()
|
||||
|
||||
if ("arm64" IN_LIST ARCHITECTURE)
|
||||
target_link_libraries(citra_common PRIVATE oaknut)
|
||||
target_link_libraries(lucina3ds_common PRIVATE oaknut)
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(citra_common PRIVATE precompiled_headers.h)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(lucina3ds_common PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
find_library(BACKTRACE_LIBRARY backtrace)
|
||||
if (BACKTRACE_LIBRARY AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND CMAKE_CXX_COMPILER_ID STREQUAL GNU)
|
||||
target_link_libraries(citra_common PRIVATE ${BACKTRACE_LIBRARY} dl)
|
||||
target_compile_definitions(citra_common PRIVATE CITRA_LINUX_GCC_BACKTRACE)
|
||||
target_link_libraries(lucina3ds_common PRIVATE ${BACKTRACE_LIBRARY} dl)
|
||||
target_compile_definitions(lucina3ds_common PRIVATE lucina3ds_LINUX_GCC_BACKTRACE)
|
||||
endif()
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(arm64)
|
||||
#if LUCINA3DS_ARCH(arm64)
|
||||
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
|
||||
#include <boost/predef.h>
|
||||
|
||||
#define CITRA_ARCH(NAME) (CITRA_ARCH_##NAME)
|
||||
#define LUCINA3DS_ARCH(NAME) (LUCINA3DS_ARCH_##NAME)
|
||||
|
||||
#define CITRA_ARCH_x86_64 BOOST_ARCH_X86_64
|
||||
#define CITRA_ARCH_arm64 \
|
||||
#define LUCINA3DS_ARCH_x86_64 BOOST_ARCH_X86_64
|
||||
#define LUCINA3DS_ARCH_arm64 \
|
||||
(BOOST_ARCH_ARM >= BOOST_VERSION_NUMBER(8, 0, 0) && BOOST_ARCH_WORD_BITS == 64)
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#define ASSERT(_a_) \
|
||||
do \
|
||||
if (!(_a_)) [[unlikely]] { \
|
||||
[]() CITRA_NO_INLINE CITRA_NO_RETURN { \
|
||||
[]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
|
||||
LOG_CRITICAL(Debug, "Assertion Failed!"); \
|
||||
Common::Log::Stop(); \
|
||||
Crash(); \
|
||||
@ -28,7 +28,7 @@
|
||||
#define ASSERT_MSG(_a_, ...) \
|
||||
do \
|
||||
if (!(_a_)) [[unlikely]] { \
|
||||
[&]() CITRA_NO_INLINE CITRA_NO_RETURN { \
|
||||
[&]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
|
||||
LOG_CRITICAL(Debug, "Assertion Failed!\n" __VA_ARGS__); \
|
||||
Common::Log::Stop(); \
|
||||
Crash(); \
|
||||
@ -38,7 +38,7 @@
|
||||
while (0)
|
||||
|
||||
#define UNREACHABLE() \
|
||||
([]() CITRA_NO_INLINE CITRA_NO_RETURN { \
|
||||
([]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
|
||||
LOG_CRITICAL(Debug, "Unreachable code!"); \
|
||||
Common::Log::Stop(); \
|
||||
Crash(); \
|
||||
@ -46,7 +46,7 @@
|
||||
}())
|
||||
|
||||
#define UNREACHABLE_MSG(...) \
|
||||
([&]() CITRA_NO_INLINE CITRA_NO_RETURN { \
|
||||
([&]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
|
||||
LOG_CRITICAL(Debug, "Unreachable code!\n" __VA_ARGS__); \
|
||||
Common::Log::Stop(); \
|
||||
Crash(); \
|
||||
|
||||
@ -24,15 +24,15 @@
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define CITRA_NO_INLINE __declspec(noinline)
|
||||
#define LUCINA3DS_NO_INLINE __declspec(noinline)
|
||||
#else
|
||||
#define CITRA_NO_INLINE __attribute__((noinline))
|
||||
#define LUCINA3DS_NO_INLINE __attribute__((noinline))
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define CITRA_NO_RETURN __declspec(noreturn)
|
||||
#define LUCINA3DS_NO_RETURN __declspec(noreturn)
|
||||
#else
|
||||
#define CITRA_NO_RETURN __attribute__((noreturn))
|
||||
#define LUCINA3DS_NO_RETURN __attribute__((noreturn))
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
@ -18,18 +18,18 @@
|
||||
#define EMU_DATA_DIR USER_DIR
|
||||
#else
|
||||
#ifdef _WIN32
|
||||
#define EMU_DATA_DIR "Citra"
|
||||
#define EMU_DATA_DIR "Lucina3DS"
|
||||
#elif defined(__APPLE__)
|
||||
#include <TargetConditionals.h>
|
||||
#if TARGET_OS_IPHONE
|
||||
#define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Citra"
|
||||
#define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Lucina3DS"
|
||||
#else
|
||||
#define APPLE_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Citra"
|
||||
#define APPLE_EMU_DATA_DIR "Library" DIR_SEP "Application Support" DIR_SEP "Lucina3DS"
|
||||
#endif
|
||||
// For compatibility with XDG paths.
|
||||
#define EMU_DATA_DIR "citra-emu"
|
||||
#define EMU_DATA_DIR "lucina3ds"
|
||||
#else
|
||||
#define EMU_DATA_DIR "citra-emu"
|
||||
#define EMU_DATA_DIR "lucina3ds"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
|
||||
// Filenames
|
||||
// Files in the directory returned by GetUserPath(UserPath::LogDir)
|
||||
#define LOG_FILE "citra_log.txt"
|
||||
#define LOG_FILE "lucina3ds_log.txt"
|
||||
|
||||
// Files in the directory returned by GetUserPath(UserPath::ConfigDir)
|
||||
#define EMU_CONFIG "emu.ini"
|
||||
|
||||
@ -851,8 +851,8 @@ bool StringReplace(std::string& haystack, const std::string& a, const std::strin
|
||||
|
||||
std::string SerializePath(const std::string& input, bool is_saving) {
|
||||
auto result = input;
|
||||
StringReplace(result, "%CITRA_ROM_FILE%", g_currentRomPath, is_saving);
|
||||
StringReplace(result, "%CITRA_USER_DIR%", GetUserPath(UserPath::UserDir), is_saving);
|
||||
StringReplace(result, "%LUCINA3DS_ROM_FILE%", g_currentRomPath, is_saving);
|
||||
StringReplace(result, "%LUCINA3DS_USER_DIR%", GetUserPath(UserPath::UserDir), is_saving);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -182,11 +182,11 @@ void SetUserPath(const std::string& path = "");
|
||||
|
||||
void SetCurrentRomPath(const std::string& path);
|
||||
|
||||
// Returns a pointer to a string with a Citra data dir in the user's home
|
||||
// Returns a pointer to a string with a lucina3ds data dir in the user's home
|
||||
// directory. To be used in "multi-user" mode (that is, installed).
|
||||
[[nodiscard]] const std::string& GetUserPath(UserPath path);
|
||||
|
||||
// Returns a pointer to a string with the default Citra data dir in the user's home
|
||||
// Returns a pointer to a string with the default lucina3ds data dir in the user's home
|
||||
// directory.
|
||||
[[nodiscard]] const std::string& GetDefaultUserPath(UserPath path);
|
||||
|
||||
@ -266,8 +266,8 @@ public:
|
||||
IOFile();
|
||||
|
||||
// flags is used for windows specific file open mode flags, which
|
||||
// allows citra to open the logs in shared write mode, so that the file
|
||||
// isn't considered "locked" while citra is open and people can open the log file and view it
|
||||
// allows lucina3ds to open the logs in shared write mode, so that the file
|
||||
// isn't considered "locked" while lucina3ds is open and people can open the log file and view it
|
||||
IOFile(const std::string& filename, const char openmode[], int flags = 0);
|
||||
|
||||
~IOFile();
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
#define _SH_DENYWR 0
|
||||
#endif
|
||||
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
#define BOOST_STACKTRACE_USE_BACKTRACE
|
||||
#include <boost/stacktrace.hpp>
|
||||
#undef BOOST_STACKTRACE_USE_BACKTRACE
|
||||
@ -182,7 +182,7 @@ public:
|
||||
|
||||
bool initialization_in_progress_suppress_logging = true;
|
||||
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
[[noreturn]] void SleepForever() {
|
||||
while (true) {
|
||||
pause();
|
||||
@ -276,7 +276,7 @@ public:
|
||||
private:
|
||||
Impl(const std::string& file_backend_filename, const Filter& filter_)
|
||||
: filter{filter_}, file_backend{file_backend_filename} {
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
int waker_pipefd[2];
|
||||
int done_printing_pipefd[2];
|
||||
if (pipe2(waker_pipefd, O_CLOEXEC) || pipe2(done_printing_pipefd, O_CLOEXEC)) {
|
||||
@ -285,7 +285,7 @@ private:
|
||||
backtrace_thread_waker_fd = waker_pipefd[1];
|
||||
backtrace_done_printing_fd = done_printing_pipefd[0];
|
||||
std::thread([this, wait_fd = waker_pipefd[0], done_fd = done_printing_pipefd[1]] {
|
||||
Common::SetCurrentThreadName("citra:Crash");
|
||||
Common::SetCurrentThreadName("lucina3ds:Crash");
|
||||
for (u8 ignore = 0; read(wait_fd, &ignore, 1) != 1;)
|
||||
;
|
||||
const int sig = received_signal;
|
||||
@ -330,7 +330,7 @@ private:
|
||||
}
|
||||
|
||||
~Impl() {
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
if (int zero_or_ignore = 0;
|
||||
!received_signal.compare_exchange_strong(zero_or_ignore, SIGKILL)) {
|
||||
SleepForever();
|
||||
@ -340,7 +340,7 @@ private:
|
||||
|
||||
void StartBackendThread() {
|
||||
backend_thread = std::jthread([this](std::stop_token stop_token) {
|
||||
Common::SetCurrentThreadName("citra:Log");
|
||||
Common::SetCurrentThreadName("lucina3ds:Log");
|
||||
Entry entry;
|
||||
const auto write_logs = [this, &entry]() {
|
||||
ForEachBackend([&entry](Backend& backend) { backend.Write(entry); });
|
||||
@ -399,7 +399,7 @@ private:
|
||||
delete ptr;
|
||||
}
|
||||
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
[[noreturn]] static void HandleSignal(int sig) {
|
||||
signal(SIGABRT, SIG_DFL);
|
||||
signal(SIGSEGV, SIG_DFL);
|
||||
@ -444,7 +444,7 @@ private:
|
||||
std::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()};
|
||||
std::jthread backend_thread;
|
||||
|
||||
#ifdef CITRA_LINUX_GCC_BACKTRACE
|
||||
#ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
|
||||
std::atomic_int received_signal{0};
|
||||
std::array<u8, 4096> backtrace_storage{};
|
||||
int backtrace_thread_waker_fd;
|
||||
|
||||
@ -137,7 +137,7 @@ void PrintMessageToLogcat([[maybe_unused]] const Entry& entry) {
|
||||
case Level::Count:
|
||||
UNREACHABLE();
|
||||
}
|
||||
__android_log_print(android_log_priority, "CitraNative", "%s", str.c_str());
|
||||
__android_log_print(android_log_priority, "Lucina3DSNative", "%s", str.c_str());
|
||||
#endif
|
||||
}
|
||||
} // namespace Common::Log
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
#include "common/microprofile.h"
|
||||
|
||||
// Customized Citra settings.
|
||||
// Customized Lucina3DS settings.
|
||||
// This file wraps the MicroProfile header so that these are consistent everywhere.
|
||||
#define MICROPROFILE_TEXT_WIDTH 6
|
||||
#define MICROPROFILE_TEXT_HEIGHT 12
|
||||
|
||||
@ -16,11 +16,14 @@
|
||||
namespace Common {
|
||||
|
||||
const char g_scm_rev[] = GIT_REV;
|
||||
const char g_scm_branch[] = GIT_BRANCH;
|
||||
const char g_scm_desc[] = GIT_DESC;
|
||||
// const char g_scm_branch[] = GIT_BRANCH;
|
||||
const char g_scm_branch[] = "alpha";
|
||||
// const char g_scm_desc[] = GIT_DESC;
|
||||
const char g_scm_desc[] = "pre-2025-2-9";
|
||||
const char g_build_name[] = BUILD_NAME;
|
||||
const char g_build_date[] = BUILD_DATE;
|
||||
const char g_build_fullname[] = BUILD_FULLNAME;
|
||||
//const char g_build_fullname[] = BUILD_FULLNAME;
|
||||
const char g_build_fullname[] = "Lucina3DS";
|
||||
const char g_build_version[] = BUILD_VERSION;
|
||||
const char g_shader_cache_version[] = SHADER_CACHE_VERSION;
|
||||
|
||||
|
||||
@ -80,7 +80,7 @@ void LogSettings() {
|
||||
LOG_INFO(Config, "{}: {}", name, value);
|
||||
};
|
||||
|
||||
LOG_INFO(Config, "Citra Configuration:");
|
||||
LOG_INFO(Config, "Lucina3DS Configuration:");
|
||||
log_setting("Core_UseCpuJit", values.use_cpu_jit.GetValue());
|
||||
log_setting("Core_CPUClockPercentage", values.cpu_clock_percentage.GetValue());
|
||||
log_setting("Controller_UseArticController", values.use_artic_base_controller.GetValue());
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(x86_64)
|
||||
#if LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
#include <cstring>
|
||||
#include "common/common_types.h"
|
||||
@ -148,4 +148,4 @@ const CPUCaps& GetCPUCaps() {
|
||||
|
||||
} // namespace Common
|
||||
|
||||
#endif // CITRA_ARCH(x86_64)
|
||||
#endif // LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(x86_64)
|
||||
#if LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
namespace Common {
|
||||
|
||||
@ -37,4 +37,4 @@ const CPUCaps& GetCPUCaps();
|
||||
|
||||
} // namespace Common
|
||||
|
||||
#endif // CITRA_ARCH(x86_64)
|
||||
#endif // LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(x86_64)
|
||||
#if LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
#include <bitset>
|
||||
#include <initializer_list>
|
||||
@ -232,4 +232,4 @@ inline void ABI_PopRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::bits
|
||||
|
||||
} // namespace Common::X64
|
||||
|
||||
#endif // CITRA_ARCH(x86_64)
|
||||
#endif // LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(x86_64)
|
||||
#if LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
#include <type_traits>
|
||||
#include <xbyak/xbyak.h>
|
||||
@ -49,4 +49,4 @@ inline void CallFarFunction(Xbyak::CodeGenerator& code, const T f) {
|
||||
|
||||
} // namespace Common::X64
|
||||
|
||||
#endif // CITRA_ARCH(x86_64)
|
||||
#endif // LUCINA3DS_ARCH(x86_64)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
add_library(citra_core STATIC
|
||||
add_library(lucina3ds_core STATIC
|
||||
3ds.h
|
||||
arm/arm_interface.h
|
||||
arm/dyncom/arm_dyncom.cpp
|
||||
@ -484,19 +484,19 @@ add_library(citra_core STATIC
|
||||
tracer/recorder.h
|
||||
)
|
||||
|
||||
create_target_directory_groups(citra_core)
|
||||
create_target_directory_groups(lucina3ds_core)
|
||||
|
||||
target_link_libraries(citra_core PUBLIC citra_common PRIVATE audio_core network video_core)
|
||||
target_link_libraries(citra_core PRIVATE Boost::boost Boost::serialization Boost::iostreams httplib)
|
||||
target_link_libraries(citra_core PUBLIC dds-ktx PRIVATE cryptopp fmt lodepng open_source_archives)
|
||||
target_link_libraries(lucina3ds_core PUBLIC lucina3ds_common PRIVATE audio_core network video_core)
|
||||
target_link_libraries(lucina3ds_core PRIVATE Boost::boost Boost::serialization Boost::iostreams httplib)
|
||||
target_link_libraries(lucina3ds_core PUBLIC dds-ktx PRIVATE cryptopp fmt lodepng open_source_archives)
|
||||
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
target_link_libraries(citra_core PRIVATE web_service)
|
||||
target_link_libraries(lucina3ds_core PRIVATE web_service)
|
||||
endif()
|
||||
|
||||
if (ENABLE_SCRIPTING)
|
||||
target_compile_definitions(citra_core PUBLIC -DENABLE_SCRIPTING)
|
||||
target_sources(citra_core PRIVATE
|
||||
target_compile_definitions(lucina3ds_core PUBLIC -DENABLE_SCRIPTING)
|
||||
target_sources(lucina3ds_core PRIVATE
|
||||
rpc/packet.cpp
|
||||
rpc/packet.h
|
||||
rpc/rpc_server.cpp
|
||||
@ -509,7 +509,7 @@ if (ENABLE_SCRIPTING)
|
||||
endif()
|
||||
|
||||
if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE)
|
||||
target_sources(citra_core PRIVATE
|
||||
target_sources(lucina3ds_core PRIVATE
|
||||
arm/dynarmic/arm_dynarmic.cpp
|
||||
arm/dynarmic/arm_dynarmic.h
|
||||
arm/dynarmic/arm_dynarmic_cp15.cpp
|
||||
@ -519,9 +519,9 @@ if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE)
|
||||
arm/dynarmic/arm_tick_counts.cpp
|
||||
arm/dynarmic/arm_tick_counts.h
|
||||
)
|
||||
target_link_libraries(citra_core PRIVATE dynarmic)
|
||||
target_link_libraries(lucina3ds_core PRIVATE dynarmic)
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(citra_core PRIVATE precompiled_headers.h)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(lucina3ds_core PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#define CITRA_IGNORE_EXIT(x)
|
||||
#define LUCINA3DS_IGNORE_EXIT(x)
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdio>
|
||||
@ -232,7 +232,7 @@ static unsigned int DPO(RotateRightByRegister)(ARMul_State* cpu, unsigned int sh
|
||||
|
||||
#define DEBUG_MSG \
|
||||
LOG_DEBUG(Core_ARM11, "inst is {:x}", inst); \
|
||||
CITRA_IGNORE_EXIT(0)
|
||||
LUCINA3DS_IGNORE_EXIT(0)
|
||||
|
||||
#define LnSWoUB(s) glue(LnSWoUB, s)
|
||||
#define MLnS(s) glue(MLnS, s)
|
||||
@ -832,7 +832,7 @@ static unsigned int InterpreterTranslateInstruction(const ARMul_State* cpu, cons
|
||||
inst);
|
||||
LOG_ERROR(Core_ARM11, "cpsr={:#X}, cpu->TFlag={}, r15={:#010X}", cpu->Cpsr, cpu->TFlag,
|
||||
cpu->Reg[15]);
|
||||
CITRA_IGNORE_EXIT(-1);
|
||||
LUCINA3DS_IGNORE_EXIT(-1);
|
||||
}
|
||||
inst_base = arm_instruction_trans[idx](inst, idx);
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "common/arch.h"
|
||||
#if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64)
|
||||
#if LUCINA3DS_ARCH(x86_64) || LUCINA3DS_ARCH(arm64)
|
||||
#include "core/arm/dynarmic/arm_exclusive_monitor.h"
|
||||
#endif
|
||||
#include "common/settings.h"
|
||||
@ -15,7 +15,7 @@ ExclusiveMonitor::~ExclusiveMonitor() = default;
|
||||
|
||||
std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::MemorySystem& memory,
|
||||
std::size_t num_cores) {
|
||||
#if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64)
|
||||
#if LUCINA3DS_ARCH(x86_64) || LUCINA3DS_ARCH(arm64)
|
||||
if (Settings::values.use_cpu_jit) {
|
||||
return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores);
|
||||
}
|
||||
|
||||
@ -455,7 +455,7 @@ std::string GatewayCheat::GetCode() const {
|
||||
}
|
||||
|
||||
/// A special marker used to keep track of enabled cheats
|
||||
static constexpr char EnabledText[] = "*citra_enabled";
|
||||
static constexpr char EnabledText[] = "*lucina3ds_enabled";
|
||||
|
||||
std::string GatewayCheat::ToString() const {
|
||||
std::string result;
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#include "core/hle/service/cam/cam.h"
|
||||
#include "core/hle/service/hid/hid.h"
|
||||
#include "core/hle/service/ir/ir_user.h"
|
||||
#if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64)
|
||||
#if LUCINA3DS_ARCH(x86_64) || LUCINA3DS_ARCH(arm64)
|
||||
#include "core/arm/dynarmic/arm_dynarmic.h"
|
||||
#endif
|
||||
#include "core/arm/dyncom/arm_dyncom.h"
|
||||
@ -421,7 +421,7 @@ System::ResultStatus System::Init(Frontend::EmuWindow& emu_window,
|
||||
exclusive_monitor = MakeExclusiveMonitor(*memory, num_cores);
|
||||
cpu_cores.reserve(num_cores);
|
||||
if (Settings::values.use_cpu_jit) {
|
||||
#if CITRA_ARCH(x86_64) || CITRA_ARCH(arm64)
|
||||
#if LUCINA3DS_ARCH(x86_64) || LUCINA3DS_ARCH(arm64)
|
||||
for (u32 i = 0; i < num_cores; ++i) {
|
||||
cpu_cores.push_back(std::make_shared<ARM_Dynarmic>(
|
||||
*this, *memory, i, timing->GetTimer(i), *exclusive_monitor));
|
||||
|
||||
@ -91,7 +91,7 @@ Loader::ResultStatus FileSys::Plugin3GXLoader::Load(
|
||||
}
|
||||
|
||||
if (header.infos.flags.compatibility == static_cast<u32>(_3gx_Infos::Compatibility::CONSOLE)) {
|
||||
LOG_ERROR(Service_PLGLDR, "Failed to load 3GX plugin. Not compatible with Citra: {}",
|
||||
LOG_ERROR(Service_PLGLDR, "Failed to load 3GX plugin. Not compatible with Lucina3DS: {}",
|
||||
plg_context.plugin_path);
|
||||
return Loader::ResultStatus::Error;
|
||||
}
|
||||
|
||||
@ -54,8 +54,8 @@ public:
|
||||
u32_le exe_size; // Include sizeof(PluginHeader) + .text + .rodata + .data + .bss (0x1000
|
||||
// aligned too)
|
||||
u32_le is_default_plugin;
|
||||
u32_le plgldr_event; ///< Used for synchronization, unused in citra
|
||||
u32_le plgldr_reply; ///< Used for synchronization, unused in citra
|
||||
u32_le plgldr_event; ///< Used for synchronization, unused
|
||||
u32_le plgldr_reply; ///< Used for synchronization, unused
|
||||
u32_le reserved[24];
|
||||
u32_le config[32];
|
||||
};
|
||||
@ -79,7 +79,7 @@ private:
|
||||
bool no_flash);
|
||||
|
||||
struct _3gx_Infos {
|
||||
enum class Compatibility { CONSOLE = 0, CITRA = 1, CONSOLE_CITRA = 2 };
|
||||
enum class Compatibility { CONSOLE = 0, LUCINA3DS = 1, CONSOLE_LUCINA3DS = 2 };
|
||||
u32_le author_len;
|
||||
u32_le author_msg_offset;
|
||||
u32_le title_len;
|
||||
|
||||
@ -141,10 +141,10 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
|
||||
u32 size = static_cast<u32>(descInfo.size);
|
||||
IPC::MappedBufferPermissions permissions = descInfo.perms;
|
||||
|
||||
VAddr page_start = Common::AlignDown(source_address, Memory::CITRA_PAGE_SIZE);
|
||||
VAddr page_start = Common::AlignDown(source_address, Memory::LUCINA3DS_PAGE_SIZE);
|
||||
u32 page_offset = source_address - page_start;
|
||||
u32 num_pages = Common::AlignUp(page_offset + size, Memory::CITRA_PAGE_SIZE) >>
|
||||
Memory::CITRA_PAGE_BITS;
|
||||
u32 num_pages = Common::AlignUp(page_offset + size, Memory::LUCINA3DS_PAGE_SIZE) >>
|
||||
Memory::LUCINA3DS_PAGE_BITS;
|
||||
|
||||
// Skip when the size is zero and num_pages == 0
|
||||
if (size == 0) {
|
||||
@ -174,8 +174,8 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
|
||||
found->target_address, size);
|
||||
}
|
||||
|
||||
VAddr prev_reserve = page_start - Memory::CITRA_PAGE_SIZE;
|
||||
VAddr next_reserve = page_start + num_pages * Memory::CITRA_PAGE_SIZE;
|
||||
VAddr prev_reserve = page_start - Memory::LUCINA3DS_PAGE_SIZE;
|
||||
VAddr next_reserve = page_start + num_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
auto& prev_vma = src_process->vm_manager.FindVMA(prev_reserve)->second;
|
||||
auto& next_vma = src_process->vm_manager.FindVMA(next_reserve)->second;
|
||||
@ -184,8 +184,8 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
|
||||
|
||||
// Unmap the buffer and guard pages from the source process
|
||||
Result result =
|
||||
src_process->vm_manager.UnmapRange(page_start - Memory::CITRA_PAGE_SIZE,
|
||||
(num_pages + 2) * Memory::CITRA_PAGE_SIZE);
|
||||
src_process->vm_manager.UnmapRange(page_start - Memory::LUCINA3DS_PAGE_SIZE,
|
||||
(num_pages + 2) * Memory::LUCINA3DS_PAGE_SIZE);
|
||||
ASSERT(result == ResultSuccess);
|
||||
|
||||
mapped_buffer_context.erase(found);
|
||||
@ -200,9 +200,9 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
|
||||
|
||||
// Create a buffer which contains the mapped buffer and two additional guard pages.
|
||||
std::shared_ptr<BackingMem> buffer =
|
||||
std::make_shared<BufferMem>((num_pages + 2) * Memory::CITRA_PAGE_SIZE);
|
||||
std::make_shared<BufferMem>((num_pages + 2) * Memory::LUCINA3DS_PAGE_SIZE);
|
||||
memory.ReadBlock(*src_process, source_address,
|
||||
buffer->GetPtr() + Memory::CITRA_PAGE_SIZE + page_offset, size);
|
||||
buffer->GetPtr() + Memory::LUCINA3DS_PAGE_SIZE + page_offset, size);
|
||||
|
||||
// Map the guard pages and mapped pages at once.
|
||||
target_address =
|
||||
@ -215,18 +215,18 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
|
||||
// Change the permissions and state of the guard pages.
|
||||
const VAddr low_guard_address = target_address;
|
||||
const VAddr high_guard_address =
|
||||
low_guard_address + static_cast<VAddr>(buffer->GetSize()) - Memory::CITRA_PAGE_SIZE;
|
||||
low_guard_address + static_cast<VAddr>(buffer->GetSize()) - Memory::LUCINA3DS_PAGE_SIZE;
|
||||
ASSERT(dst_process->vm_manager.ChangeMemoryState(
|
||||
low_guard_address, Memory::CITRA_PAGE_SIZE, Kernel::MemoryState::Shared,
|
||||
low_guard_address, Memory::LUCINA3DS_PAGE_SIZE, Kernel::MemoryState::Shared,
|
||||
Kernel::VMAPermission::ReadWrite, Kernel::MemoryState::Reserved,
|
||||
Kernel::VMAPermission::None) == ResultSuccess);
|
||||
ASSERT(dst_process->vm_manager.ChangeMemoryState(
|
||||
high_guard_address, Memory::CITRA_PAGE_SIZE, Kernel::MemoryState::Shared,
|
||||
high_guard_address, Memory::LUCINA3DS_PAGE_SIZE, Kernel::MemoryState::Shared,
|
||||
Kernel::VMAPermission::ReadWrite, Kernel::MemoryState::Reserved,
|
||||
Kernel::VMAPermission::None) == ResultSuccess);
|
||||
|
||||
// Get proper mapped buffer address and store it in the cmd buffer.
|
||||
target_address += Memory::CITRA_PAGE_SIZE;
|
||||
target_address += Memory::LUCINA3DS_PAGE_SIZE;
|
||||
cmd_buf[i++] = target_address + page_offset;
|
||||
|
||||
mapped_buffer_context.push_back({permissions, size, source_address,
|
||||
|
||||
@ -182,7 +182,7 @@ void Process::ParseKernelCaps(const u32* kernel_caps, std::size_t len) {
|
||||
// Mapped memory page
|
||||
AddressMapping mapping;
|
||||
mapping.address = descriptor << 12;
|
||||
mapping.size = Memory::CITRA_PAGE_SIZE;
|
||||
mapping.size = Memory::LUCINA3DS_PAGE_SIZE;
|
||||
mapping.read_only = false;
|
||||
mapping.unk_flag = false;
|
||||
|
||||
@ -459,7 +459,7 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
|
||||
auto base_memory_region = kernel.GetMemoryRegion(MemoryRegion::BASE);
|
||||
|
||||
// Allocate some memory from the end of the linear heap for this region.
|
||||
auto offset = base_memory_region->LinearAllocate(Memory::CITRA_PAGE_SIZE);
|
||||
auto offset = base_memory_region->LinearAllocate(Memory::LUCINA3DS_PAGE_SIZE);
|
||||
if (!offset) {
|
||||
LOG_ERROR(Kernel_SVC,
|
||||
"Not enough space in BASE linear region to allocate a new TLS page");
|
||||
@ -467,17 +467,17 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
|
||||
}
|
||||
|
||||
holding_tls_memory +=
|
||||
MemoryRegionInfo::Interval(*offset, *offset + Memory::CITRA_PAGE_SIZE);
|
||||
memory_used += Memory::CITRA_PAGE_SIZE;
|
||||
MemoryRegionInfo::Interval(*offset, *offset + Memory::LUCINA3DS_PAGE_SIZE);
|
||||
memory_used += Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
// The page is completely available at the start.
|
||||
tls_slots.emplace_back(0);
|
||||
|
||||
// Map the page to the current process' address space.
|
||||
auto tls_page_addr =
|
||||
Memory::TLS_AREA_VADDR + static_cast<VAddr>(tls_page) * Memory::CITRA_PAGE_SIZE;
|
||||
Memory::TLS_AREA_VADDR + static_cast<VAddr>(tls_page) * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
vm_manager.MapBackingMemory(tls_page_addr, kernel.memory.GetFCRAMRef(*offset),
|
||||
Memory::CITRA_PAGE_SIZE, MemoryState::Locked);
|
||||
Memory::LUCINA3DS_PAGE_SIZE, MemoryState::Locked);
|
||||
|
||||
LOG_DEBUG(Kernel, "Allocated TLS page at addr={:08X}", tls_page_addr);
|
||||
} else {
|
||||
@ -488,7 +488,7 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
|
||||
tls_slots[tls_page].set(tls_slot);
|
||||
|
||||
auto tls_address = Memory::TLS_AREA_VADDR +
|
||||
static_cast<VAddr>(tls_page) * Memory::CITRA_PAGE_SIZE +
|
||||
static_cast<VAddr>(tls_page) * Memory::LUCINA3DS_PAGE_SIZE +
|
||||
static_cast<VAddr>(tls_slot) * Memory::TLS_ENTRY_SIZE;
|
||||
kernel.memory.ZeroBlock(*this, tls_address, Memory::TLS_ENTRY_SIZE);
|
||||
|
||||
|
||||
@ -76,11 +76,11 @@ enum class KernelState {
|
||||
*/
|
||||
KERNEL_STATE_REBOOT = 7,
|
||||
|
||||
// Special Citra only states.
|
||||
// Special Lucina3DS only states.
|
||||
/**
|
||||
* Sets the emulation speed percentage. A value of 0 means unthrottled.
|
||||
*/
|
||||
KERNEL_STATE_CITRA_EMULATION_SPEED = 0x20000 ///
|
||||
KERNEL_STATE_LUCINA3DS_EMULATION_SPEED = 0x20000 ///
|
||||
};
|
||||
|
||||
struct PageInfo {
|
||||
@ -125,10 +125,10 @@ enum class SystemInfoType {
|
||||
*/
|
||||
NEW_3DS_INFO = 0x10001,
|
||||
/**
|
||||
* Gets citra related information. This parameter is not available on real systems,
|
||||
* Gets lucina3ds related information. This parameter is not available on real systems,
|
||||
* but can be used by homebrew applications to get some emulator info.
|
||||
*/
|
||||
CITRA_INFORMATION = 0x20000,
|
||||
LUCINA3DS_INFORMATION = 0x20000,
|
||||
};
|
||||
|
||||
enum class ProcessInfoType {
|
||||
@ -272,15 +272,15 @@ enum class SystemInfoMemUsageRegion {
|
||||
|
||||
/**
|
||||
* Accepted by svcGetSystemInfo param with CITRA_INFORMATION type. Selects which information
|
||||
* to fetch from Citra. Some string params don't fit in 7 bytes, so they are split.
|
||||
* to fetch from Lucina3DS. Some string params don't fit in 7 bytes, so they are split.
|
||||
*/
|
||||
enum class SystemInfoCitraInformation {
|
||||
IS_CITRA = 0, // Always set the output to 1, signaling the app is running on Citra.
|
||||
enum class SystemInfoLucina3DSInformation {
|
||||
IS_LUCINA3DS = 0, // Always set the output to 1, signaling the app is running on Lucina3DS.
|
||||
HOST_TICK = 1, // Tick reference from the host in ns, unaffected by lag or cpu speed.
|
||||
EMULATION_SPEED = 2, // Gets the emulation speed set by the user or by KernelSetState.
|
||||
BUILD_NAME = 10, // (ie: Nightly, Canary).
|
||||
BUILD_VERSION = 11, // Build version.
|
||||
BUILD_PLATFORM = 12, // Build platform, see SystemInfoCitraPlatform.
|
||||
BUILD_PLATFORM = 12, // Build platform, see SystemInfoLucina3DSPlatform.
|
||||
BUILD_DATE_PART1 = 20, // Build date first 7 characters.
|
||||
BUILD_DATE_PART2 = 21, // Build date next 7 characters.
|
||||
BUILD_DATE_PART3 = 22, // Build date next 7 characters.
|
||||
@ -294,12 +294,12 @@ enum class SystemInfoCitraInformation {
|
||||
/**
|
||||
* Current officially supported platforms.
|
||||
*/
|
||||
enum class SystemInfoCitraPlatform {
|
||||
enum class SystemInfoLucina3DSPlatform {
|
||||
PLATFORM_UNKNOWN = 0,
|
||||
PLATFORM_WINDOWS = 1,
|
||||
PLATFORM_LINUX = 2,
|
||||
PLATFORM_APPLE = 3,
|
||||
PLATFORM_ANDROID = 4,
|
||||
PLATFORM_ANDROID = 3,
|
||||
PLATFORM_APPLE = 4,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -495,9 +495,9 @@ Result SVC::ControlMemory(u32* out_addr, u32 addr0, u32 addr1, u32 size, u32 ope
|
||||
"size=0x{:X}, permissions=0x{:08X}",
|
||||
operation, addr0, addr1, size, permissions);
|
||||
|
||||
R_UNLESS((addr0 & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedAddress);
|
||||
R_UNLESS((addr1 & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedAddress);
|
||||
R_UNLESS((size & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedSize);
|
||||
R_UNLESS((addr0 & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedAddress);
|
||||
R_UNLESS((addr1 & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedAddress);
|
||||
R_UNLESS((size & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedSize);
|
||||
|
||||
const u32 region = operation & MEMOP_REGION_MASK;
|
||||
operation &= ~MEMOP_REGION_MASK;
|
||||
@ -1440,8 +1440,8 @@ Result SVC::KernelSetState(u32 kernel_state, u32 varg1, u32 varg2) {
|
||||
system.RequestShutdown();
|
||||
break;
|
||||
|
||||
// Citra specific states.
|
||||
case KernelState::KERNEL_STATE_CITRA_EMULATION_SPEED: {
|
||||
// Lucina3DS specific states.
|
||||
case KernelState::KERNEL_STATE_LUCINA3DS_EMULATION_SPEED: {
|
||||
u16 new_value = static_cast<u16>(varg1);
|
||||
Settings::values.frame_limit.SetValue(new_value);
|
||||
} break;
|
||||
@ -1657,7 +1657,7 @@ Result SVC::GetHandleInfo(s64* out, Handle handle, u32 type) {
|
||||
/// Creates a memory block at the specified address with the specified permissions and size
|
||||
Result SVC::CreateMemoryBlock(Handle* out_handle, u32 addr, u32 size, u32 my_permission,
|
||||
u32 other_permission) {
|
||||
R_UNLESS(size % Memory::CITRA_PAGE_SIZE == 0, ResultMisalignedSize);
|
||||
R_UNLESS(size % Memory::LUCINA3DS_PAGE_SIZE == 0, ResultMisalignedSize);
|
||||
|
||||
std::shared_ptr<SharedMemory> shared_memory = nullptr;
|
||||
|
||||
@ -1810,73 +1810,73 @@ Result SVC::GetSystemInfo(s64* out, u32 type, s32 param) {
|
||||
LOG_ERROR(Kernel_SVC, "unimplemented GetSystemInfo type=65537 param={}", param);
|
||||
*out = 0;
|
||||
return (system.GetNumCores() == 4) ? ResultSuccess : ResultInvalidEnumValue;
|
||||
case SystemInfoType::CITRA_INFORMATION:
|
||||
switch ((SystemInfoCitraInformation)param) {
|
||||
case SystemInfoCitraInformation::IS_CITRA:
|
||||
case SystemInfoType::LUCINA3DS_INFORMATION:
|
||||
switch ((SystemInfoLucina3DSInformation)param) {
|
||||
case SystemInfoLucina3DSInformation::IS_LUCINA3DS:
|
||||
*out = 1;
|
||||
break;
|
||||
case SystemInfoCitraInformation::HOST_TICK:
|
||||
case SystemInfoLucina3DSInformation::HOST_TICK:
|
||||
*out = static_cast<s64>(std::chrono::duration_cast<std::chrono::nanoseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch())
|
||||
.count());
|
||||
break;
|
||||
case SystemInfoCitraInformation::EMULATION_SPEED:
|
||||
case SystemInfoLucina3DSInformation::EMULATION_SPEED:
|
||||
*out = static_cast<s64>(Settings::values.frame_limit.GetValue());
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_NAME:
|
||||
case SystemInfoLucina3DSInformation::BUILD_NAME:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_name, 0, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_VERSION:
|
||||
case SystemInfoLucina3DSInformation::BUILD_VERSION:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_version, 0, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_PLATFORM: {
|
||||
case SystemInfoLucina3DSInformation::BUILD_PLATFORM: {
|
||||
#if defined(_WIN32)
|
||||
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_WINDOWS);
|
||||
*out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_WINDOWS);
|
||||
#elif defined(ANDROID)
|
||||
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_ANDROID);
|
||||
*out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_ANDROID);
|
||||
#elif defined(__linux__)
|
||||
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_LINUX);
|
||||
*out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_LINUX);
|
||||
#elif defined(__APPLE__)
|
||||
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_APPLE);
|
||||
*out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_APPLE);
|
||||
#else
|
||||
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_UNKNOWN);
|
||||
*out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_UNKNOWN);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case SystemInfoCitraInformation::BUILD_DATE_PART1:
|
||||
case SystemInfoLucina3DSInformation::BUILD_DATE_PART1:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
|
||||
(sizeof(s64) - 1) * 0, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_DATE_PART2:
|
||||
case SystemInfoLucina3DSInformation::BUILD_DATE_PART2:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
|
||||
(sizeof(s64) - 1) * 1, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_DATE_PART3:
|
||||
case SystemInfoLucina3DSInformation::BUILD_DATE_PART3:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
|
||||
(sizeof(s64) - 1) * 2, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_DATE_PART4:
|
||||
case SystemInfoLucina3DSInformation::BUILD_DATE_PART4:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
|
||||
(sizeof(s64) - 1) * 3, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_GIT_BRANCH_PART1:
|
||||
case SystemInfoLucina3DSInformation::BUILD_GIT_BRANCH_PART1:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch,
|
||||
(sizeof(s64) - 1) * 0, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_GIT_BRANCH_PART2:
|
||||
case SystemInfoLucina3DSInformation::BUILD_GIT_BRANCH_PART2:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch,
|
||||
(sizeof(s64) - 1) * 1, sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_GIT_DESCRIPTION_PART1:
|
||||
case SystemInfoLucina3DSInformation::BUILD_GIT_DESCRIPTION_PART1:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_desc, (sizeof(s64) - 1) * 0,
|
||||
sizeof(s64));
|
||||
break;
|
||||
case SystemInfoCitraInformation::BUILD_GIT_DESCRIPTION_PART2:
|
||||
case SystemInfoLucina3DSInformation::BUILD_GIT_DESCRIPTION_PART2:
|
||||
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_desc, (sizeof(s64) - 1) * 1,
|
||||
sizeof(s64));
|
||||
break;
|
||||
default:
|
||||
LOG_ERROR(Kernel_SVC, "unknown GetSystemInfo citra info param={}", param);
|
||||
LOG_ERROR(Kernel_SVC, "unknown GetSystemInfo lucina3ds info param={}", param);
|
||||
*out = 0;
|
||||
break;
|
||||
}
|
||||
@ -1904,7 +1904,7 @@ Result SVC::GetProcessInfo(s64* out, Handle process_handle, u32 type) {
|
||||
// TODO(yuriks): Type 0 returns a slightly higher number than type 2, but I'm not sure
|
||||
// what's the difference between them.
|
||||
*out = process->memory_used;
|
||||
if (*out % Memory::CITRA_PAGE_SIZE != 0) {
|
||||
if (*out % Memory::LUCINA3DS_PAGE_SIZE != 0) {
|
||||
LOG_ERROR(Kernel_SVC, "called, memory size not page-aligned");
|
||||
return ResultMisalignedSize;
|
||||
}
|
||||
@ -2047,7 +2047,7 @@ Result SVC::MapProcessMemoryEx(Handle dst_process_handle, u32 dst_address,
|
||||
R_UNLESS(dst_process && src_process, ResultInvalidHandle);
|
||||
|
||||
if (size & 0xFFF) {
|
||||
size = (size & ~0xFFF) + Memory::CITRA_PAGE_SIZE;
|
||||
size = (size & ~0xFFF) + Memory::LUCINA3DS_PAGE_SIZE;
|
||||
}
|
||||
|
||||
// TODO(PabloMK7) Fix-up this svc.
|
||||
@ -2081,7 +2081,7 @@ Result SVC::UnmapProcessMemoryEx(Handle process, u32 dst_address, u32 size) {
|
||||
R_UNLESS(dst_process, ResultInvalidHandle);
|
||||
|
||||
if (size & 0xFFF) {
|
||||
size = (size & ~0xFFF) + Memory::CITRA_PAGE_SIZE;
|
||||
size = (size & ~0xFFF) + Memory::LUCINA3DS_PAGE_SIZE;
|
||||
}
|
||||
|
||||
// Only linear memory supported
|
||||
|
||||
@ -109,9 +109,9 @@ void Thread::Stop() {
|
||||
ReleaseThreadMutexes(this);
|
||||
|
||||
// Mark the TLS slot in the thread's page as free.
|
||||
u32 tls_page = (tls_address - Memory::TLS_AREA_VADDR) / Memory::CITRA_PAGE_SIZE;
|
||||
u32 tls_page = (tls_address - Memory::TLS_AREA_VADDR) / Memory::LUCINA3DS_PAGE_SIZE;
|
||||
u32 tls_slot =
|
||||
((tls_address - Memory::TLS_AREA_VADDR) % Memory::CITRA_PAGE_SIZE) / Memory::TLS_ENTRY_SIZE;
|
||||
((tls_address - Memory::TLS_AREA_VADDR) % Memory::LUCINA3DS_PAGE_SIZE) / Memory::TLS_ENTRY_SIZE;
|
||||
if (auto process = owner_process.lock()) {
|
||||
process->tls_slots[tls_page].reset(tls_slot);
|
||||
process->resource_limit->Release(ResourceLimitType::Thread, 1);
|
||||
|
||||
@ -253,8 +253,8 @@ VMManager::VMAIter VMManager::StripIterConstness(const VMAHandle& iter) {
|
||||
}
|
||||
|
||||
ResultVal<VMManager::VMAIter> VMManager::CarveVMA(VAddr base, u32 size) {
|
||||
ASSERT_MSG((size & Memory::CITRA_PAGE_MASK) == 0, "non-page aligned size: {:#10X}", size);
|
||||
ASSERT_MSG((base & Memory::CITRA_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", base);
|
||||
ASSERT_MSG((size & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:#10X}", size);
|
||||
ASSERT_MSG((base & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", base);
|
||||
|
||||
VMAIter vma_handle = StripIterConstness(FindVMA(base));
|
||||
if (vma_handle == vma_map.end()) {
|
||||
@ -289,8 +289,8 @@ ResultVal<VMManager::VMAIter> VMManager::CarveVMA(VAddr base, u32 size) {
|
||||
}
|
||||
|
||||
ResultVal<VMManager::VMAIter> VMManager::CarveVMARange(VAddr target, u32 size) {
|
||||
ASSERT_MSG((size & Memory::CITRA_PAGE_MASK) == 0, "non-page aligned size: {:#10X}", size);
|
||||
ASSERT_MSG((target & Memory::CITRA_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", target);
|
||||
ASSERT_MSG((size & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:#10X}", size);
|
||||
ASSERT_MSG((target & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", target);
|
||||
|
||||
const VAddr target_end = target + size;
|
||||
ASSERT(target_end >= target);
|
||||
|
||||
@ -38,7 +38,7 @@ constexpr u8 DEFAULT_SOUND_OUTPUT_MODE = SOUND_STEREO;
|
||||
// constants.
|
||||
constexpr u64_le DEFAULT_CONSOLE_ID = 0;
|
||||
constexpr u32_le DEFAULT_CONSOLE_RANDOM_NUMBER = 0;
|
||||
constexpr UsernameBlock DEFAULT_USERNAME{{u"CITRA"}, 0, 0};
|
||||
constexpr UsernameBlock DEFAULT_USERNAME{{u"LUCINA3DS"}, 0, 0};
|
||||
constexpr BirthdayBlock DEFAULT_BIRTHDAY{3, 25}; // March 25th, 2014
|
||||
constexpr u8 DEFAULT_LANGUAGE = LANGUAGE_EN;
|
||||
constexpr ConsoleCountryInfo DEFAULT_COUNTRY_INFO{
|
||||
|
||||
@ -193,7 +193,7 @@ static_assert(sizeof(CaptureState) == 0x8, "CaptureState structure size is wrong
|
||||
|
||||
void CSND_SND::Initialize(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx);
|
||||
const u32 size = Common::AlignUp(rp.Pop<u32>(), Memory::CITRA_PAGE_SIZE);
|
||||
const u32 size = Common::AlignUp(rp.Pop<u32>(), Memory::LUCINA3DS_PAGE_SIZE);
|
||||
master_state_offset = rp.Pop<u32>();
|
||||
channel_state_offset = rp.Pop<u32>();
|
||||
capture_state_offset = rp.Pop<u32>();
|
||||
|
||||
@ -1500,7 +1500,7 @@ u32 CROHelper::Fix(u32 fix_level) {
|
||||
}
|
||||
}
|
||||
|
||||
fix_end = Common::AlignUp(fix_end, Memory::CITRA_PAGE_SIZE);
|
||||
fix_end = Common::AlignUp(fix_end, Memory::LUCINA3DS_PAGE_SIZE);
|
||||
|
||||
u32 fixed_size = fix_end - module_address;
|
||||
SetField(FixedSize, fixed_size);
|
||||
@ -1523,8 +1523,8 @@ std::tuple<VAddr, u32> CROHelper::GetExecutablePages() const {
|
||||
SegmentEntry entry;
|
||||
GetEntry(system.Memory(), i, entry);
|
||||
if (entry.type == SegmentType::Code && entry.size != 0) {
|
||||
VAddr begin = Common::AlignDown(entry.offset, Memory::CITRA_PAGE_SIZE);
|
||||
VAddr end = Common::AlignUp(entry.offset + entry.size, Memory::CITRA_PAGE_SIZE);
|
||||
VAddr begin = Common::AlignDown(entry.offset, Memory::LUCINA3DS_PAGE_SIZE);
|
||||
VAddr end = Common::AlignUp(entry.offset + entry.size, Memory::LUCINA3DS_PAGE_SIZE);
|
||||
return std::make_tuple(begin, end - begin);
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,19 +87,19 @@ void RO::Initialize(Kernel::HLERequestContext& ctx) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (crs_buffer_ptr & Memory::CITRA_PAGE_MASK) {
|
||||
if (crs_buffer_ptr & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRS original address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (crs_address & Memory::CITRA_PAGE_MASK) {
|
||||
if (crs_address & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRS mapping address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (crs_size & Memory::CITRA_PAGE_MASK) {
|
||||
if (crs_size & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRS size is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_SIZE);
|
||||
return;
|
||||
@ -207,21 +207,21 @@ void RO::LoadCRO(Kernel::HLERequestContext& ctx, bool link_on_load_bug_fix) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_buffer_ptr & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_buffer_ptr & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO original address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
rb.Push<u32>(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_address & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO mapping address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
rb.Push<u32>(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_size & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_size & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO size is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_SIZE);
|
||||
rb.Push<u32>(0);
|
||||
@ -354,7 +354,7 @@ void RO::UnloadCRO(Kernel::HLERequestContext& ctx) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_address & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
return;
|
||||
@ -421,7 +421,7 @@ void RO::LinkCRO(Kernel::HLERequestContext& ctx) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_address & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
return;
|
||||
@ -461,7 +461,7 @@ void RO::UnlinkCRO(Kernel::HLERequestContext& ctx) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cro_address & Memory::CITRA_PAGE_MASK) {
|
||||
if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
|
||||
LOG_ERROR(Service_LDR, "CRO address is not aligned");
|
||||
rb.Push(ERROR_MISALIGNED_ADDRESS);
|
||||
return;
|
||||
|
||||
@ -128,13 +128,13 @@ ResultStatus Apploader_Artic::LoadExec(std::shared_ptr<Kernel::Process>& process
|
||||
codeset->CodeSegment().offset = 0;
|
||||
codeset->CodeSegment().addr = program_exheader.codeset_info.text.address;
|
||||
codeset->CodeSegment().size =
|
||||
program_exheader.codeset_info.text.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
program_exheader.codeset_info.text.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
codeset->RODataSegment().offset =
|
||||
codeset->CodeSegment().offset + codeset->CodeSegment().size;
|
||||
codeset->RODataSegment().addr = program_exheader.codeset_info.ro.address;
|
||||
codeset->RODataSegment().size =
|
||||
program_exheader.codeset_info.ro.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
program_exheader.codeset_info.ro.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
// TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just
|
||||
// to the regular size. Playing it safe for now.
|
||||
@ -145,7 +145,7 @@ ResultStatus Apploader_Artic::LoadExec(std::shared_ptr<Kernel::Process>& process
|
||||
codeset->RODataSegment().offset + codeset->RODataSegment().size;
|
||||
codeset->DataSegment().addr = program_exheader.codeset_info.data.address;
|
||||
codeset->DataSegment().size =
|
||||
program_exheader.codeset_info.data.num_max_pages * Memory::CITRA_PAGE_SIZE +
|
||||
program_exheader.codeset_info.data.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE +
|
||||
bss_page_size;
|
||||
|
||||
// Apply patches now that the entire codeset (including .bss) has been allocated
|
||||
@ -387,9 +387,9 @@ ResultStatus Apploader_Artic::ReadCode(std::vector<u8>& buffer) {
|
||||
if (!client_connected)
|
||||
return ResultStatus::ErrorArtic;
|
||||
|
||||
size_t code_size = program_exheader.codeset_info.text.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
code_size += program_exheader.codeset_info.ro.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
code_size += program_exheader.codeset_info.data.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
size_t code_size = program_exheader.codeset_info.text.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
code_size += program_exheader.codeset_info.ro.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
code_size += program_exheader.codeset_info.data.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
size_t read_amount = 0;
|
||||
buffer.clear();
|
||||
|
||||
@ -120,13 +120,13 @@ ResultStatus AppLoader_NCCH::LoadExec(std::shared_ptr<Kernel::Process>& process)
|
||||
codeset->CodeSegment().offset = 0;
|
||||
codeset->CodeSegment().addr = overlay_ncch->exheader_header.codeset_info.text.address;
|
||||
codeset->CodeSegment().size =
|
||||
overlay_ncch->exheader_header.codeset_info.text.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
overlay_ncch->exheader_header.codeset_info.text.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
codeset->RODataSegment().offset =
|
||||
codeset->CodeSegment().offset + codeset->CodeSegment().size;
|
||||
codeset->RODataSegment().addr = overlay_ncch->exheader_header.codeset_info.ro.address;
|
||||
codeset->RODataSegment().size =
|
||||
overlay_ncch->exheader_header.codeset_info.ro.num_max_pages * Memory::CITRA_PAGE_SIZE;
|
||||
overlay_ncch->exheader_header.codeset_info.ro.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
|
||||
|
||||
// TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just
|
||||
// to the regular size. Playing it safe for now.
|
||||
@ -138,7 +138,7 @@ ResultStatus AppLoader_NCCH::LoadExec(std::shared_ptr<Kernel::Process>& process)
|
||||
codeset->DataSegment().addr = overlay_ncch->exheader_header.codeset_info.data.address;
|
||||
codeset->DataSegment().size =
|
||||
overlay_ncch->exheader_header.codeset_info.data.num_max_pages *
|
||||
Memory::CITRA_PAGE_SIZE +
|
||||
Memory::LUCINA3DS_PAGE_SIZE +
|
||||
bss_page_size;
|
||||
|
||||
// Apply patches now that the entire codeset (including .bss) has been allocated
|
||||
|
||||
@ -54,24 +54,24 @@ public:
|
||||
private:
|
||||
bool* At(VAddr addr) {
|
||||
if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) {
|
||||
return &vram[(addr - VRAM_VADDR) / CITRA_PAGE_SIZE];
|
||||
return &vram[(addr - VRAM_VADDR) / LUCINA3DS_PAGE_SIZE];
|
||||
}
|
||||
if (addr >= LINEAR_HEAP_VADDR && addr < LINEAR_HEAP_VADDR_END) {
|
||||
return &linear_heap[(addr - LINEAR_HEAP_VADDR) / CITRA_PAGE_SIZE];
|
||||
return &linear_heap[(addr - LINEAR_HEAP_VADDR) / LUCINA3DS_PAGE_SIZE];
|
||||
}
|
||||
if (addr >= NEW_LINEAR_HEAP_VADDR && addr < NEW_LINEAR_HEAP_VADDR_END) {
|
||||
return &new_linear_heap[(addr - NEW_LINEAR_HEAP_VADDR) / CITRA_PAGE_SIZE];
|
||||
return &new_linear_heap[(addr - NEW_LINEAR_HEAP_VADDR) / LUCINA3DS_PAGE_SIZE];
|
||||
}
|
||||
if (addr >= PLUGIN_3GX_FB_VADDR && addr < PLUGIN_3GX_FB_VADDR_END) {
|
||||
return &plugin_fb[(addr - PLUGIN_3GX_FB_VADDR) / CITRA_PAGE_SIZE];
|
||||
return &plugin_fb[(addr - PLUGIN_3GX_FB_VADDR) / LUCINA3DS_PAGE_SIZE];
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::array<bool, VRAM_SIZE / CITRA_PAGE_SIZE> vram{};
|
||||
std::array<bool, LINEAR_HEAP_SIZE / CITRA_PAGE_SIZE> linear_heap{};
|
||||
std::array<bool, NEW_LINEAR_HEAP_SIZE / CITRA_PAGE_SIZE> new_linear_heap{};
|
||||
std::array<bool, PLUGIN_3GX_FB_SIZE / CITRA_PAGE_SIZE> plugin_fb{};
|
||||
std::array<bool, VRAM_SIZE / LUCINA3DS_PAGE_SIZE> vram{};
|
||||
std::array<bool, LINEAR_HEAP_SIZE / LUCINA3DS_PAGE_SIZE> linear_heap{};
|
||||
std::array<bool, NEW_LINEAR_HEAP_SIZE / LUCINA3DS_PAGE_SIZE> new_linear_heap{};
|
||||
std::array<bool, PLUGIN_3GX_FB_SIZE / LUCINA3DS_PAGE_SIZE> plugin_fb{};
|
||||
|
||||
static_assert(sizeof(bool) == 1);
|
||||
friend class boost::serialization::access;
|
||||
@ -161,13 +161,13 @@ public:
|
||||
auto& page_table = *process.vm_manager.page_table;
|
||||
|
||||
std::size_t remaining_size = size;
|
||||
std::size_t page_index = src_addr >> CITRA_PAGE_BITS;
|
||||
std::size_t page_offset = src_addr & CITRA_PAGE_MASK;
|
||||
std::size_t page_index = src_addr >> LUCINA3DS_PAGE_BITS;
|
||||
std::size_t page_offset = src_addr & LUCINA3DS_PAGE_MASK;
|
||||
|
||||
while (remaining_size > 0) {
|
||||
const std::size_t copy_amount = std::min(CITRA_PAGE_SIZE - page_offset, remaining_size);
|
||||
const std::size_t copy_amount = std::min(LUCINA3DS_PAGE_SIZE - page_offset, remaining_size);
|
||||
const VAddr current_vaddr =
|
||||
static_cast<VAddr>((page_index << CITRA_PAGE_BITS) + page_offset);
|
||||
static_cast<VAddr>((page_index << LUCINA3DS_PAGE_BITS) + page_offset);
|
||||
|
||||
switch (page_table.attributes[page_index]) {
|
||||
case PageType::Unmapped: {
|
||||
@ -210,13 +210,13 @@ public:
|
||||
const void* src_buffer, const std::size_t size) {
|
||||
auto& page_table = *process.vm_manager.page_table;
|
||||
std::size_t remaining_size = size;
|
||||
std::size_t page_index = dest_addr >> CITRA_PAGE_BITS;
|
||||
std::size_t page_offset = dest_addr & CITRA_PAGE_MASK;
|
||||
std::size_t page_index = dest_addr >> LUCINA3DS_PAGE_BITS;
|
||||
std::size_t page_offset = dest_addr & LUCINA3DS_PAGE_MASK;
|
||||
|
||||
while (remaining_size > 0) {
|
||||
const std::size_t copy_amount = std::min(CITRA_PAGE_SIZE - page_offset, remaining_size);
|
||||
const std::size_t copy_amount = std::min(LUCINA3DS_PAGE_SIZE - page_offset, remaining_size);
|
||||
const VAddr current_vaddr =
|
||||
static_cast<VAddr>((page_index << CITRA_PAGE_BITS) + page_offset);
|
||||
static_cast<VAddr>((page_index << LUCINA3DS_PAGE_BITS) + page_offset);
|
||||
|
||||
switch (page_table.attributes[page_index]) {
|
||||
case PageType::Unmapped: {
|
||||
@ -393,10 +393,10 @@ void MemorySystem::RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode
|
||||
void MemorySystem::MapPages(PageTable& page_table, u32 base, u32 size, MemoryRef memory,
|
||||
PageType type) {
|
||||
LOG_DEBUG(HW_Memory, "Mapping {} onto {:08X}-{:08X}", (void*)memory.GetPtr(),
|
||||
base * CITRA_PAGE_SIZE, (base + size) * CITRA_PAGE_SIZE);
|
||||
base * LUCINA3DS_PAGE_SIZE, (base + size) * LUCINA3DS_PAGE_SIZE);
|
||||
|
||||
if (impl->system.IsPoweredOn()) {
|
||||
RasterizerFlushVirtualRegion(base << CITRA_PAGE_BITS, size * CITRA_PAGE_SIZE,
|
||||
RasterizerFlushVirtualRegion(base << LUCINA3DS_PAGE_BITS, size * LUCINA3DS_PAGE_SIZE,
|
||||
FlushMode::FlushAndInvalidate);
|
||||
}
|
||||
|
||||
@ -408,27 +408,27 @@ void MemorySystem::MapPages(PageTable& page_table, u32 base, u32 size, MemoryRef
|
||||
page_table.pointers[base] = memory;
|
||||
|
||||
// If the memory to map is already rasterizer-cached, mark the page
|
||||
if (type == PageType::Memory && impl->cache_marker.IsCached(base * CITRA_PAGE_SIZE)) {
|
||||
if (type == PageType::Memory && impl->cache_marker.IsCached(base * LUCINA3DS_PAGE_SIZE)) {
|
||||
page_table.attributes[base] = PageType::RasterizerCachedMemory;
|
||||
page_table.pointers[base] = nullptr;
|
||||
}
|
||||
|
||||
base += 1;
|
||||
if (memory != nullptr && memory.GetSize() > CITRA_PAGE_SIZE)
|
||||
memory += CITRA_PAGE_SIZE;
|
||||
if (memory != nullptr && memory.GetSize() > LUCINA3DS_PAGE_SIZE)
|
||||
memory += LUCINA3DS_PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
void MemorySystem::MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, MemoryRef target) {
|
||||
ASSERT_MSG((size & CITRA_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
|
||||
ASSERT_MSG((base & CITRA_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
|
||||
MapPages(page_table, base / CITRA_PAGE_SIZE, size / CITRA_PAGE_SIZE, target, PageType::Memory);
|
||||
ASSERT_MSG((size & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
|
||||
ASSERT_MSG((base & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
|
||||
MapPages(page_table, base / LUCINA3DS_PAGE_SIZE, size / LUCINA3DS_PAGE_SIZE, target, PageType::Memory);
|
||||
}
|
||||
|
||||
void MemorySystem::UnmapRegion(PageTable& page_table, VAddr base, u32 size) {
|
||||
ASSERT_MSG((size & CITRA_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
|
||||
ASSERT_MSG((base & CITRA_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
|
||||
MapPages(page_table, base / CITRA_PAGE_SIZE, size / CITRA_PAGE_SIZE, nullptr,
|
||||
ASSERT_MSG((size & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
|
||||
ASSERT_MSG((base & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
|
||||
MapPages(page_table, base / LUCINA3DS_PAGE_SIZE, size / LUCINA3DS_PAGE_SIZE, nullptr,
|
||||
PageType::Unmapped);
|
||||
}
|
||||
|
||||
@ -449,11 +449,11 @@ void MemorySystem::UnregisterPageTable(std::shared_ptr<PageTable> page_table) {
|
||||
|
||||
template <typename T>
|
||||
T MemorySystem::Read(const VAddr vaddr) {
|
||||
const u8* page_pointer = impl->current_page_table->pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
const u8* page_pointer = impl->current_page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
if (page_pointer) {
|
||||
// NOTE: Avoid adding any extra logic to this fast-path block
|
||||
T value;
|
||||
std::memcpy(&value, &page_pointer[vaddr & CITRA_PAGE_MASK], sizeof(T));
|
||||
std::memcpy(&value, &page_pointer[vaddr & LUCINA3DS_PAGE_MASK], sizeof(T));
|
||||
return value;
|
||||
}
|
||||
|
||||
@ -472,7 +472,7 @@ T MemorySystem::Read(const VAddr vaddr) {
|
||||
}
|
||||
}
|
||||
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> CITRA_PAGE_BITS];
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
switch (type) {
|
||||
case PageType::Unmapped:
|
||||
LOG_ERROR(HW_Memory, "unmapped Read{} @ 0x{:08X} at PC 0x{:08X}", sizeof(T) * 8, vaddr,
|
||||
@ -497,10 +497,10 @@ T MemorySystem::Read(const VAddr vaddr) {
|
||||
|
||||
template <typename T>
|
||||
void MemorySystem::Write(const VAddr vaddr, const T data) {
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
if (page_pointer) {
|
||||
// NOTE: Avoid adding any extra logic to this fast-path block
|
||||
std::memcpy(&page_pointer[vaddr & CITRA_PAGE_MASK], &data, sizeof(T));
|
||||
std::memcpy(&page_pointer[vaddr & LUCINA3DS_PAGE_MASK], &data, sizeof(T));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -521,7 +521,7 @@ void MemorySystem::Write(const VAddr vaddr, const T data) {
|
||||
}
|
||||
}
|
||||
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> CITRA_PAGE_BITS];
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
switch (type) {
|
||||
case PageType::Unmapped:
|
||||
LOG_ERROR(HW_Memory, "unmapped Write{} 0x{:08X} @ 0x{:08X} at PC 0x{:08X}",
|
||||
@ -542,15 +542,15 @@ void MemorySystem::Write(const VAddr vaddr, const T data) {
|
||||
|
||||
template <typename T>
|
||||
bool MemorySystem::WriteExclusive(const VAddr vaddr, const T data, const T expected) {
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
|
||||
if (page_pointer) {
|
||||
const auto volatile_pointer =
|
||||
reinterpret_cast<volatile T*>(&page_pointer[vaddr & CITRA_PAGE_MASK]);
|
||||
reinterpret_cast<volatile T*>(&page_pointer[vaddr & LUCINA3DS_PAGE_MASK]);
|
||||
return Common::AtomicCompareAndSwap(volatile_pointer, data, expected);
|
||||
}
|
||||
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> CITRA_PAGE_BITS];
|
||||
PageType type = impl->current_page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
switch (type) {
|
||||
case PageType::Unmapped:
|
||||
LOG_ERROR(HW_Memory, "unmapped Write{} 0x{:08X} @ 0x{:08X} at PC 0x{:08X}",
|
||||
@ -574,12 +574,12 @@ bool MemorySystem::WriteExclusive(const VAddr vaddr, const T data, const T expec
|
||||
bool MemorySystem::IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) {
|
||||
auto& page_table = *process.vm_manager.page_table;
|
||||
|
||||
auto page_pointer = page_table.pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
auto page_pointer = page_table.pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
if (page_pointer) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (page_table.attributes[vaddr >> CITRA_PAGE_BITS] == PageType::RasterizerCachedMemory) {
|
||||
if (page_table.attributes[vaddr >> LUCINA3DS_PAGE_BITS] == PageType::RasterizerCachedMemory) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -591,12 +591,12 @@ bool MemorySystem::IsValidPhysicalAddress(const PAddr paddr) const {
|
||||
}
|
||||
|
||||
u8* MemorySystem::GetPointer(const VAddr vaddr) {
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
u8* page_pointer = impl->current_page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
if (page_pointer) {
|
||||
return page_pointer + (vaddr & CITRA_PAGE_MASK);
|
||||
return page_pointer + (vaddr & LUCINA3DS_PAGE_MASK);
|
||||
}
|
||||
|
||||
if (impl->current_page_table->attributes[vaddr >> CITRA_PAGE_BITS] ==
|
||||
if (impl->current_page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS] ==
|
||||
PageType::RasterizerCachedMemory) {
|
||||
return GetPointerForRasterizerCache(vaddr);
|
||||
}
|
||||
@ -606,12 +606,12 @@ u8* MemorySystem::GetPointer(const VAddr vaddr) {
|
||||
}
|
||||
|
||||
const u8* MemorySystem::GetPointer(const VAddr vaddr) const {
|
||||
const u8* page_pointer = impl->current_page_table->pointers[vaddr >> CITRA_PAGE_BITS];
|
||||
const u8* page_pointer = impl->current_page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
if (page_pointer) {
|
||||
return page_pointer + (vaddr & CITRA_PAGE_MASK);
|
||||
return page_pointer + (vaddr & LUCINA3DS_PAGE_MASK);
|
||||
}
|
||||
|
||||
if (impl->current_page_table->attributes[vaddr >> CITRA_PAGE_BITS] ==
|
||||
if (impl->current_page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS] ==
|
||||
PageType::RasterizerCachedMemory) {
|
||||
return GetPointerForRasterizerCache(vaddr);
|
||||
}
|
||||
@ -720,14 +720,14 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
|
||||
return;
|
||||
}
|
||||
|
||||
u32 num_pages = ((start + size - 1) >> CITRA_PAGE_BITS) - (start >> CITRA_PAGE_BITS) + 1;
|
||||
u32 num_pages = ((start + size - 1) >> LUCINA3DS_PAGE_BITS) - (start >> LUCINA3DS_PAGE_BITS) + 1;
|
||||
PAddr paddr = start;
|
||||
|
||||
for (unsigned i = 0; i < num_pages; ++i, paddr += CITRA_PAGE_SIZE) {
|
||||
for (unsigned i = 0; i < num_pages; ++i, paddr += LUCINA3DS_PAGE_SIZE) {
|
||||
for (VAddr vaddr : PhysicalToVirtualAddressForRasterizer(paddr)) {
|
||||
impl->cache_marker.Mark(vaddr, cached);
|
||||
for (auto& page_table : impl->page_table_list) {
|
||||
PageType& page_type = page_table->attributes[vaddr >> CITRA_PAGE_BITS];
|
||||
PageType& page_type = page_table->attributes[vaddr >> LUCINA3DS_PAGE_BITS];
|
||||
|
||||
if (cached) {
|
||||
// Switch page type to cached if now cached
|
||||
@ -738,7 +738,7 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
|
||||
break;
|
||||
case PageType::Memory:
|
||||
page_type = PageType::RasterizerCachedMemory;
|
||||
page_table->pointers[vaddr >> CITRA_PAGE_BITS] = nullptr;
|
||||
page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS] = nullptr;
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
@ -752,8 +752,8 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
|
||||
break;
|
||||
case PageType::RasterizerCachedMemory: {
|
||||
page_type = PageType::Memory;
|
||||
page_table->pointers[vaddr >> CITRA_PAGE_BITS] =
|
||||
GetPointerForRasterizerCache(vaddr & ~CITRA_PAGE_MASK);
|
||||
page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS] =
|
||||
GetPointerForRasterizerCache(vaddr & ~LUCINA3DS_PAGE_MASK);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -838,13 +838,13 @@ void MemorySystem::ZeroBlock(const Kernel::Process& process, const VAddr dest_ad
|
||||
const std::size_t size) {
|
||||
auto& page_table = *process.vm_manager.page_table;
|
||||
std::size_t remaining_size = size;
|
||||
std::size_t page_index = dest_addr >> CITRA_PAGE_BITS;
|
||||
std::size_t page_offset = dest_addr & CITRA_PAGE_MASK;
|
||||
std::size_t page_index = dest_addr >> LUCINA3DS_PAGE_BITS;
|
||||
std::size_t page_offset = dest_addr & LUCINA3DS_PAGE_MASK;
|
||||
|
||||
while (remaining_size > 0) {
|
||||
const std::size_t copy_amount = std::min(CITRA_PAGE_SIZE - page_offset, remaining_size);
|
||||
const std::size_t copy_amount = std::min(LUCINA3DS_PAGE_SIZE - page_offset, remaining_size);
|
||||
const VAddr current_vaddr =
|
||||
static_cast<VAddr>((page_index << CITRA_PAGE_BITS) + page_offset);
|
||||
static_cast<VAddr>((page_index << LUCINA3DS_PAGE_BITS) + page_offset);
|
||||
|
||||
switch (page_table.attributes[page_index]) {
|
||||
case PageType::Unmapped: {
|
||||
@ -887,13 +887,13 @@ void MemorySystem::CopyBlock(const Kernel::Process& dest_process,
|
||||
std::size_t size) {
|
||||
auto& page_table = *src_process.vm_manager.page_table;
|
||||
std::size_t remaining_size = size;
|
||||
std::size_t page_index = src_addr >> CITRA_PAGE_BITS;
|
||||
std::size_t page_offset = src_addr & CITRA_PAGE_MASK;
|
||||
std::size_t page_index = src_addr >> LUCINA3DS_PAGE_BITS;
|
||||
std::size_t page_offset = src_addr & LUCINA3DS_PAGE_MASK;
|
||||
|
||||
while (remaining_size > 0) {
|
||||
const std::size_t copy_amount = std::min(CITRA_PAGE_SIZE - page_offset, remaining_size);
|
||||
const std::size_t copy_amount = std::min(LUCINA3DS_PAGE_SIZE - page_offset, remaining_size);
|
||||
const VAddr current_vaddr =
|
||||
static_cast<VAddr>((page_index << CITRA_PAGE_BITS) + page_offset);
|
||||
static_cast<VAddr>((page_index << LUCINA3DS_PAGE_BITS) + page_offset);
|
||||
|
||||
switch (page_table.attributes[page_index]) {
|
||||
case PageType::Unmapped: {
|
||||
|
||||
@ -29,10 +29,10 @@ namespace Memory {
|
||||
* Page size used by the ARM architecture. This is the smallest granularity with which memory can
|
||||
* be mapped.
|
||||
*/
|
||||
constexpr u32 CITRA_PAGE_SIZE = 0x1000;
|
||||
constexpr u32 CITRA_PAGE_MASK = CITRA_PAGE_SIZE - 1;
|
||||
constexpr int CITRA_PAGE_BITS = 12;
|
||||
constexpr std::size_t PAGE_TABLE_NUM_ENTRIES = 1 << (32 - CITRA_PAGE_BITS);
|
||||
constexpr u32 LUCINA3DS_PAGE_SIZE = 0x1000;
|
||||
constexpr u32 LUCINA3DS_PAGE_MASK = LUCINA3DS_PAGE_SIZE - 1;
|
||||
constexpr int LUCINA3DS_PAGE_BITS = 12;
|
||||
constexpr std::size_t PAGE_TABLE_NUM_ENTRIES = 1 << (32 - LUCINA3DS_PAGE_BITS);
|
||||
|
||||
enum class PageType {
|
||||
/// Page is unmapped and should cause an access error.
|
||||
|
||||
@ -1,34 +1,34 @@
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
|
||||
|
||||
add_executable(citra-room
|
||||
add_executable(lucina3ds-room
|
||||
precompiled_headers.h
|
||||
citra-room.cpp
|
||||
citra-room.rc
|
||||
lucina3ds-room.cpp
|
||||
lucina3ds-room.rc
|
||||
)
|
||||
|
||||
create_target_directory_groups(citra-room)
|
||||
create_target_directory_groups(lucina3ds-room)
|
||||
|
||||
target_link_libraries(citra-room PRIVATE citra_common network)
|
||||
target_link_libraries(lucina3ds-room PRIVATE lucina3ds_common network)
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
target_link_libraries(citra-room PRIVATE web_service)
|
||||
target_link_libraries(lucina3ds-room PRIVATE web_service)
|
||||
endif()
|
||||
|
||||
target_link_libraries(citra-room PRIVATE cryptopp)
|
||||
target_link_libraries(lucina3ds-room PRIVATE cryptopp)
|
||||
if (MSVC)
|
||||
target_link_libraries(citra-room PRIVATE getopt)
|
||||
target_link_libraries(lucina3ds-room PRIVATE getopt)
|
||||
endif()
|
||||
target_link_libraries(citra-room PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
target_link_libraries(lucina3ds-room PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS citra-room RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
install(TARGETS lucina3ds-room RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(citra-room PRIVATE precompiled_headers.h)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(lucina3ds-room PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
# Bundle in-place on MSVC so dependencies can be resolved by builds.
|
||||
if (MSVC)
|
||||
include(BundleTarget)
|
||||
bundle_target_in_place(citra-room)
|
||||
bundle_target_in_place(lucina3ds-room)
|
||||
endif()
|
||||
|
||||
@ -56,18 +56,18 @@ static void PrintHelp(const char* argv0) {
|
||||
"--web-api-url Citra Web API url\n"
|
||||
"--ban-list-file The file for storing the room ban list\n"
|
||||
"--log-file The file for storing the room log\n"
|
||||
"--enable-citra-mods Allow Citra Community Moderators to moderate on your room\n"
|
||||
"--enable-lucina3ds-mods Allow Citra Community Moderators to moderate on your room\n"
|
||||
"-h, --help Display this help and exit\n"
|
||||
"-v, --version Output version information and exit\n";
|
||||
}
|
||||
|
||||
static void PrintVersion() {
|
||||
std::cout << "Citra dedicated room " << Common::g_scm_branch << " " << Common::g_scm_desc
|
||||
std::cout << "Lucina3DS dedicated room " << Common::g_scm_branch << " " << Common::g_scm_desc
|
||||
<< " Libnetwork: " << Network::network_version << std::endl;
|
||||
}
|
||||
|
||||
/// The magic text at the beginning of a citra-room ban list file.
|
||||
static constexpr char BanListMagic[] = "CitraRoom-BanList-1";
|
||||
/// The magic text at the beginning of a lucina3ds-room ban list file.
|
||||
static constexpr char BanListMagic[] = "Lucina3DSRoom-BanList-1";
|
||||
|
||||
static constexpr char token_delimiter{':'};
|
||||
|
||||
@ -169,11 +169,11 @@ int main(int argc, char** argv) {
|
||||
std::string token;
|
||||
std::string web_api_url;
|
||||
std::string ban_list_file;
|
||||
std::string log_file = "citra-room.log";
|
||||
std::string log_file = "lucina3ds-room.log";
|
||||
u64 preferred_game_id = 0;
|
||||
u16 port = Network::DefaultRoomPort;
|
||||
u32 max_members = 16;
|
||||
bool enable_citra_mods = false;
|
||||
bool enable_lucina3ds_mods = false;
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"room-name", required_argument, 0, 'n'},
|
||||
@ -188,7 +188,7 @@ int main(int argc, char** argv) {
|
||||
{"web-api-url", required_argument, 0, 'a'},
|
||||
{"ban-list-file", required_argument, 0, 'b'},
|
||||
{"log-file", required_argument, 0, 'l'},
|
||||
{"enable-citra-mods", no_argument, 0, 'e'},
|
||||
{"enable-lucina3ds-mods", no_argument, 0, 'e'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{0, 0, 0, 0},
|
||||
@ -235,7 +235,7 @@ int main(int argc, char** argv) {
|
||||
log_file.assign(optarg);
|
||||
break;
|
||||
case 'e':
|
||||
enable_citra_mods = true;
|
||||
enable_lucina3ds_mods = true;
|
||||
break;
|
||||
case 'h':
|
||||
PrintHelp(argv[0]);
|
||||
@ -289,19 +289,19 @@ int main(int argc, char** argv) {
|
||||
if (username.empty()) {
|
||||
std::cout << "Hosting a public room\n\n";
|
||||
NetSettings::values.web_api_url = web_api_url;
|
||||
NetSettings::values.citra_username = UsernameFromDisplayToken(token);
|
||||
username = NetSettings::values.citra_username;
|
||||
NetSettings::values.citra_token = TokenFromDisplayToken(token);
|
||||
NetSettings::values.lucina3ds_username = UsernameFromDisplayToken(token);
|
||||
username = NetSettings::values.lucina3ds_username;
|
||||
NetSettings::values.lucina3ds_token = TokenFromDisplayToken(token);
|
||||
} else {
|
||||
std::cout << "Hosting a public room\n\n";
|
||||
NetSettings::values.web_api_url = web_api_url;
|
||||
NetSettings::values.citra_username = username;
|
||||
NetSettings::values.citra_token = token;
|
||||
NetSettings::values.lucina3ds_username = username;
|
||||
NetSettings::values.lucina3ds_token = token;
|
||||
}
|
||||
}
|
||||
if (!announce && enable_citra_mods) {
|
||||
enable_citra_mods = false;
|
||||
std::cout << "Can not enable Citra Moderators for private rooms\n\n";
|
||||
if (!announce && enable_lucina3ds_mods) {
|
||||
enable_lucina3ds_mods = false;
|
||||
std::cout << "Can not enable lucina3ds Moderators for private rooms\n\n";
|
||||
}
|
||||
|
||||
InitializeLogging(log_file);
|
||||
@ -319,7 +319,7 @@ int main(int argc, char** argv) {
|
||||
std::make_unique<WebService::VerifyUserJWT>(NetSettings::values.web_api_url);
|
||||
#else
|
||||
std::cout
|
||||
<< "Citra Web Services is not available with this build: validation is disabled.\n\n";
|
||||
<< "Web Services is not available with this build: validation is disabled.\n\n";
|
||||
verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
|
||||
#endif
|
||||
} else {
|
||||
@ -330,7 +330,7 @@ int main(int argc, char** argv) {
|
||||
if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) {
|
||||
if (!room->Create(room_name, room_description, "", port, password, max_members, username,
|
||||
preferred_game, preferred_game_id, std::move(verify_backend), ban_list,
|
||||
enable_citra_mods)) {
|
||||
enable_lucina3ds_mods)) {
|
||||
std::cout << "Failed to create room: \n\n";
|
||||
return -1;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
CITRA_ICON ICON "../../dist/citra.ico"
|
||||
CITRA_ICON ICON "../../dist/lucina3ds.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@ -14,4 +14,4 @@ CITRA_ICON ICON "../../dist/citra.ico"
|
||||
// RT_MANIFEST
|
||||
//
|
||||
|
||||
0 RT_MANIFEST "../../dist/citra.manifest"
|
||||
0 RT_MANIFEST "../../dist/lucina3ds.manifest"
|
||||
@ -42,8 +42,8 @@ if(ENABLE_LIBUSB)
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(input_common)
|
||||
target_link_libraries(input_common PUBLIC citra_core PRIVATE citra_common ${Boost_LIBRARIES})
|
||||
target_link_libraries(input_common PUBLIC lucina3ds_core PRIVATE lucina3ds_common ${Boost_LIBRARIES})
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(input_common PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
|
||||
|
||||
add_executable(citra
|
||||
citra.cpp
|
||||
citra.rc
|
||||
add_executable(lucina3ds
|
||||
lucina3ds.cpp
|
||||
lucina3ds.rc
|
||||
config.cpp
|
||||
config.h
|
||||
default_ini.h
|
||||
@ -13,47 +13,47 @@ add_executable(citra
|
||||
)
|
||||
|
||||
if (ENABLE_SOFTWARE_RENDERER)
|
||||
target_sources(citra PRIVATE
|
||||
target_sources(lucina3ds PRIVATE
|
||||
emu_window/emu_window_sdl2_sw.cpp
|
||||
emu_window/emu_window_sdl2_sw.h
|
||||
)
|
||||
endif()
|
||||
if (ENABLE_OPENGL)
|
||||
target_sources(citra PRIVATE
|
||||
target_sources(lucina3ds PRIVATE
|
||||
emu_window/emu_window_sdl2_gl.cpp
|
||||
emu_window/emu_window_sdl2_gl.h
|
||||
)
|
||||
endif()
|
||||
if (ENABLE_VULKAN)
|
||||
target_sources(citra PRIVATE
|
||||
target_sources(lucina3ds PRIVATE
|
||||
emu_window/emu_window_sdl2_vk.cpp
|
||||
emu_window/emu_window_sdl2_vk.h
|
||||
)
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(citra)
|
||||
create_target_directory_groups(lucina3ds)
|
||||
|
||||
target_link_libraries(citra PRIVATE citra_common citra_core input_common network)
|
||||
target_link_libraries(citra PRIVATE inih)
|
||||
target_link_libraries(lucina3ds PRIVATE lucina3ds_common lucina3ds_core input_common network)
|
||||
target_link_libraries(lucina3ds PRIVATE inih)
|
||||
if (MSVC)
|
||||
target_link_libraries(citra PRIVATE getopt)
|
||||
target_link_libraries(lucina3ds PRIVATE getopt)
|
||||
endif()
|
||||
target_link_libraries(citra PRIVATE ${PLATFORM_LIBRARIES} SDL2::SDL2 Threads::Threads)
|
||||
target_link_libraries(lucina3ds PRIVATE ${PLATFORM_LIBRARIES} SDL2::SDL2 Threads::Threads)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
target_link_libraries(citra PRIVATE glad)
|
||||
target_link_libraries(lucina3ds PRIVATE glad)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS citra RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
install(TARGETS lucina3ds RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(citra PRIVATE precompiled_headers.h)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(lucina3ds PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
# Bundle in-place on MSVC so dependencies can be resolved by builds.
|
||||
if (MSVC)
|
||||
include(BundleTarget)
|
||||
bundle_target_in_place(citra)
|
||||
bundle_target_in_place(lucina3ds)
|
||||
endif()
|
||||
@ -8,8 +8,8 @@
|
||||
#include <type_traits>
|
||||
#include <INIReader.h>
|
||||
#include <SDL.h>
|
||||
#include "citra/config.h"
|
||||
#include "citra/default_ini.h"
|
||||
#include "lucina3ds/config.h"
|
||||
#include "lucina3ds/default_ini.h"
|
||||
#include "common/file_util.h"
|
||||
#include "common/logging/backend.h"
|
||||
#include "common/logging/log.h"
|
||||
@ -334,8 +334,8 @@ void Config::ReadValues() {
|
||||
// Web Service
|
||||
NetSettings::values.web_api_url =
|
||||
sdl2_config->GetString("WebService", "web_api_url", "https://api.citra-emu.org");
|
||||
NetSettings::values.citra_username = sdl2_config->GetString("WebService", "citra_username", "");
|
||||
NetSettings::values.citra_token = sdl2_config->GetString("WebService", "citra_token", "");
|
||||
NetSettings::values.lucina3ds_username = sdl2_config->GetString("WebService", "citra_username", "");
|
||||
NetSettings::values.lucina3ds_token = sdl2_config->GetString("WebService", "citra_token", "");
|
||||
|
||||
// Video Dumping
|
||||
Settings::values.output_format =
|
||||
@ -7,7 +7,7 @@
|
||||
#include <string>
|
||||
#define SDL_MAIN_HANDLED
|
||||
#include <SDL.h>
|
||||
#include "citra/emu_window/emu_window_sdl2.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "common/scm_rev.h"
|
||||
#include "core/core.h"
|
||||
@ -243,7 +243,7 @@ void EmuWindow_SDL2::UpdateFramerateCounter() {
|
||||
if (current_time > last_time + 2000) {
|
||||
const auto results = system.GetAndResetPerfStats();
|
||||
const auto title =
|
||||
fmt::format("Citra {} | {}-{} | FPS: {:.0f} ({:.0f}%)", Common::g_build_fullname,
|
||||
fmt::format("Lucina3DS {} | {}-{} | FPS: {:.0f} ({:.0f}%)", Common::g_build_fullname,
|
||||
Common::g_scm_branch, Common::g_scm_desc, results.game_fps,
|
||||
results.emulation_speed * 100.0f);
|
||||
SDL_SetWindowTitle(render_window, title.c_str());
|
||||
@ -8,7 +8,7 @@
|
||||
#define SDL_MAIN_HANDLED
|
||||
#include <SDL.h>
|
||||
#include <glad/glad.h>
|
||||
#include "citra/emu_window/emu_window_sdl2_gl.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_gl.h"
|
||||
#include "common/scm_rev.h"
|
||||
#include "common/settings.h"
|
||||
#include "core/core.h"
|
||||
@ -77,7 +77,7 @@ EmuWindow_SDL2_GL::EmuWindow_SDL2_GL(Core::System& system_, bool fullscreen, boo
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);
|
||||
}
|
||||
|
||||
std::string window_title = fmt::format("Citra {} | {}-{}", Common::g_build_fullname,
|
||||
std::string window_title = fmt::format("Lucina3DS | {} | {}-{}", Common::g_build_fullname,
|
||||
Common::g_scm_branch, Common::g_scm_desc);
|
||||
|
||||
// First, try to create a context with the requested type.
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include "citra/emu_window/emu_window_sdl2.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2.h"
|
||||
|
||||
struct SDL_Window;
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#define SDL_MAIN_HANDLED
|
||||
#include <SDL.h>
|
||||
#include <SDL_rect.h>
|
||||
#include "citra/emu_window/emu_window_sdl2_sw.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_sw.h"
|
||||
#include "common/scm_rev.h"
|
||||
#include "common/settings.h"
|
||||
#include "core/core.h"
|
||||
@ -20,7 +20,7 @@ class DummyContext : public Frontend::GraphicsContext {};
|
||||
|
||||
EmuWindow_SDL2_SW::EmuWindow_SDL2_SW(Core::System& system_, bool fullscreen, bool is_secondary)
|
||||
: EmuWindow_SDL2{system_, is_secondary}, system{system_} {
|
||||
std::string window_title = fmt::format("Citra {} | {}-{}", Common::g_build_fullname,
|
||||
std::string window_title = fmt::format("Lucina3DS | {} | {}-{}", Common::g_build_fullname,
|
||||
Common::g_scm_branch, Common::g_scm_desc);
|
||||
render_window =
|
||||
SDL_CreateWindow(window_title.c_str(),
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include "citra/emu_window/emu_window_sdl2.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2.h"
|
||||
|
||||
struct SDL_Renderer;
|
||||
struct SDL_Surface;
|
||||
@ -8,7 +8,7 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_syswm.h>
|
||||
#include <fmt/format.h>
|
||||
#include "citra/emu_window/emu_window_sdl2_vk.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_vk.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "common/scm_rev.h"
|
||||
#include "core/frontend/emu_window.h"
|
||||
@ -17,7 +17,7 @@ class DummyContext : public Frontend::GraphicsContext {};
|
||||
|
||||
EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(Core::System& system, bool fullscreen, bool is_secondary)
|
||||
: EmuWindow_SDL2{system, is_secondary} {
|
||||
const std::string window_title = fmt::format("Citra {} | {}-{}", Common::g_build_fullname,
|
||||
const std::string window_title = fmt::format("Lucina3DS | {} | {}-{}", Common::g_build_fullname,
|
||||
Common::g_scm_branch, Common::g_scm_desc);
|
||||
render_window =
|
||||
SDL_CreateWindow(window_title.c_str(),
|
||||
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include "citra/emu_window/emu_window_sdl2.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2.h"
|
||||
|
||||
namespace Frontend {
|
||||
class GraphicsContext;
|
||||
@ -11,16 +11,16 @@
|
||||
// This needs to be included before getopt.h because the latter #defines symbols used by it
|
||||
#include "common/microprofile.h"
|
||||
|
||||
#include "citra/config.h"
|
||||
#include "citra/emu_window/emu_window_sdl2.h"
|
||||
#include "lucina3ds/config.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#include "citra/emu_window/emu_window_sdl2_gl.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_gl.h"
|
||||
#endif
|
||||
#ifdef ENABLE_SOFTWARE_RENDERER
|
||||
#include "citra/emu_window/emu_window_sdl2_sw.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_sw.h"
|
||||
#endif
|
||||
#ifdef ENABLE_VULKAN
|
||||
#include "citra/emu_window/emu_window_sdl2_vk.h"
|
||||
#include "lucina3ds/emu_window/emu_window_sdl2_vk.h"
|
||||
#endif
|
||||
#include "common/common_paths.h"
|
||||
#include "common/detached_tasks.h"
|
||||
@ -83,7 +83,7 @@ static void PrintHelp(const char* argv0) {
|
||||
}
|
||||
|
||||
static void PrintVersion() {
|
||||
std::cout << "Citra " << Common::g_scm_branch << " " << Common::g_scm_desc << std::endl;
|
||||
std::cout << "Lucina3DS" << Common::g_scm_branch << " " << Common::g_scm_desc << std::endl;
|
||||
}
|
||||
|
||||
static void OnStateChanged(const Network::RoomMember::State& state) {
|
||||
@ -399,7 +399,7 @@ int main(int argc, char** argv) {
|
||||
|
||||
const auto scope = emu_window->Acquire();
|
||||
|
||||
LOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch,
|
||||
LOG_INFO(Frontend, "Lucina3DS Version: {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch,
|
||||
Common::g_scm_desc);
|
||||
Settings::LogSettings();
|
||||
|
||||
@ -415,7 +415,7 @@ int main(int argc, char** argv) {
|
||||
return -1;
|
||||
case Core::System::ResultStatus::ErrorLoader_ErrorEncrypted:
|
||||
LOG_CRITICAL(Frontend, "The game that you are trying to load must be decrypted before "
|
||||
"being used with Citra. \n\n For more information on dumping and "
|
||||
"being used with Lucina3DS. \n\n For more information on dumping and "
|
||||
"decrypting games, please refer to: "
|
||||
"https://citra-emu.org/wiki/dumping-game-cartridges/");
|
||||
return -1;
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
CITRA_ICON ICON "../../dist/citra.ico"
|
||||
LUCI_ICON ICON "../../dist/lucina3ds.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@ -14,4 +14,4 @@ CITRA_ICON ICON "../../dist/citra.ico"
|
||||
// RT_MANIFEST
|
||||
//
|
||||
|
||||
0 RT_MANIFEST "../../dist/citra.manifest"
|
||||
0 RT_MANIFEST "../../dist/lucina3ds.manifest"
|
||||
@ -7,7 +7,7 @@ if (POLICY CMP0071)
|
||||
cmake_policy(SET CMP0071 NEW)
|
||||
endif()
|
||||
|
||||
add_executable(citra-qt
|
||||
add_executable(lucina3ds-qt
|
||||
aboutdialog.cpp
|
||||
aboutdialog.h
|
||||
aboutdialog.ui
|
||||
@ -27,7 +27,7 @@ add_executable(citra-qt
|
||||
camera/qt_camera_base.h
|
||||
camera/qt_multimedia_camera.cpp
|
||||
camera/qt_multimedia_camera.h
|
||||
citra-qt.rc
|
||||
lucina3ds-qt.rc
|
||||
compatdb.cpp
|
||||
compatdb.h
|
||||
compatdb.ui
|
||||
@ -196,35 +196,35 @@ file(GLOB_RECURSE ICONS ${PROJECT_SOURCE_DIR}/dist/icons/*)
|
||||
file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*)
|
||||
|
||||
if (ENABLE_QT_UPDATER)
|
||||
target_sources(citra-qt PRIVATE
|
||||
target_sources(lucina3ds-qt PRIVATE
|
||||
updater/updater.cpp
|
||||
updater/updater.h
|
||||
updater/updater_p.h
|
||||
)
|
||||
target_compile_definitions(citra-qt PUBLIC ENABLE_QT_UPDATER)
|
||||
target_compile_definitions(lucina3ds-qt PUBLIC ENABLE_QT_UPDATER)
|
||||
endif()
|
||||
|
||||
if (ENABLE_QT_TRANSLATION)
|
||||
set(CITRA_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend")
|
||||
set(LUCINA3DS_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend")
|
||||
option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF)
|
||||
|
||||
# Update source TS file if enabled
|
||||
if (GENERATE_QT_TRANSLATION)
|
||||
get_target_property(QT_SRCS citra-qt SOURCES)
|
||||
get_target_property(QT_INCLUDES citra-qt INCLUDE_DIRECTORIES)
|
||||
qt_add_lupdate(citra-qt TS_FILES ${CITRA_QT_LANGUAGES}/en.ts
|
||||
get_target_property(QT_SRCS lucina3ds-qt SOURCES)
|
||||
get_target_property(QT_INCLUDES lucina3ds-qt INCLUDE_DIRECTORIES)
|
||||
qt_add_lupdate(lucina3ds-qt TS_FILES ${LUCINA3DS_QT_LANGUAGES}/en.ts
|
||||
SOURCES ${QT_SRCS} ${UIS}
|
||||
INCLUDE_DIRECTORIES ${QT_INCLUDES}
|
||||
NO_GLOBAL_TARGET)
|
||||
add_custom_target(translation ALL DEPENDS citra-qt_lupdate)
|
||||
add_custom_target(translation ALL DEPENDS lucina3ds-qt_lupdate)
|
||||
endif()
|
||||
|
||||
# Find all TS files except en.ts
|
||||
file(GLOB_RECURSE LANGUAGES_TS ${CITRA_QT_LANGUAGES}/*.ts)
|
||||
list(REMOVE_ITEM LANGUAGES_TS ${CITRA_QT_LANGUAGES}/en.ts)
|
||||
file(GLOB_RECURSE LANGUAGES_TS ${LUCINA3DS_QT_LANGUAGES}/*.ts)
|
||||
list(REMOVE_ITEM LANGUAGES_TS ${LUCINA3DS_QT_LANGUAGES}/en.ts)
|
||||
|
||||
# Compile TS files to QM files
|
||||
qt_add_lrelease(citra-qt TS_FILES ${LANGUAGES_TS} NO_GLOBAL_TARGET QM_FILES_OUTPUT_VARIABLE LANGUAGES_QM)
|
||||
qt_add_lrelease(lucina3ds-qt TS_FILES ${LANGUAGES_TS} NO_GLOBAL_TARGET QM_FILES_OUTPUT_VARIABLE LANGUAGES_QM)
|
||||
|
||||
# Build a QRC file from the QM file list
|
||||
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
|
||||
@ -241,7 +241,7 @@ else()
|
||||
set(LANGUAGES)
|
||||
endif()
|
||||
|
||||
target_sources(citra-qt
|
||||
target_sources(lucina3ds-qt
|
||||
PRIVATE
|
||||
${COMPAT_LIST}
|
||||
${ICONS}
|
||||
@ -252,28 +252,28 @@ target_sources(citra-qt
|
||||
if (APPLE)
|
||||
set(DIST_DIR "../../dist/apple")
|
||||
set(APPLE_RESOURCES
|
||||
"${DIST_DIR}/citra.icns"
|
||||
"${DIST_DIR}/lucina3ds.icns"
|
||||
"${DIST_DIR}/LaunchScreen.storyboard"
|
||||
"${DIST_DIR}/launch_logo.png"
|
||||
)
|
||||
target_sources(citra-qt PRIVATE ${APPLE_RESOURCES})
|
||||
target_sources(lucina3ds-qt PRIVATE ${APPLE_RESOURCES})
|
||||
|
||||
# Define app bundle metadata.
|
||||
include(GenerateBuildInfo)
|
||||
set_target_properties(citra-qt PROPERTIES
|
||||
set_target_properties(lucina3ds-qt PROPERTIES
|
||||
MACOSX_BUNDLE TRUE
|
||||
MACOSX_BUNDLE_INFO_PLIST "${DIST_DIR}/Info.plist.in"
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Citra"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "com.citra-emu.citra"
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Lucina3DS"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "ink.hifuu.lucina3ds"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_VERSION}"
|
||||
MACOSX_BUNDLE_SHORT_VERSION_STRING "${BUILD_FULLNAME}"
|
||||
MACOSX_BUNDLE_LONG_VERSION_STRING "${BUILD_FULLNAME}"
|
||||
MACOSX_BUNDLE_ICON_FILE "citra.icns"
|
||||
MACOSX_BUNDLE_ICON_FILE "lucina3ds.icns"
|
||||
RESOURCE "${APPLE_RESOURCES}"
|
||||
)
|
||||
|
||||
if (IOS)
|
||||
set_target_properties(citra-qt PROPERTIES
|
||||
set_target_properties(lucina3ds-qt PROPERTIES
|
||||
# Have Xcode copy and sign MoltenVK into app bundle.
|
||||
XCODE_EMBED_FRAMEWORKS "${MOLTENVK_LIBRARY}"
|
||||
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES
|
||||
@ -284,42 +284,42 @@ if (APPLE)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
# compile as a win32 gui application instead of a console application
|
||||
target_link_libraries(citra-qt PRIVATE Qt6::EntryPointImplementation)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE Qt6::EntryPointImplementation)
|
||||
if(MSVC)
|
||||
set_target_properties(citra-qt PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
|
||||
set_target_properties(lucina3ds-qt PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
|
||||
elseif(MINGW)
|
||||
set_target_properties(citra-qt PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
|
||||
set_target_properties(lucina3ds-qt PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_SDL2)
|
||||
target_link_libraries(citra-qt PRIVATE SDL2::SDL2)
|
||||
target_compile_definitions(citra-qt PRIVATE HAVE_SDL2)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE SDL2::SDL2)
|
||||
target_compile_definitions(lucina3ds-qt PRIVATE HAVE_SDL2)
|
||||
endif()
|
||||
|
||||
create_target_directory_groups(citra-qt)
|
||||
create_target_directory_groups(lucina3ds-qt)
|
||||
|
||||
target_link_libraries(citra-qt PRIVATE audio_core citra_common citra_core input_common network video_core)
|
||||
target_link_libraries(citra-qt PRIVATE Boost::boost nihstro-headers Qt6::Widgets Qt6::Multimedia Qt6::Concurrent)
|
||||
target_link_libraries(citra-qt PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE audio_core lucina3ds_common lucina3ds_core input_common network video_core)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE Boost::boost nihstro-headers Qt6::Widgets Qt6::Multimedia Qt6::Concurrent)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
|
||||
if (ENABLE_OPENGL)
|
||||
target_link_libraries(citra-qt PRIVATE glad)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE glad)
|
||||
endif()
|
||||
|
||||
if (ENABLE_VULKAN)
|
||||
target_link_libraries(citra-qt PRIVATE vulkan-headers)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE vulkan-headers)
|
||||
endif()
|
||||
|
||||
if (NOT WIN32)
|
||||
target_include_directories(citra-qt PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
||||
target_include_directories(lucina3ds-qt PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (UNIX AND NOT APPLE)
|
||||
target_link_libraries(citra-qt PRIVATE Qt6::DBus gamemode)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE Qt6::DBus gamemode)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(citra-qt PRIVATE
|
||||
target_compile_definitions(lucina3ds-qt PRIVATE
|
||||
# Use QStringBuilder for string concatenation to reduce
|
||||
# the overall number of temporary strings created.
|
||||
-DQT_USE_QSTRINGBUILDER
|
||||
@ -338,33 +338,33 @@ target_compile_definitions(citra-qt PRIVATE
|
||||
-DQT_NO_CAST_TO_ASCII
|
||||
)
|
||||
|
||||
if (CITRA_ENABLE_COMPATIBILITY_REPORTING)
|
||||
target_compile_definitions(citra-qt PRIVATE -DCITRA_ENABLE_COMPATIBILITY_REPORTING)
|
||||
if (LUCINA3DS_ENABLE_COMPATIBILITY_REPORTING)
|
||||
target_compile_definitions(lucina3ds-qt PRIVATE -DLUCINA3DS_ENABLE_COMPATIBILITY_REPORTING)
|
||||
endif()
|
||||
|
||||
if (USE_DISCORD_PRESENCE)
|
||||
target_sources(citra-qt PUBLIC
|
||||
target_sources(lucina3ds-qt PUBLIC
|
||||
discord_impl.cpp
|
||||
discord_impl.h
|
||||
)
|
||||
target_link_libraries(citra-qt PRIVATE discord-rpc)
|
||||
target_compile_definitions(citra-qt PRIVATE -DUSE_DISCORD_PRESENCE)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE discord-rpc)
|
||||
target_compile_definitions(lucina3ds-qt PRIVATE -DUSE_DISCORD_PRESENCE)
|
||||
endif()
|
||||
|
||||
if (ENABLE_WEB_SERVICE)
|
||||
target_link_libraries(citra-qt PRIVATE web_service)
|
||||
target_link_libraries(lucina3ds-qt PRIVATE web_service)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS citra-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
install(TARGETS lucina3ds-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
if (CITRA_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(citra-qt PRIVATE precompiled_headers.h)
|
||||
if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(lucina3ds-qt PRIVATE precompiled_headers.h)
|
||||
endif()
|
||||
|
||||
# Bundle in-place on MSVC so dependencies can be resolved by builds.
|
||||
if (MSVC)
|
||||
include(BundleTarget)
|
||||
bundle_target_in_place(citra-qt)
|
||||
bundle_target_in_place(lucina3ds-qt)
|
||||
endif()
|
||||
@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>About Citra</string>
|
||||
<string>About Lucina3DS</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
@ -34,7 +34,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -49,7 +49,7 @@
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelCitra">
|
||||
<widget class="QLabel" name="labelLucina3DS">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@ -57,7 +57,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p><span style=" font-size:28pt;">Citra</span></p></body></html></string>
|
||||
<string><html><head/><body><p><span style=" font-size:28pt;">Lucina3DS</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -84,15 +84,18 @@
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">Citra is a free and open source 3DS emulator licensed under GPLv2.0 or any later version.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt;">This software should not be used to play games you have not legally obtained.</span></p></body></html></string>
|
||||
hr { height: 1px; border-width: 0; }
|
||||
li.unchecked::marker { content: "\2610"; }
|
||||
li.checked::marker { content: "\2612"; }
|
||||
</style></head><body style=" font-family:'FOT-Matisse Pro'; font-size:10pt; font-weight:700; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:400;">Lucina3DS is a free and open source 3DS emulator forked from Citra and licensed under GPLv2.0 or any later version.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:400;">This software should not be used to play games you have not legally obtained.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
@ -102,7 +105,7 @@ p, li { white-space: pre-wrap; }
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@ -142,18 +145,16 @@ p, li { white-space: pre-wrap; }
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Ok</set>
|
||||
<set>QDialogButtonBox::StandardButton::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../dist/icons/icons.qrc"/>
|
||||
</resources>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
@ -7,7 +7,7 @@
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <QVBoxLayout>
|
||||
#include "citra_qt/applets/mii_selector.h"
|
||||
#include "lucina3ds_qt/applets/mii_selector.h"
|
||||
#include "common/string_util.h"
|
||||
|
||||
QtMiiSelectorDialog::QtMiiSelectorDialog(QWidget* parent, QtMiiSelector* mii_selector_)
|
||||
@ -9,7 +9,7 @@
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <QVBoxLayout>
|
||||
#include "citra_qt/applets/swkbd.h"
|
||||
#include "lucina3ds_qt/applets/swkbd.h"
|
||||
|
||||
QtKeyboardValidator::QtKeyboardValidator(QtKeyboard* keyboard_) : keyboard(keyboard_) {}
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
#include <QMessageBox>
|
||||
#include <QPainter>
|
||||
#include <QWindow>
|
||||
#include "citra_qt/bootmanager.h"
|
||||
#include "citra_qt/main.h"
|
||||
#include "lucina3ds_qt/bootmanager.h"
|
||||
#include "lucina3ds_qt/main.h"
|
||||
#include "common/color.h"
|
||||
#include "common/microprofile.h"
|
||||
#include "common/scm_rev.h"
|
||||