Finish Linux x86_64 build

This commit is contained in:
2025-02-10 00:00:38 +08:00
parent bc3c5a8f9d
commit 6c60067ba7
301 changed files with 30720 additions and 1048 deletions

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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()

View File

@ -1 +0,0 @@
**The Contributor's Guide has moved to [the wiki](https://github.com/citra-emu/citra/wiki/Contributing).**

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

2
dist/citra.svg vendored

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

BIN
dist/doc-icon.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
dist/icon.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

131
dist/lucina3ds.svg vendored Normal file
View 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

View File

@ -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>

View File

@ -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">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -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()})

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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>

View File

@ -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)

View File

@ -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(); \

View File

@ -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

View File

@ -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"

View File

@ -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;
}

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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());

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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));

View File

@ -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;
}

View File

@ -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;

View File

@ -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,

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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{

View File

@ -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>();

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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();

View File

@ -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

View File

@ -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: {

View File

@ -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.

View File

@ -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()

View File

@ -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;
}

View File

@ -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"

View File

@ -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()

View File

@ -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()

View File

@ -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 =

View File

@ -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());

View File

@ -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.

View File

@ -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;

View File

@ -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(),

View File

@ -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;

View File

@ -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(),

View File

@ -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;

View File

@ -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;

View File

@ -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"

View File

@ -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()

View File

@ -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>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:28pt;&quot;&gt;Citra&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:28pt;&quot;&gt;Lucina3DS&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@ -84,15 +84,18 @@
</property>
<property name="text">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt;&quot;&gt;Citra is a free and open source 3DS emulator licensed under GPLv2.0 or any later version.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt;&quot;&gt;This software should not be used to play games you have not legally obtained.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
hr { height: 1px; border-width: 0; }
li.unchecked::marker { content: &quot;\2610&quot;; }
li.checked::marker { content: &quot;\2612&quot;; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'FOT-Matisse Pro'; font-size:10pt; font-weight:700; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:400;&quot;&gt;Lucina3DS is a free and open source 3DS emulator forked from Citra and licensed under GPLv2.0 or any later version.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:400;&quot;&gt;This software should not be used to play games you have not legally obtained.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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>

View File

@ -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_)

View File

@ -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_) {}

View File

@ -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"

Some files were not shown because too many files have changed in this diff Show More