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(DownloadExternals)
include(CMakeDependentOption) 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. # 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. # 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 # Compile options
CMAKE_DEPENDENT_OPTION(COMPILE_WITH_DWARF "Add DWARF debugging information" ${IS_DEBUG_BUILD} "MINGW" OFF) 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(ENABLE_LTO "Enable link time optimization" ${DEFAULT_ENABLE_LTO})
option(CITRA_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) option(LUCINA3DS_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
option(CITRA_WARNINGS_AS_ERRORS "Enable warnings as errors" ON) option(LUCINA3DS_WARNINGS_AS_ERRORS "Enable warnings as errors" ON)
include(CitraHandleSystemLibs) include(CitraHandleSystemLibs)
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
message(STATUS "Using Precompiled Headers.") message(STATUS "Using Precompiled Headers.")
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON) set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
@ -434,11 +434,11 @@ add_subdirectory(src)
add_subdirectory(dist/installer) 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) 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() 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() endif()
# Create target for outputting distributable bundles. # Create target for outputting distributable bundles.
@ -446,13 +446,13 @@ endif()
if (NOT ANDROID AND NOT IOS) if (NOT ANDROID AND NOT IOS)
include(BundleTarget) include(BundleTarget)
if (ENABLE_SDL2_FRONTEND) if (ENABLE_SDL2_FRONTEND)
bundle_target(citra) bundle_target(lucina3ds)
endif() endif()
if (ENABLE_QT) if (ENABLE_QT)
bundle_target(citra-qt) bundle_target(lucina3ds-qt)
endif() endif()
if (ENABLE_DEDICATED_ROOM) if (ENABLE_DEDICATED_ROOM)
bundle_target(citra-room) bundle_target(lucina3ds-room)
endif() endif()
endif() endif()
@ -464,22 +464,22 @@ endif()
# http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html # 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 # http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
if(ENABLE_QT AND UNIX AND NOT APPLE) 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") 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") 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") DESTINATION "${CMAKE_INSTALL_PREFIX}/share/mime/packages")
endif() endif()
if(UNIX) if(UNIX)
if(ENABLE_SDL2) 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") DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man6")
endif() endif()
if (ENABLE_QT) 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") DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man6")
endif() endif()
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. # title of most generated pages and in a few other places.
# The default value is: My Project. # 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 # 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 # 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 .Dd November 22 2016
.Dt citra-qt 6 .Dt lucina3ds-qt 6
.Os .Os
.Sh NAME .Sh NAME
.Nm Citra-Qt .Nm Lucina3DS-Qt
.Nd Nintendo 3DS Emulator/Debugger (Qt) .Nd Nintendo 3DS Emulator/Debugger (Qt)
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm citra-qt .Nm Lucina3DS-qt
.Op Ar file .Op Ar file
.Sh DESCRIPTION .Sh DESCRIPTION
Citra is an experimental open-source Nintendo 3DS emulator/debugger. Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
.Pp .Pp
.Nm citra-qt .Nm lucina3ds-qt
is the Qt implementation. is the Qt implementation.
.Sh FILES .Sh FILES
.Bl -tag -width Ds .Bl -tag -width Ds
.It Pa $XDG_DATA_HOME/citra-emu .It Pa $XDG_DATA_HOME/lucina3ds
Emulator storage. Emulator storage.
.It Pa $XDG_CONFIG_HOME/citra-emu .It Pa $XDG_CONFIG_HOME/lucina3ds
Configuration files. Configuration files.
.El .El
.Sh AUTHORS .Sh AUTHORS

View File

@ -1,14 +1,14 @@
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Type=Application Type=Application
Name=Citra Name=Lucina3DS
GenericName=3DS Emulator GenericName=3DS Emulator
GenericName[fr]=Émulateur 3DS GenericName[fr]=Émulateur 3DS
Comment=Nintendo 3DS video game console emulator Comment=Nintendo 3DS video game console emulator
Comment[fr]=Émulateur de console de jeu Nintendo 3DS Comment[fr]=Émulateur de console de jeu Nintendo 3DS
Icon=citra Icon=lucina3ds
TryExec=citra-qt TryExec=lucina3ds-qt
Exec=citra-qt %f Exec=lucina3ds-qt %f
Categories=Game;Emulator;Qt; Categories=Game;Emulator;Qt;
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi; MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
Keywords=3DS;Nintendo; 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 .Dd September 13 2024
.Dt citra 6 .Dt lucina3ds 6
.Os .Os
.Sh NAME .Sh NAME
.Nm Citra .Nm Lucina3DS
.Nd Nintendo 3DS Emulator/Debugger (SDL) .Nd Nintendo 3DS Emulator/Debugger (SDL)
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm citra .Nm lucina3ds
.Op Ar options .Op Ar options
.Op Ar file .Op Ar file
.Sh OPTIONS .Sh OPTIONS
@ -31,9 +31,9 @@ Shows syntax help and exits
.It Fl v , Fl Fl version .It Fl v , Fl Fl version
Describes the installed version and exits Describes the installed version and exits
.Sh DESCRIPTION .Sh DESCRIPTION
Citra is an experimental open-source Nintendo 3DS emulator/debugger. Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
.Pp .Pp
.Nm citra .Nm lucina3ds
is the Simple DirectMedia Layer (SDL) implementation. is the Simple DirectMedia Layer (SDL) implementation.
.Sh FILES .Sh FILES
.Bl -tag -width Ds .Bl -tag -width Ds

View File

@ -1,14 +1,14 @@
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Type=Application Type=Application
Name=Citra Name=Lucina3DS
GenericName=3DS Emulator GenericName=3DS Emulator
GenericName[fr]=Émulateur 3DS GenericName[fr]=Émulateur 3DS
Comment=Nintendo 3DS video game console emulator Comment=Nintendo 3DS video game console emulator
Comment[fr]=Émulateur de console de jeu Nintendo 3DS Comment[fr]=Émulateur de console de jeu Nintendo 3DS
Icon=citra Icon=lucina3ds
TryExec=citra TryExec=lucina3ds-qt
Exec=citra %f Exec=lucina3ds-qt %f
Categories=Game;Emulator; Categories=Game;Emulator;
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi; MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
Keywords=3DS;Nintendo; 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>Nintendo 3DS homebrew executable</comment>
<comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS</comment> <comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS</comment>
<acronym>3DSX</acronym> <acronym>3DSX</acronym>
<icon name="citra"/> <icon name="lucina3ds"/>
<glob pattern="*.3dsx"/> <glob pattern="*.3dsx"/>
<magic><match value="3DSX" type="string" offset="0"/></magic> <magic><match value="3DSX" type="string" offset="0"/></magic>
</mime-type> </mime-type>
@ -14,7 +14,7 @@
<comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment> <comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment>
<acronym>CCI</acronym> <acronym>CCI</acronym>
<expanded-acronym>CTR Cart Image</expanded-acronym> <expanded-acronym>CTR Cart Image</expanded-acronym>
<icon name="citra"/> <icon name="lucina3ds"/>
<glob pattern="*.cci"/> <glob pattern="*.cci"/>
<glob pattern="*.3ds"/> <glob pattern="*.3ds"/>
<magic><match value="NCSD" type="string" offset="256"/></magic> <magic><match value="NCSD" type="string" offset="256"/></magic>
@ -25,7 +25,7 @@
<comment xml:lang="fr">Exécutable Nintendo 3DS</comment> <comment xml:lang="fr">Exécutable Nintendo 3DS</comment>
<acronym>CXI</acronym> <acronym>CXI</acronym>
<expanded-acronym>CTR eXecutable Image</expanded-acronym> <expanded-acronym>CTR eXecutable Image</expanded-acronym>
<icon name="citra"/> <icon name="lucina3ds"/>
<glob pattern="*.cxi"/> <glob pattern="*.cxi"/>
<magic><match value="NCCH" type="string" offset="256"/></magic> <magic><match value="NCCH" type="string" offset="256"/></magic>
</mime-type> </mime-type>
@ -35,7 +35,7 @@
<comment xml:lang="fr">Archive installable Nintendo 3DS</comment> <comment xml:lang="fr">Archive installable Nintendo 3DS</comment>
<acronym>CIA</acronym> <acronym>CIA</acronym>
<expanded-acronym>CTR Importable Archive</expanded-acronym> <expanded-acronym>CTR Importable Archive</expanded-acronym>
<icon name="citra"/> <icon name="lucina3ds"/>
<glob pattern="*.cia"/> <glob pattern="*.cia"/>
</mime-type> </mime-type>

View File

@ -13,7 +13,7 @@
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file> <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/plus.png">icons/48x48/plus.png</file>
<file alias="48x48/sd_card.png">icons/48x48/sd_card.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> <file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
</qresource> </qresource>
<qresource prefix="default"> <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, ReadMemory = 1,
WriteMemory = 2 WriteMemory = 2
CITRA_PORT = 45987 LUCINA3DS_PORT = 45987
class Citra: class Lucina3DS:
def __init__(self, address="127.0.0.1", port=CITRA_PORT): def __init__(self, address="127.0.0.1", port=LUCINA3DS_PORT):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.address = address self.address = address
@ -45,7 +45,7 @@ class Citra:
request_data = struct.pack("II", read_address, temp_read_size) request_data = struct.pack("II", read_address, temp_read_size)
request, request_id = self._generate_header(RequestType.ReadMemory, len(request_data)) request, request_id = self._generate_header(RequestType.ReadMemory, len(request_data))
request += 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) raw_reply = self.socket.recv(MAX_PACKET_SIZE)
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.ReadMemory) 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_data += write_contents[:temp_write_size]
request, request_id = self._generate_header(RequestType.WriteMemory, len(request_data)) request, request_id = self._generate_header(RequestType.WriteMemory, len(request_data))
request += 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) raw_reply = self.socket.recv(MAX_PACKET_SIZE)
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.WriteMemory) reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.WriteMemory)
@ -92,4 +92,4 @@ class Citra:
if "__main__" == __name__: if "__main__" == __name__:
import doctest 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() else()
set(DYNARMIC_TESTS OFF CACHE BOOL "") set(DYNARMIC_TESTS OFF CACHE BOOL "")
set(DYNARMIC_FRONTENDS "A32" CACHE STRING "") 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) add_subdirectory(dynarmic EXCLUDE_FROM_ALL)
endif() endif()
endif() endif()

View File

@ -85,14 +85,14 @@ if (MSVC)
/wd4324 # 'struct_name': structure was padded due to __declspec(align()) /wd4324 # 'struct_name': structure was padded due to __declspec(align())
) )
if (CITRA_WARNINGS_AS_ERRORS) if (LUCINA3DS_WARNINGS_AS_ERRORS)
add_compile_options(/WX) add_compile_options(/WX)
endif() endif()
# Since MSVC's debugging information is not very deterministic, so we have to disable it # Since MSVC's debugging information is not very deterministic, so we have to disable it
# when using ccache or other caching tools # when using ccache or other caching tools
if (CMAKE_C_COMPILER_LAUNCHER STREQUAL "ccache" OR CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "ccache" 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 # Precompiled headers are deleted if not using /Z7. See https://github.com/nanoant/CMakePCHCompiler/issues/21
add_compile_options(/Z7) add_compile_options(/Z7)
else() else()
@ -120,7 +120,7 @@ else()
add_compile_options(-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2) add_compile_options(-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)
endif() endif()
if (CITRA_WARNINGS_AS_ERRORS) if (LUCINA3DS_WARNINGS_AS_ERRORS)
add_compile_options(-Werror) add_compile_options(-Werror)
endif() endif()
@ -181,11 +181,11 @@ if (ENABLE_TESTS)
endif() endif()
if (ENABLE_SDL2 AND ENABLE_SDL2_FRONTEND) if (ENABLE_SDL2 AND ENABLE_SDL2_FRONTEND)
add_subdirectory(citra) add_subdirectory(lucina3ds)
endif() endif()
if (ENABLE_QT) if (ENABLE_QT)
add_subdirectory(citra_qt) add_subdirectory(lucina3ds_qt)
endif() endif()
if (ENABLE_DEDICATED_ROOM) if (ENABLE_DEDICATED_ROOM)
@ -194,7 +194,7 @@ endif()
if (ANDROID) if (ANDROID)
add_subdirectory(android/app/src/main/jni) 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() endif()
if (ENABLE_WEB_SERVICE) if (ENABLE_WEB_SERVICE)

View File

@ -43,7 +43,7 @@ add_library(audio_core STATIC
create_target_directory_groups(audio_core) 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) target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra)
if(ENABLE_SDL2) if(ENABLE_SDL2)
@ -62,6 +62,6 @@ if(ENABLE_OPENAL)
add_definitions(-DAL_LIBTYPE_STATIC) add_definitions(-DAL_LIBTYPE_STATIC)
endif() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(audio_core PRIVATE precompiled_headers.h) target_precompile_headers(audio_core PRIVATE precompiled_headers.h)
endif() endif()

View File

@ -52,7 +52,7 @@ add_custom_command(OUTPUT scm_rev.cpp
"${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake" "${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake"
) )
add_library(citra_common STATIC add_library(lucina3ds_common STATIC
aarch64/cpu_detect.cpp aarch64/cpu_detect.cpp
aarch64/cpu_detect.h aarch64/cpu_detect.h
aarch64/oaknut_abi.h aarch64/oaknut_abi.h
@ -151,23 +151,23 @@ add_library(citra_common STATIC
) )
if (UNIX AND NOT APPLE) if (UNIX AND NOT APPLE)
target_sources(citra_common PRIVATE target_sources(lucina3ds_common PRIVATE
linux/gamemode.cpp linux/gamemode.cpp
linux/gamemode.h linux/gamemode.h
) )
target_link_libraries(citra_common PRIVATE gamemode) target_link_libraries(lucina3ds_common PRIVATE gamemode)
endif() endif()
if (APPLE) if (APPLE)
target_sources(citra_common PUBLIC target_sources(lucina3ds_common PUBLIC
apple_authorization.h apple_authorization.h
apple_authorization.cpp apple_authorization.cpp
) )
endif() endif()
if (MSVC) if (MSVC)
target_compile_options(citra_common PRIVATE target_compile_options(lucina3ds_common PRIVATE
/W4 /W4
/we4242 # 'identifier': conversion from 'type1' to 'type2', possible loss of data /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 /we4800 # Implicit conversion from 'type' to bool. Possible information loss
) )
else() else()
target_compile_options(citra_common PRIVATE target_compile_options(lucina3ds_common PRIVATE
$<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation> $<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation>
) )
endif() 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(lucina3ds_common PUBLIC fmt library-headers microprofile Boost::boost Boost::serialization Boost::iostreams)
target_link_libraries(citra_common PRIVATE zstd) target_link_libraries(lucina3ds_common PRIVATE zstd)
if ("x86_64" IN_LIST ARCHITECTURE) if ("x86_64" IN_LIST ARCHITECTURE)
target_link_libraries(citra_common PRIVATE xbyak) target_link_libraries(lucina3ds_common PRIVATE xbyak)
endif() endif()
if ("arm64" IN_LIST ARCHITECTURE) if ("arm64" IN_LIST ARCHITECTURE)
target_link_libraries(citra_common PRIVATE oaknut) target_link_libraries(lucina3ds_common PRIVATE oaknut)
endif() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(citra_common PRIVATE precompiled_headers.h) target_precompile_headers(lucina3ds_common PRIVATE precompiled_headers.h)
endif() endif()
find_library(BACKTRACE_LIBRARY backtrace) find_library(BACKTRACE_LIBRARY backtrace)
if (BACKTRACE_LIBRARY AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) 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_link_libraries(lucina3ds_common PRIVATE ${BACKTRACE_LIBRARY} dl)
target_compile_definitions(citra_common PRIVATE CITRA_LINUX_GCC_BACKTRACE) target_compile_definitions(lucina3ds_common PRIVATE lucina3ds_LINUX_GCC_BACKTRACE)
endif() endif()

View File

@ -3,7 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "common/arch.h" #include "common/arch.h"
#if CITRA_ARCH(arm64) #if LUCINA3DS_ARCH(arm64)
#include <cstring> #include <cstring>
#include <fstream> #include <fstream>

View File

@ -6,8 +6,8 @@
#include <boost/predef.h> #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 LUCINA3DS_ARCH_x86_64 BOOST_ARCH_X86_64
#define CITRA_ARCH_arm64 \ #define LUCINA3DS_ARCH_arm64 \
(BOOST_ARCH_ARM >= BOOST_VERSION_NUMBER(8, 0, 0) && BOOST_ARCH_WORD_BITS == 64) (BOOST_ARCH_ARM >= BOOST_VERSION_NUMBER(8, 0, 0) && BOOST_ARCH_WORD_BITS == 64)

View File

@ -16,7 +16,7 @@
#define ASSERT(_a_) \ #define ASSERT(_a_) \
do \ do \
if (!(_a_)) [[unlikely]] { \ if (!(_a_)) [[unlikely]] { \
[]() CITRA_NO_INLINE CITRA_NO_RETURN { \ []() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
LOG_CRITICAL(Debug, "Assertion Failed!"); \ LOG_CRITICAL(Debug, "Assertion Failed!"); \
Common::Log::Stop(); \ Common::Log::Stop(); \
Crash(); \ Crash(); \
@ -28,7 +28,7 @@
#define ASSERT_MSG(_a_, ...) \ #define ASSERT_MSG(_a_, ...) \
do \ do \
if (!(_a_)) [[unlikely]] { \ if (!(_a_)) [[unlikely]] { \
[&]() CITRA_NO_INLINE CITRA_NO_RETURN { \ [&]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
LOG_CRITICAL(Debug, "Assertion Failed!\n" __VA_ARGS__); \ LOG_CRITICAL(Debug, "Assertion Failed!\n" __VA_ARGS__); \
Common::Log::Stop(); \ Common::Log::Stop(); \
Crash(); \ Crash(); \
@ -38,7 +38,7 @@
while (0) while (0)
#define UNREACHABLE() \ #define UNREACHABLE() \
([]() CITRA_NO_INLINE CITRA_NO_RETURN { \ ([]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
LOG_CRITICAL(Debug, "Unreachable code!"); \ LOG_CRITICAL(Debug, "Unreachable code!"); \
Common::Log::Stop(); \ Common::Log::Stop(); \
Crash(); \ Crash(); \
@ -46,7 +46,7 @@
}()) }())
#define UNREACHABLE_MSG(...) \ #define UNREACHABLE_MSG(...) \
([&]() CITRA_NO_INLINE CITRA_NO_RETURN { \ ([&]() LUCINA3DS_NO_INLINE LUCINA3DS_NO_RETURN { \
LOG_CRITICAL(Debug, "Unreachable code!\n" __VA_ARGS__); \ LOG_CRITICAL(Debug, "Unreachable code!\n" __VA_ARGS__); \
Common::Log::Stop(); \ Common::Log::Stop(); \
Crash(); \ Crash(); \

View File

@ -24,15 +24,15 @@
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER
#define CITRA_NO_INLINE __declspec(noinline) #define LUCINA3DS_NO_INLINE __declspec(noinline)
#else #else
#define CITRA_NO_INLINE __attribute__((noinline)) #define LUCINA3DS_NO_INLINE __attribute__((noinline))
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER
#define CITRA_NO_RETURN __declspec(noreturn) #define LUCINA3DS_NO_RETURN __declspec(noreturn)
#else #else
#define CITRA_NO_RETURN __attribute__((noreturn)) #define LUCINA3DS_NO_RETURN __attribute__((noreturn))
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@ -18,18 +18,18 @@
#define EMU_DATA_DIR USER_DIR #define EMU_DATA_DIR USER_DIR
#else #else
#ifdef _WIN32 #ifdef _WIN32
#define EMU_DATA_DIR "Citra" #define EMU_DATA_DIR "Lucina3DS"
#elif defined(__APPLE__) #elif defined(__APPLE__)
#include <TargetConditionals.h> #include <TargetConditionals.h>
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
#define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Citra" #define APPLE_EMU_DATA_DIR "Documents" DIR_SEP "Lucina3DS"
#else #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 #endif
// For compatibility with XDG paths. // For compatibility with XDG paths.
#define EMU_DATA_DIR "citra-emu" #define EMU_DATA_DIR "lucina3ds"
#else #else
#define EMU_DATA_DIR "citra-emu" #define EMU_DATA_DIR "lucina3ds"
#endif #endif
#endif #endif
@ -55,7 +55,7 @@
// Filenames // Filenames
// Files in the directory returned by GetUserPath(UserPath::LogDir) // 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) // Files in the directory returned by GetUserPath(UserPath::ConfigDir)
#define EMU_CONFIG "emu.ini" #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) { std::string SerializePath(const std::string& input, bool is_saving) {
auto result = input; auto result = input;
StringReplace(result, "%CITRA_ROM_FILE%", g_currentRomPath, is_saving); StringReplace(result, "%LUCINA3DS_ROM_FILE%", g_currentRomPath, is_saving);
StringReplace(result, "%CITRA_USER_DIR%", GetUserPath(UserPath::UserDir), is_saving); StringReplace(result, "%LUCINA3DS_USER_DIR%", GetUserPath(UserPath::UserDir), is_saving);
return result; return result;
} }

View File

@ -182,11 +182,11 @@ void SetUserPath(const std::string& path = "");
void SetCurrentRomPath(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). // directory. To be used in "multi-user" mode (that is, installed).
[[nodiscard]] const std::string& GetUserPath(UserPath path); [[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. // directory.
[[nodiscard]] const std::string& GetDefaultUserPath(UserPath path); [[nodiscard]] const std::string& GetDefaultUserPath(UserPath path);
@ -266,8 +266,8 @@ public:
IOFile(); IOFile();
// flags is used for windows specific file open mode flags, which // 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 // allows lucina3ds 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 // 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(const std::string& filename, const char openmode[], int flags = 0);
~IOFile(); ~IOFile();

View File

@ -14,7 +14,7 @@
#define _SH_DENYWR 0 #define _SH_DENYWR 0
#endif #endif
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
#define BOOST_STACKTRACE_USE_BACKTRACE #define BOOST_STACKTRACE_USE_BACKTRACE
#include <boost/stacktrace.hpp> #include <boost/stacktrace.hpp>
#undef BOOST_STACKTRACE_USE_BACKTRACE #undef BOOST_STACKTRACE_USE_BACKTRACE
@ -182,7 +182,7 @@ public:
bool initialization_in_progress_suppress_logging = true; bool initialization_in_progress_suppress_logging = true;
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
[[noreturn]] void SleepForever() { [[noreturn]] void SleepForever() {
while (true) { while (true) {
pause(); pause();
@ -276,7 +276,7 @@ public:
private: private:
Impl(const std::string& file_backend_filename, const Filter& filter_) Impl(const std::string& file_backend_filename, const Filter& filter_)
: filter{filter_}, file_backend{file_backend_filename} { : filter{filter_}, file_backend{file_backend_filename} {
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
int waker_pipefd[2]; int waker_pipefd[2];
int done_printing_pipefd[2]; int done_printing_pipefd[2];
if (pipe2(waker_pipefd, O_CLOEXEC) || pipe2(done_printing_pipefd, O_CLOEXEC)) { 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_thread_waker_fd = waker_pipefd[1];
backtrace_done_printing_fd = done_printing_pipefd[0]; backtrace_done_printing_fd = done_printing_pipefd[0];
std::thread([this, wait_fd = waker_pipefd[0], done_fd = done_printing_pipefd[1]] { 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;) for (u8 ignore = 0; read(wait_fd, &ignore, 1) != 1;)
; ;
const int sig = received_signal; const int sig = received_signal;
@ -330,7 +330,7 @@ private:
} }
~Impl() { ~Impl() {
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
if (int zero_or_ignore = 0; if (int zero_or_ignore = 0;
!received_signal.compare_exchange_strong(zero_or_ignore, SIGKILL)) { !received_signal.compare_exchange_strong(zero_or_ignore, SIGKILL)) {
SleepForever(); SleepForever();
@ -340,7 +340,7 @@ private:
void StartBackendThread() { void StartBackendThread() {
backend_thread = std::jthread([this](std::stop_token stop_token) { backend_thread = std::jthread([this](std::stop_token stop_token) {
Common::SetCurrentThreadName("citra:Log"); Common::SetCurrentThreadName("lucina3ds:Log");
Entry entry; Entry entry;
const auto write_logs = [this, &entry]() { const auto write_logs = [this, &entry]() {
ForEachBackend([&entry](Backend& backend) { backend.Write(entry); }); ForEachBackend([&entry](Backend& backend) { backend.Write(entry); });
@ -399,7 +399,7 @@ private:
delete ptr; delete ptr;
} }
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
[[noreturn]] static void HandleSignal(int sig) { [[noreturn]] static void HandleSignal(int sig) {
signal(SIGABRT, SIG_DFL); signal(SIGABRT, SIG_DFL);
signal(SIGSEGV, 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::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()};
std::jthread backend_thread; std::jthread backend_thread;
#ifdef CITRA_LINUX_GCC_BACKTRACE #ifdef LUCINA3DS_LINUX_GCC_BACKTRACE
std::atomic_int received_signal{0}; std::atomic_int received_signal{0};
std::array<u8, 4096> backtrace_storage{}; std::array<u8, 4096> backtrace_storage{};
int backtrace_thread_waker_fd; int backtrace_thread_waker_fd;

View File

@ -137,7 +137,7 @@ void PrintMessageToLogcat([[maybe_unused]] const Entry& entry) {
case Level::Count: case Level::Count:
UNREACHABLE(); UNREACHABLE();
} }
__android_log_print(android_log_priority, "CitraNative", "%s", str.c_str()); __android_log_print(android_log_priority, "Lucina3DSNative", "%s", str.c_str());
#endif #endif
} }
} // namespace Common::Log } // namespace Common::Log

View File

@ -6,7 +6,7 @@
#include "common/microprofile.h" #include "common/microprofile.h"
// Customized Citra settings. // Customized Lucina3DS settings.
// This file wraps the MicroProfile header so that these are consistent everywhere. // This file wraps the MicroProfile header so that these are consistent everywhere.
#define MICROPROFILE_TEXT_WIDTH 6 #define MICROPROFILE_TEXT_WIDTH 6
#define MICROPROFILE_TEXT_HEIGHT 12 #define MICROPROFILE_TEXT_HEIGHT 12

View File

@ -16,11 +16,14 @@
namespace Common { namespace Common {
const char g_scm_rev[] = GIT_REV; const char g_scm_rev[] = GIT_REV;
const char g_scm_branch[] = GIT_BRANCH; // const char g_scm_branch[] = GIT_BRANCH;
const char g_scm_desc[] = GIT_DESC; 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_name[] = BUILD_NAME;
const char g_build_date[] = BUILD_DATE; 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_build_version[] = BUILD_VERSION;
const char g_shader_cache_version[] = SHADER_CACHE_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, "{}: {}", name, value);
}; };
LOG_INFO(Config, "Citra Configuration:"); LOG_INFO(Config, "Lucina3DS Configuration:");
log_setting("Core_UseCpuJit", values.use_cpu_jit.GetValue()); log_setting("Core_UseCpuJit", values.use_cpu_jit.GetValue());
log_setting("Core_CPUClockPercentage", values.cpu_clock_percentage.GetValue()); log_setting("Core_CPUClockPercentage", values.cpu_clock_percentage.GetValue());
log_setting("Controller_UseArticController", values.use_artic_base_controller.GetValue()); log_setting("Controller_UseArticController", values.use_artic_base_controller.GetValue());

View File

@ -3,7 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "common/arch.h" #include "common/arch.h"
#if CITRA_ARCH(x86_64) #if LUCINA3DS_ARCH(x86_64)
#include <cstring> #include <cstring>
#include "common/common_types.h" #include "common/common_types.h"
@ -148,4 +148,4 @@ const CPUCaps& GetCPUCaps() {
} // namespace Common } // namespace Common
#endif // CITRA_ARCH(x86_64) #endif // LUCINA3DS_ARCH(x86_64)

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include "common/arch.h" #include "common/arch.h"
#if CITRA_ARCH(x86_64) #if LUCINA3DS_ARCH(x86_64)
namespace Common { namespace Common {
@ -37,4 +37,4 @@ const CPUCaps& GetCPUCaps();
} // namespace Common } // namespace Common
#endif // CITRA_ARCH(x86_64) #endif // LUCINA3DS_ARCH(x86_64)

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include "common/arch.h" #include "common/arch.h"
#if CITRA_ARCH(x86_64) #if LUCINA3DS_ARCH(x86_64)
#include <bitset> #include <bitset>
#include <initializer_list> #include <initializer_list>
@ -232,4 +232,4 @@ inline void ABI_PopRegistersAndAdjustStack(Xbyak::CodeGenerator& code, std::bits
} // namespace Common::X64 } // namespace Common::X64
#endif // CITRA_ARCH(x86_64) #endif // LUCINA3DS_ARCH(x86_64)

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include "common/arch.h" #include "common/arch.h"
#if CITRA_ARCH(x86_64) #if LUCINA3DS_ARCH(x86_64)
#include <type_traits> #include <type_traits>
#include <xbyak/xbyak.h> #include <xbyak/xbyak.h>
@ -49,4 +49,4 @@ inline void CallFarFunction(Xbyak::CodeGenerator& code, const T f) {
} // namespace Common::X64 } // 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 3ds.h
arm/arm_interface.h arm/arm_interface.h
arm/dyncom/arm_dyncom.cpp arm/dyncom/arm_dyncom.cpp
@ -484,19 +484,19 @@ add_library(citra_core STATIC
tracer/recorder.h 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(lucina3ds_core PUBLIC lucina3ds_common PRIVATE audio_core network video_core)
target_link_libraries(citra_core PRIVATE Boost::boost Boost::serialization Boost::iostreams httplib) target_link_libraries(lucina3ds_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 dds-ktx PRIVATE cryptopp fmt lodepng open_source_archives)
if (ENABLE_WEB_SERVICE) if (ENABLE_WEB_SERVICE)
target_link_libraries(citra_core PRIVATE web_service) target_link_libraries(lucina3ds_core PRIVATE web_service)
endif() endif()
if (ENABLE_SCRIPTING) if (ENABLE_SCRIPTING)
target_compile_definitions(citra_core PUBLIC -DENABLE_SCRIPTING) target_compile_definitions(lucina3ds_core PUBLIC -DENABLE_SCRIPTING)
target_sources(citra_core PRIVATE target_sources(lucina3ds_core PRIVATE
rpc/packet.cpp rpc/packet.cpp
rpc/packet.h rpc/packet.h
rpc/rpc_server.cpp rpc/rpc_server.cpp
@ -509,7 +509,7 @@ if (ENABLE_SCRIPTING)
endif() endif()
if ("x86_64" IN_LIST ARCHITECTURE OR "arm64" IN_LIST ARCHITECTURE) 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.cpp
arm/dynarmic/arm_dynarmic.h arm/dynarmic/arm_dynarmic.h
arm/dynarmic/arm_dynarmic_cp15.cpp 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.cpp
arm/dynarmic/arm_tick_counts.h arm/dynarmic/arm_tick_counts.h
) )
target_link_libraries(citra_core PRIVATE dynarmic) target_link_libraries(lucina3ds_core PRIVATE dynarmic)
endif() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(citra_core PRIVATE precompiled_headers.h) target_precompile_headers(lucina3ds_core PRIVATE precompiled_headers.h)
endif() endif()

View File

@ -2,7 +2,7 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#define CITRA_IGNORE_EXIT(x) #define LUCINA3DS_IGNORE_EXIT(x)
#include <algorithm> #include <algorithm>
#include <cstdio> #include <cstdio>
@ -232,7 +232,7 @@ static unsigned int DPO(RotateRightByRegister)(ARMul_State* cpu, unsigned int sh
#define DEBUG_MSG \ #define DEBUG_MSG \
LOG_DEBUG(Core_ARM11, "inst is {:x}", inst); \ LOG_DEBUG(Core_ARM11, "inst is {:x}", inst); \
CITRA_IGNORE_EXIT(0) LUCINA3DS_IGNORE_EXIT(0)
#define LnSWoUB(s) glue(LnSWoUB, s) #define LnSWoUB(s) glue(LnSWoUB, s)
#define MLnS(s) glue(MLnS, s) #define MLnS(s) glue(MLnS, s)
@ -832,7 +832,7 @@ static unsigned int InterpreterTranslateInstruction(const ARMul_State* cpu, cons
inst); inst);
LOG_ERROR(Core_ARM11, "cpsr={:#X}, cpu->TFlag={}, r15={:#010X}", cpu->Cpsr, cpu->TFlag, LOG_ERROR(Core_ARM11, "cpsr={:#X}, cpu->TFlag={}, r15={:#010X}", cpu->Cpsr, cpu->TFlag,
cpu->Reg[15]); cpu->Reg[15]);
CITRA_IGNORE_EXIT(-1); LUCINA3DS_IGNORE_EXIT(-1);
} }
inst_base = arm_instruction_trans[idx](inst, idx); inst_base = arm_instruction_trans[idx](inst, idx);

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include "common/arch.h" #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" #include "core/arm/dynarmic/arm_exclusive_monitor.h"
#endif #endif
#include "common/settings.h" #include "common/settings.h"
@ -15,7 +15,7 @@ ExclusiveMonitor::~ExclusiveMonitor() = default;
std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::MemorySystem& memory, std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::MemorySystem& memory,
std::size_t num_cores) { 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) { if (Settings::values.use_cpu_jit) {
return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores); 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 /// 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 GatewayCheat::ToString() const {
std::string result; std::string result;

View File

@ -16,7 +16,7 @@
#include "core/hle/service/cam/cam.h" #include "core/hle/service/cam/cam.h"
#include "core/hle/service/hid/hid.h" #include "core/hle/service/hid/hid.h"
#include "core/hle/service/ir/ir_user.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" #include "core/arm/dynarmic/arm_dynarmic.h"
#endif #endif
#include "core/arm/dyncom/arm_dyncom.h" #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); exclusive_monitor = MakeExclusiveMonitor(*memory, num_cores);
cpu_cores.reserve(num_cores); cpu_cores.reserve(num_cores);
if (Settings::values.use_cpu_jit) { 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) { for (u32 i = 0; i < num_cores; ++i) {
cpu_cores.push_back(std::make_shared<ARM_Dynarmic>( cpu_cores.push_back(std::make_shared<ARM_Dynarmic>(
*this, *memory, i, timing->GetTimer(i), *exclusive_monitor)); *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)) { 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); plg_context.plugin_path);
return Loader::ResultStatus::Error; return Loader::ResultStatus::Error;
} }

View File

@ -54,8 +54,8 @@ public:
u32_le exe_size; // Include sizeof(PluginHeader) + .text + .rodata + .data + .bss (0x1000 u32_le exe_size; // Include sizeof(PluginHeader) + .text + .rodata + .data + .bss (0x1000
// aligned too) // aligned too)
u32_le is_default_plugin; u32_le is_default_plugin;
u32_le plgldr_event; ///< Used for synchronization, unused in citra u32_le plgldr_event; ///< Used for synchronization, unused
u32_le plgldr_reply; ///< Used for synchronization, unused in citra u32_le plgldr_reply; ///< Used for synchronization, unused
u32_le reserved[24]; u32_le reserved[24];
u32_le config[32]; u32_le config[32];
}; };
@ -79,7 +79,7 @@ private:
bool no_flash); bool no_flash);
struct _3gx_Infos { 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_len;
u32_le author_msg_offset; u32_le author_msg_offset;
u32_le title_len; u32_le title_len;

View File

@ -141,10 +141,10 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
u32 size = static_cast<u32>(descInfo.size); u32 size = static_cast<u32>(descInfo.size);
IPC::MappedBufferPermissions permissions = descInfo.perms; 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 page_offset = source_address - page_start;
u32 num_pages = Common::AlignUp(page_offset + size, Memory::CITRA_PAGE_SIZE) >> u32 num_pages = Common::AlignUp(page_offset + size, Memory::LUCINA3DS_PAGE_SIZE) >>
Memory::CITRA_PAGE_BITS; Memory::LUCINA3DS_PAGE_BITS;
// Skip when the size is zero and num_pages == 0 // Skip when the size is zero and num_pages == 0
if (size == 0) { if (size == 0) {
@ -174,8 +174,8 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
found->target_address, size); found->target_address, size);
} }
VAddr prev_reserve = page_start - Memory::CITRA_PAGE_SIZE; VAddr prev_reserve = page_start - Memory::LUCINA3DS_PAGE_SIZE;
VAddr next_reserve = page_start + num_pages * Memory::CITRA_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& prev_vma = src_process->vm_manager.FindVMA(prev_reserve)->second;
auto& next_vma = src_process->vm_manager.FindVMA(next_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 // Unmap the buffer and guard pages from the source process
Result result = Result result =
src_process->vm_manager.UnmapRange(page_start - Memory::CITRA_PAGE_SIZE, src_process->vm_manager.UnmapRange(page_start - Memory::LUCINA3DS_PAGE_SIZE,
(num_pages + 2) * Memory::CITRA_PAGE_SIZE); (num_pages + 2) * Memory::LUCINA3DS_PAGE_SIZE);
ASSERT(result == ResultSuccess); ASSERT(result == ResultSuccess);
mapped_buffer_context.erase(found); 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. // Create a buffer which contains the mapped buffer and two additional guard pages.
std::shared_ptr<BackingMem> buffer = 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, 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. // Map the guard pages and mapped pages at once.
target_address = target_address =
@ -215,18 +215,18 @@ Result TranslateCommandBuffer(Kernel::KernelSystem& kernel, Memory::MemorySystem
// Change the permissions and state of the guard pages. // Change the permissions and state of the guard pages.
const VAddr low_guard_address = target_address; const VAddr low_guard_address = target_address;
const VAddr high_guard_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( 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::ReadWrite, Kernel::MemoryState::Reserved,
Kernel::VMAPermission::None) == ResultSuccess); Kernel::VMAPermission::None) == ResultSuccess);
ASSERT(dst_process->vm_manager.ChangeMemoryState( 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::ReadWrite, Kernel::MemoryState::Reserved,
Kernel::VMAPermission::None) == ResultSuccess); Kernel::VMAPermission::None) == ResultSuccess);
// Get proper mapped buffer address and store it in the cmd buffer. // 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; cmd_buf[i++] = target_address + page_offset;
mapped_buffer_context.push_back({permissions, size, source_address, 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 // Mapped memory page
AddressMapping mapping; AddressMapping mapping;
mapping.address = descriptor << 12; mapping.address = descriptor << 12;
mapping.size = Memory::CITRA_PAGE_SIZE; mapping.size = Memory::LUCINA3DS_PAGE_SIZE;
mapping.read_only = false; mapping.read_only = false;
mapping.unk_flag = false; mapping.unk_flag = false;
@ -459,7 +459,7 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
auto base_memory_region = kernel.GetMemoryRegion(MemoryRegion::BASE); auto base_memory_region = kernel.GetMemoryRegion(MemoryRegion::BASE);
// Allocate some memory from the end of the linear heap for this region. // 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) { if (!offset) {
LOG_ERROR(Kernel_SVC, LOG_ERROR(Kernel_SVC,
"Not enough space in BASE linear region to allocate a new TLS page"); "Not enough space in BASE linear region to allocate a new TLS page");
@ -467,17 +467,17 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
} }
holding_tls_memory += holding_tls_memory +=
MemoryRegionInfo::Interval(*offset, *offset + Memory::CITRA_PAGE_SIZE); MemoryRegionInfo::Interval(*offset, *offset + Memory::LUCINA3DS_PAGE_SIZE);
memory_used += Memory::CITRA_PAGE_SIZE; memory_used += Memory::LUCINA3DS_PAGE_SIZE;
// The page is completely available at the start. // The page is completely available at the start.
tls_slots.emplace_back(0); tls_slots.emplace_back(0);
// Map the page to the current process' address space. // Map the page to the current process' address space.
auto tls_page_addr = 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), 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); LOG_DEBUG(Kernel, "Allocated TLS page at addr={:08X}", tls_page_addr);
} else { } else {
@ -488,7 +488,7 @@ ResultVal<VAddr> Process::AllocateThreadLocalStorage() {
tls_slots[tls_page].set(tls_slot); tls_slots[tls_page].set(tls_slot);
auto tls_address = Memory::TLS_AREA_VADDR + 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; static_cast<VAddr>(tls_slot) * Memory::TLS_ENTRY_SIZE;
kernel.memory.ZeroBlock(*this, tls_address, 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, KERNEL_STATE_REBOOT = 7,
// Special Citra only states. // Special Lucina3DS only states.
/** /**
* Sets the emulation speed percentage. A value of 0 means unthrottled. * 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 { struct PageInfo {
@ -125,10 +125,10 @@ enum class SystemInfoType {
*/ */
NEW_3DS_INFO = 0x10001, 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. * but can be used by homebrew applications to get some emulator info.
*/ */
CITRA_INFORMATION = 0x20000, LUCINA3DS_INFORMATION = 0x20000,
}; };
enum class ProcessInfoType { enum class ProcessInfoType {
@ -272,15 +272,15 @@ enum class SystemInfoMemUsageRegion {
/** /**
* Accepted by svcGetSystemInfo param with CITRA_INFORMATION type. Selects which information * 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 { enum class SystemInfoLucina3DSInformation {
IS_CITRA = 0, // Always set the output to 1, signaling the app is running on Citra. 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. 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. EMULATION_SPEED = 2, // Gets the emulation speed set by the user or by KernelSetState.
BUILD_NAME = 10, // (ie: Nightly, Canary). BUILD_NAME = 10, // (ie: Nightly, Canary).
BUILD_VERSION = 11, // Build version. 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_PART1 = 20, // Build date first 7 characters.
BUILD_DATE_PART2 = 21, // Build date next 7 characters. BUILD_DATE_PART2 = 21, // Build date next 7 characters.
BUILD_DATE_PART3 = 22, // 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. * Current officially supported platforms.
*/ */
enum class SystemInfoCitraPlatform { enum class SystemInfoLucina3DSPlatform {
PLATFORM_UNKNOWN = 0, PLATFORM_UNKNOWN = 0,
PLATFORM_WINDOWS = 1, PLATFORM_WINDOWS = 1,
PLATFORM_LINUX = 2, PLATFORM_LINUX = 2,
PLATFORM_APPLE = 3, PLATFORM_ANDROID = 3,
PLATFORM_ANDROID = 4, 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}", "size=0x{:X}, permissions=0x{:08X}",
operation, addr0, addr1, size, permissions); operation, addr0, addr1, size, permissions);
R_UNLESS((addr0 & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedAddress); R_UNLESS((addr0 & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedAddress);
R_UNLESS((addr1 & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedAddress); R_UNLESS((addr1 & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedAddress);
R_UNLESS((size & Memory::CITRA_PAGE_MASK) == 0, ResultMisalignedSize); R_UNLESS((size & Memory::LUCINA3DS_PAGE_MASK) == 0, ResultMisalignedSize);
const u32 region = operation & MEMOP_REGION_MASK; const u32 region = operation & MEMOP_REGION_MASK;
operation &= ~MEMOP_REGION_MASK; operation &= ~MEMOP_REGION_MASK;
@ -1440,8 +1440,8 @@ Result SVC::KernelSetState(u32 kernel_state, u32 varg1, u32 varg2) {
system.RequestShutdown(); system.RequestShutdown();
break; break;
// Citra specific states. // Lucina3DS specific states.
case KernelState::KERNEL_STATE_CITRA_EMULATION_SPEED: { case KernelState::KERNEL_STATE_LUCINA3DS_EMULATION_SPEED: {
u16 new_value = static_cast<u16>(varg1); u16 new_value = static_cast<u16>(varg1);
Settings::values.frame_limit.SetValue(new_value); Settings::values.frame_limit.SetValue(new_value);
} break; } 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 /// 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, Result SVC::CreateMemoryBlock(Handle* out_handle, u32 addr, u32 size, u32 my_permission,
u32 other_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; 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); LOG_ERROR(Kernel_SVC, "unimplemented GetSystemInfo type=65537 param={}", param);
*out = 0; *out = 0;
return (system.GetNumCores() == 4) ? ResultSuccess : ResultInvalidEnumValue; return (system.GetNumCores() == 4) ? ResultSuccess : ResultInvalidEnumValue;
case SystemInfoType::CITRA_INFORMATION: case SystemInfoType::LUCINA3DS_INFORMATION:
switch ((SystemInfoCitraInformation)param) { switch ((SystemInfoLucina3DSInformation)param) {
case SystemInfoCitraInformation::IS_CITRA: case SystemInfoLucina3DSInformation::IS_LUCINA3DS:
*out = 1; *out = 1;
break; break;
case SystemInfoCitraInformation::HOST_TICK: case SystemInfoLucina3DSInformation::HOST_TICK:
*out = static_cast<s64>(std::chrono::duration_cast<std::chrono::nanoseconds>( *out = static_cast<s64>(std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::steady_clock::now().time_since_epoch()) std::chrono::steady_clock::now().time_since_epoch())
.count()); .count());
break; break;
case SystemInfoCitraInformation::EMULATION_SPEED: case SystemInfoLucina3DSInformation::EMULATION_SPEED:
*out = static_cast<s64>(Settings::values.frame_limit.GetValue()); *out = static_cast<s64>(Settings::values.frame_limit.GetValue());
break; break;
case SystemInfoCitraInformation::BUILD_NAME: case SystemInfoLucina3DSInformation::BUILD_NAME:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_name, 0, sizeof(s64)); CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_name, 0, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_VERSION: case SystemInfoLucina3DSInformation::BUILD_VERSION:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_version, 0, sizeof(s64)); CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_version, 0, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_PLATFORM: { case SystemInfoLucina3DSInformation::BUILD_PLATFORM: {
#if defined(_WIN32) #if defined(_WIN32)
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_WINDOWS); *out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_WINDOWS);
#elif defined(ANDROID) #elif defined(ANDROID)
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_ANDROID); *out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_ANDROID);
#elif defined(__linux__) #elif defined(__linux__)
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_LINUX); *out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_LINUX);
#elif defined(__APPLE__) #elif defined(__APPLE__)
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_APPLE); *out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_APPLE);
#else #else
*out = static_cast<s64>(SystemInfoCitraPlatform::PLATFORM_UNKNOWN); *out = static_cast<s64>(SystemInfoLucina3DSPlatform::PLATFORM_UNKNOWN);
#endif #endif
break; break;
} }
case SystemInfoCitraInformation::BUILD_DATE_PART1: case SystemInfoLucina3DSInformation::BUILD_DATE_PART1:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date, CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
(sizeof(s64) - 1) * 0, sizeof(s64)); (sizeof(s64) - 1) * 0, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_DATE_PART2: case SystemInfoLucina3DSInformation::BUILD_DATE_PART2:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date, CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
(sizeof(s64) - 1) * 1, sizeof(s64)); (sizeof(s64) - 1) * 1, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_DATE_PART3: case SystemInfoLucina3DSInformation::BUILD_DATE_PART3:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date, CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
(sizeof(s64) - 1) * 2, sizeof(s64)); (sizeof(s64) - 1) * 2, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_DATE_PART4: case SystemInfoLucina3DSInformation::BUILD_DATE_PART4:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date, CopyStringPart(reinterpret_cast<char*>(out), Common::g_build_date,
(sizeof(s64) - 1) * 3, sizeof(s64)); (sizeof(s64) - 1) * 3, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_GIT_BRANCH_PART1: case SystemInfoLucina3DSInformation::BUILD_GIT_BRANCH_PART1:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch, CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch,
(sizeof(s64) - 1) * 0, sizeof(s64)); (sizeof(s64) - 1) * 0, sizeof(s64));
break; break;
case SystemInfoCitraInformation::BUILD_GIT_BRANCH_PART2: case SystemInfoLucina3DSInformation::BUILD_GIT_BRANCH_PART2:
CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch, CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_branch,
(sizeof(s64) - 1) * 1, sizeof(s64)); (sizeof(s64) - 1) * 1, sizeof(s64));
break; 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, CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_desc, (sizeof(s64) - 1) * 0,
sizeof(s64)); sizeof(s64));
break; 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, CopyStringPart(reinterpret_cast<char*>(out), Common::g_scm_desc, (sizeof(s64) - 1) * 1,
sizeof(s64)); sizeof(s64));
break; break;
default: default:
LOG_ERROR(Kernel_SVC, "unknown GetSystemInfo citra info param={}", param); LOG_ERROR(Kernel_SVC, "unknown GetSystemInfo lucina3ds info param={}", param);
*out = 0; *out = 0;
break; 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 // TODO(yuriks): Type 0 returns a slightly higher number than type 2, but I'm not sure
// what's the difference between them. // what's the difference between them.
*out = process->memory_used; *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"); LOG_ERROR(Kernel_SVC, "called, memory size not page-aligned");
return ResultMisalignedSize; return ResultMisalignedSize;
} }
@ -2047,7 +2047,7 @@ Result SVC::MapProcessMemoryEx(Handle dst_process_handle, u32 dst_address,
R_UNLESS(dst_process && src_process, ResultInvalidHandle); R_UNLESS(dst_process && src_process, ResultInvalidHandle);
if (size & 0xFFF) { if (size & 0xFFF) {
size = (size & ~0xFFF) + Memory::CITRA_PAGE_SIZE; size = (size & ~0xFFF) + Memory::LUCINA3DS_PAGE_SIZE;
} }
// TODO(PabloMK7) Fix-up this svc. // 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); R_UNLESS(dst_process, ResultInvalidHandle);
if (size & 0xFFF) { if (size & 0xFFF) {
size = (size & ~0xFFF) + Memory::CITRA_PAGE_SIZE; size = (size & ~0xFFF) + Memory::LUCINA3DS_PAGE_SIZE;
} }
// Only linear memory supported // Only linear memory supported

View File

@ -109,9 +109,9 @@ void Thread::Stop() {
ReleaseThreadMutexes(this); ReleaseThreadMutexes(this);
// Mark the TLS slot in the thread's page as free. // 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 = 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()) { if (auto process = owner_process.lock()) {
process->tls_slots[tls_page].reset(tls_slot); process->tls_slots[tls_page].reset(tls_slot);
process->resource_limit->Release(ResourceLimitType::Thread, 1); 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) { 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((size & Memory::LUCINA3DS_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((base & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", base);
VMAIter vma_handle = StripIterConstness(FindVMA(base)); VMAIter vma_handle = StripIterConstness(FindVMA(base));
if (vma_handle == vma_map.end()) { 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) { 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((size & Memory::LUCINA3DS_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((target & Memory::LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:#010X}", target);
const VAddr target_end = target + size; const VAddr target_end = target + size;
ASSERT(target_end >= target); ASSERT(target_end >= target);

View File

@ -38,7 +38,7 @@ constexpr u8 DEFAULT_SOUND_OUTPUT_MODE = SOUND_STEREO;
// constants. // constants.
constexpr u64_le DEFAULT_CONSOLE_ID = 0; constexpr u64_le DEFAULT_CONSOLE_ID = 0;
constexpr u32_le DEFAULT_CONSOLE_RANDOM_NUMBER = 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 BirthdayBlock DEFAULT_BIRTHDAY{3, 25}; // March 25th, 2014
constexpr u8 DEFAULT_LANGUAGE = LANGUAGE_EN; constexpr u8 DEFAULT_LANGUAGE = LANGUAGE_EN;
constexpr ConsoleCountryInfo DEFAULT_COUNTRY_INFO{ 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) { void CSND_SND::Initialize(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(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>(); master_state_offset = rp.Pop<u32>();
channel_state_offset = rp.Pop<u32>(); channel_state_offset = rp.Pop<u32>();
capture_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; u32 fixed_size = fix_end - module_address;
SetField(FixedSize, fixed_size); SetField(FixedSize, fixed_size);
@ -1523,8 +1523,8 @@ std::tuple<VAddr, u32> CROHelper::GetExecutablePages() const {
SegmentEntry entry; SegmentEntry entry;
GetEntry(system.Memory(), i, entry); GetEntry(system.Memory(), i, entry);
if (entry.type == SegmentType::Code && entry.size != 0) { if (entry.type == SegmentType::Code && entry.size != 0) {
VAddr begin = Common::AlignDown(entry.offset, Memory::CITRA_PAGE_SIZE); VAddr begin = Common::AlignDown(entry.offset, Memory::LUCINA3DS_PAGE_SIZE);
VAddr end = Common::AlignUp(entry.offset + entry.size, Memory::CITRA_PAGE_SIZE); VAddr end = Common::AlignUp(entry.offset + entry.size, Memory::LUCINA3DS_PAGE_SIZE);
return std::make_tuple(begin, end - begin); return std::make_tuple(begin, end - begin);
} }
} }

View File

@ -87,19 +87,19 @@ void RO::Initialize(Kernel::HLERequestContext& ctx) {
return; 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"); LOG_ERROR(Service_LDR, "CRS original address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
return; 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"); LOG_ERROR(Service_LDR, "CRS mapping address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
return; return;
} }
if (crs_size & Memory::CITRA_PAGE_MASK) { if (crs_size & Memory::LUCINA3DS_PAGE_MASK) {
LOG_ERROR(Service_LDR, "CRS size is not aligned"); LOG_ERROR(Service_LDR, "CRS size is not aligned");
rb.Push(ERROR_MISALIGNED_SIZE); rb.Push(ERROR_MISALIGNED_SIZE);
return; return;
@ -207,21 +207,21 @@ void RO::LoadCRO(Kernel::HLERequestContext& ctx, bool link_on_load_bug_fix) {
return; 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"); LOG_ERROR(Service_LDR, "CRO original address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
rb.Push<u32>(0); rb.Push<u32>(0);
return; 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"); LOG_ERROR(Service_LDR, "CRO mapping address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
rb.Push<u32>(0); rb.Push<u32>(0);
return; return;
} }
if (cro_size & Memory::CITRA_PAGE_MASK) { if (cro_size & Memory::LUCINA3DS_PAGE_MASK) {
LOG_ERROR(Service_LDR, "CRO size is not aligned"); LOG_ERROR(Service_LDR, "CRO size is not aligned");
rb.Push(ERROR_MISALIGNED_SIZE); rb.Push(ERROR_MISALIGNED_SIZE);
rb.Push<u32>(0); rb.Push<u32>(0);
@ -354,7 +354,7 @@ void RO::UnloadCRO(Kernel::HLERequestContext& ctx) {
return; return;
} }
if (cro_address & Memory::CITRA_PAGE_MASK) { if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
LOG_ERROR(Service_LDR, "CRO address is not aligned"); LOG_ERROR(Service_LDR, "CRO address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
return; return;
@ -421,7 +421,7 @@ void RO::LinkCRO(Kernel::HLERequestContext& ctx) {
return; return;
} }
if (cro_address & Memory::CITRA_PAGE_MASK) { if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
LOG_ERROR(Service_LDR, "CRO address is not aligned"); LOG_ERROR(Service_LDR, "CRO address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
return; return;
@ -461,7 +461,7 @@ void RO::UnlinkCRO(Kernel::HLERequestContext& ctx) {
return; return;
} }
if (cro_address & Memory::CITRA_PAGE_MASK) { if (cro_address & Memory::LUCINA3DS_PAGE_MASK) {
LOG_ERROR(Service_LDR, "CRO address is not aligned"); LOG_ERROR(Service_LDR, "CRO address is not aligned");
rb.Push(ERROR_MISALIGNED_ADDRESS); rb.Push(ERROR_MISALIGNED_ADDRESS);
return; return;

View File

@ -128,13 +128,13 @@ ResultStatus Apploader_Artic::LoadExec(std::shared_ptr<Kernel::Process>& process
codeset->CodeSegment().offset = 0; codeset->CodeSegment().offset = 0;
codeset->CodeSegment().addr = program_exheader.codeset_info.text.address; codeset->CodeSegment().addr = program_exheader.codeset_info.text.address;
codeset->CodeSegment().size = 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->RODataSegment().offset =
codeset->CodeSegment().offset + codeset->CodeSegment().size; codeset->CodeSegment().offset + codeset->CodeSegment().size;
codeset->RODataSegment().addr = program_exheader.codeset_info.ro.address; codeset->RODataSegment().addr = program_exheader.codeset_info.ro.address;
codeset->RODataSegment().size = 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 // 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. // 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->RODataSegment().offset + codeset->RODataSegment().size;
codeset->DataSegment().addr = program_exheader.codeset_info.data.address; codeset->DataSegment().addr = program_exheader.codeset_info.data.address;
codeset->DataSegment().size = 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; bss_page_size;
// Apply patches now that the entire codeset (including .bss) has been allocated // 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) if (!client_connected)
return ResultStatus::ErrorArtic; return ResultStatus::ErrorArtic;
size_t code_size = program_exheader.codeset_info.text.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::CITRA_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::CITRA_PAGE_SIZE; code_size += program_exheader.codeset_info.data.num_max_pages * Memory::LUCINA3DS_PAGE_SIZE;
size_t read_amount = 0; size_t read_amount = 0;
buffer.clear(); buffer.clear();

View File

@ -120,13 +120,13 @@ ResultStatus AppLoader_NCCH::LoadExec(std::shared_ptr<Kernel::Process>& process)
codeset->CodeSegment().offset = 0; codeset->CodeSegment().offset = 0;
codeset->CodeSegment().addr = overlay_ncch->exheader_header.codeset_info.text.address; codeset->CodeSegment().addr = overlay_ncch->exheader_header.codeset_info.text.address;
codeset->CodeSegment().size = 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->RODataSegment().offset =
codeset->CodeSegment().offset + codeset->CodeSegment().size; codeset->CodeSegment().offset + codeset->CodeSegment().size;
codeset->RODataSegment().addr = overlay_ncch->exheader_header.codeset_info.ro.address; codeset->RODataSegment().addr = overlay_ncch->exheader_header.codeset_info.ro.address;
codeset->RODataSegment().size = 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 // 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. // 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().addr = overlay_ncch->exheader_header.codeset_info.data.address;
codeset->DataSegment().size = codeset->DataSegment().size =
overlay_ncch->exheader_header.codeset_info.data.num_max_pages * overlay_ncch->exheader_header.codeset_info.data.num_max_pages *
Memory::CITRA_PAGE_SIZE + Memory::LUCINA3DS_PAGE_SIZE +
bss_page_size; bss_page_size;
// Apply patches now that the entire codeset (including .bss) has been allocated // Apply patches now that the entire codeset (including .bss) has been allocated

View File

@ -54,24 +54,24 @@ public:
private: private:
bool* At(VAddr addr) { bool* At(VAddr addr) {
if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) { 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) { 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) { 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) { 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; return nullptr;
} }
std::array<bool, VRAM_SIZE / CITRA_PAGE_SIZE> vram{}; std::array<bool, VRAM_SIZE / LUCINA3DS_PAGE_SIZE> vram{};
std::array<bool, LINEAR_HEAP_SIZE / CITRA_PAGE_SIZE> linear_heap{}; std::array<bool, LINEAR_HEAP_SIZE / LUCINA3DS_PAGE_SIZE> linear_heap{};
std::array<bool, NEW_LINEAR_HEAP_SIZE / CITRA_PAGE_SIZE> new_linear_heap{}; std::array<bool, NEW_LINEAR_HEAP_SIZE / LUCINA3DS_PAGE_SIZE> new_linear_heap{};
std::array<bool, PLUGIN_3GX_FB_SIZE / CITRA_PAGE_SIZE> plugin_fb{}; std::array<bool, PLUGIN_3GX_FB_SIZE / LUCINA3DS_PAGE_SIZE> plugin_fb{};
static_assert(sizeof(bool) == 1); static_assert(sizeof(bool) == 1);
friend class boost::serialization::access; friend class boost::serialization::access;
@ -161,13 +161,13 @@ public:
auto& page_table = *process.vm_manager.page_table; auto& page_table = *process.vm_manager.page_table;
std::size_t remaining_size = size; std::size_t remaining_size = size;
std::size_t page_index = src_addr >> CITRA_PAGE_BITS; std::size_t page_index = src_addr >> LUCINA3DS_PAGE_BITS;
std::size_t page_offset = src_addr & CITRA_PAGE_MASK; std::size_t page_offset = src_addr & LUCINA3DS_PAGE_MASK;
while (remaining_size > 0) { 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 = 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]) { switch (page_table.attributes[page_index]) {
case PageType::Unmapped: { case PageType::Unmapped: {
@ -210,13 +210,13 @@ public:
const void* src_buffer, const std::size_t size) { const void* src_buffer, const std::size_t size) {
auto& page_table = *process.vm_manager.page_table; auto& page_table = *process.vm_manager.page_table;
std::size_t remaining_size = size; std::size_t remaining_size = size;
std::size_t page_index = dest_addr >> CITRA_PAGE_BITS; std::size_t page_index = dest_addr >> LUCINA3DS_PAGE_BITS;
std::size_t page_offset = dest_addr & CITRA_PAGE_MASK; std::size_t page_offset = dest_addr & LUCINA3DS_PAGE_MASK;
while (remaining_size > 0) { 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 = 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]) { switch (page_table.attributes[page_index]) {
case PageType::Unmapped: { 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, void MemorySystem::MapPages(PageTable& page_table, u32 base, u32 size, MemoryRef memory,
PageType type) { PageType type) {
LOG_DEBUG(HW_Memory, "Mapping {} onto {:08X}-{:08X}", (void*)memory.GetPtr(), 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()) { if (impl->system.IsPoweredOn()) {
RasterizerFlushVirtualRegion(base << CITRA_PAGE_BITS, size * CITRA_PAGE_SIZE, RasterizerFlushVirtualRegion(base << LUCINA3DS_PAGE_BITS, size * LUCINA3DS_PAGE_SIZE,
FlushMode::FlushAndInvalidate); FlushMode::FlushAndInvalidate);
} }
@ -408,27 +408,27 @@ void MemorySystem::MapPages(PageTable& page_table, u32 base, u32 size, MemoryRef
page_table.pointers[base] = memory; page_table.pointers[base] = memory;
// If the memory to map is already rasterizer-cached, mark the page // 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.attributes[base] = PageType::RasterizerCachedMemory;
page_table.pointers[base] = nullptr; page_table.pointers[base] = nullptr;
} }
base += 1; base += 1;
if (memory != nullptr && memory.GetSize() > CITRA_PAGE_SIZE) if (memory != nullptr && memory.GetSize() > LUCINA3DS_PAGE_SIZE)
memory += CITRA_PAGE_SIZE; memory += LUCINA3DS_PAGE_SIZE;
} }
} }
void MemorySystem::MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, MemoryRef target) { 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((size & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
ASSERT_MSG((base & CITRA_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base); ASSERT_MSG((base & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
MapPages(page_table, base / CITRA_PAGE_SIZE, size / CITRA_PAGE_SIZE, target, PageType::Memory); MapPages(page_table, base / LUCINA3DS_PAGE_SIZE, size / LUCINA3DS_PAGE_SIZE, target, PageType::Memory);
} }
void MemorySystem::UnmapRegion(PageTable& page_table, VAddr base, u32 size) { 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((size & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned size: {:08X}", size);
ASSERT_MSG((base & CITRA_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base); ASSERT_MSG((base & LUCINA3DS_PAGE_MASK) == 0, "non-page aligned base: {:08X}", base);
MapPages(page_table, base / CITRA_PAGE_SIZE, size / CITRA_PAGE_SIZE, nullptr, MapPages(page_table, base / LUCINA3DS_PAGE_SIZE, size / LUCINA3DS_PAGE_SIZE, nullptr,
PageType::Unmapped); PageType::Unmapped);
} }
@ -449,11 +449,11 @@ void MemorySystem::UnregisterPageTable(std::shared_ptr<PageTable> page_table) {
template <typename T> template <typename T>
T MemorySystem::Read(const VAddr vaddr) { 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) { if (page_pointer) {
// NOTE: Avoid adding any extra logic to this fast-path block // NOTE: Avoid adding any extra logic to this fast-path block
T value; 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; 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) { switch (type) {
case PageType::Unmapped: case PageType::Unmapped:
LOG_ERROR(HW_Memory, "unmapped Read{} @ 0x{:08X} at PC 0x{:08X}", sizeof(T) * 8, vaddr, 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> template <typename T>
void MemorySystem::Write(const VAddr vaddr, const T data) { 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) { if (page_pointer) {
// NOTE: Avoid adding any extra logic to this fast-path block // 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; 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) { switch (type) {
case PageType::Unmapped: case PageType::Unmapped:
LOG_ERROR(HW_Memory, "unmapped Write{} 0x{:08X} @ 0x{:08X} at PC 0x{:08X}", 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> template <typename T>
bool MemorySystem::WriteExclusive(const VAddr vaddr, const T data, const T expected) { 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) { if (page_pointer) {
const auto volatile_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); 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) { switch (type) {
case PageType::Unmapped: case PageType::Unmapped:
LOG_ERROR(HW_Memory, "unmapped Write{} 0x{:08X} @ 0x{:08X} at PC 0x{:08X}", 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) { bool MemorySystem::IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) {
auto& page_table = *process.vm_manager.page_table; 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) { if (page_pointer) {
return true; return true;
} }
if (page_table.attributes[vaddr >> CITRA_PAGE_BITS] == PageType::RasterizerCachedMemory) { if (page_table.attributes[vaddr >> LUCINA3DS_PAGE_BITS] == PageType::RasterizerCachedMemory) {
return true; return true;
} }
@ -591,12 +591,12 @@ bool MemorySystem::IsValidPhysicalAddress(const PAddr paddr) const {
} }
u8* MemorySystem::GetPointer(const VAddr vaddr) { 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) { 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) { PageType::RasterizerCachedMemory) {
return GetPointerForRasterizerCache(vaddr); return GetPointerForRasterizerCache(vaddr);
} }
@ -606,12 +606,12 @@ u8* MemorySystem::GetPointer(const VAddr vaddr) {
} }
const u8* MemorySystem::GetPointer(const VAddr vaddr) const { 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) { 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) { PageType::RasterizerCachedMemory) {
return GetPointerForRasterizerCache(vaddr); return GetPointerForRasterizerCache(vaddr);
} }
@ -720,14 +720,14 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
return; 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; 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)) { for (VAddr vaddr : PhysicalToVirtualAddressForRasterizer(paddr)) {
impl->cache_marker.Mark(vaddr, cached); impl->cache_marker.Mark(vaddr, cached);
for (auto& page_table : impl->page_table_list) { 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) { if (cached) {
// Switch page type to cached if now cached // Switch page type to cached if now cached
@ -738,7 +738,7 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
break; break;
case PageType::Memory: case PageType::Memory:
page_type = PageType::RasterizerCachedMemory; page_type = PageType::RasterizerCachedMemory;
page_table->pointers[vaddr >> CITRA_PAGE_BITS] = nullptr; page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS] = nullptr;
break; break;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -752,8 +752,8 @@ void MemorySystem::RasterizerMarkRegionCached(PAddr start, u32 size, bool cached
break; break;
case PageType::RasterizerCachedMemory: { case PageType::RasterizerCachedMemory: {
page_type = PageType::Memory; page_type = PageType::Memory;
page_table->pointers[vaddr >> CITRA_PAGE_BITS] = page_table->pointers[vaddr >> LUCINA3DS_PAGE_BITS] =
GetPointerForRasterizerCache(vaddr & ~CITRA_PAGE_MASK); GetPointerForRasterizerCache(vaddr & ~LUCINA3DS_PAGE_MASK);
break; break;
} }
default: default:
@ -838,13 +838,13 @@ void MemorySystem::ZeroBlock(const Kernel::Process& process, const VAddr dest_ad
const std::size_t size) { const std::size_t size) {
auto& page_table = *process.vm_manager.page_table; auto& page_table = *process.vm_manager.page_table;
std::size_t remaining_size = size; std::size_t remaining_size = size;
std::size_t page_index = dest_addr >> CITRA_PAGE_BITS; std::size_t page_index = dest_addr >> LUCINA3DS_PAGE_BITS;
std::size_t page_offset = dest_addr & CITRA_PAGE_MASK; std::size_t page_offset = dest_addr & LUCINA3DS_PAGE_MASK;
while (remaining_size > 0) { 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 = 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]) { switch (page_table.attributes[page_index]) {
case PageType::Unmapped: { case PageType::Unmapped: {
@ -887,13 +887,13 @@ void MemorySystem::CopyBlock(const Kernel::Process& dest_process,
std::size_t size) { std::size_t size) {
auto& page_table = *src_process.vm_manager.page_table; auto& page_table = *src_process.vm_manager.page_table;
std::size_t remaining_size = size; std::size_t remaining_size = size;
std::size_t page_index = src_addr >> CITRA_PAGE_BITS; std::size_t page_index = src_addr >> LUCINA3DS_PAGE_BITS;
std::size_t page_offset = src_addr & CITRA_PAGE_MASK; std::size_t page_offset = src_addr & LUCINA3DS_PAGE_MASK;
while (remaining_size > 0) { 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 = 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]) { switch (page_table.attributes[page_index]) {
case PageType::Unmapped: { 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 * Page size used by the ARM architecture. This is the smallest granularity with which memory can
* be mapped. * be mapped.
*/ */
constexpr u32 CITRA_PAGE_SIZE = 0x1000; constexpr u32 LUCINA3DS_PAGE_SIZE = 0x1000;
constexpr u32 CITRA_PAGE_MASK = CITRA_PAGE_SIZE - 1; constexpr u32 LUCINA3DS_PAGE_MASK = LUCINA3DS_PAGE_SIZE - 1;
constexpr int CITRA_PAGE_BITS = 12; constexpr int LUCINA3DS_PAGE_BITS = 12;
constexpr std::size_t PAGE_TABLE_NUM_ENTRIES = 1 << (32 - CITRA_PAGE_BITS); constexpr std::size_t PAGE_TABLE_NUM_ENTRIES = 1 << (32 - LUCINA3DS_PAGE_BITS);
enum class PageType { enum class PageType {
/// Page is unmapped and should cause an access error. /// 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) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
add_executable(citra-room add_executable(lucina3ds-room
precompiled_headers.h precompiled_headers.h
citra-room.cpp lucina3ds-room.cpp
citra-room.rc 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) if (ENABLE_WEB_SERVICE)
target_link_libraries(citra-room PRIVATE web_service) target_link_libraries(lucina3ds-room PRIVATE web_service)
endif() endif()
target_link_libraries(citra-room PRIVATE cryptopp) target_link_libraries(lucina3ds-room PRIVATE cryptopp)
if (MSVC) if (MSVC)
target_link_libraries(citra-room PRIVATE getopt) target_link_libraries(lucina3ds-room PRIVATE getopt)
endif() 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) 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() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(citra-room PRIVATE precompiled_headers.h) target_precompile_headers(lucina3ds-room PRIVATE precompiled_headers.h)
endif() endif()
# Bundle in-place on MSVC so dependencies can be resolved by builds. # Bundle in-place on MSVC so dependencies can be resolved by builds.
if (MSVC) if (MSVC)
include(BundleTarget) include(BundleTarget)
bundle_target_in_place(citra-room) bundle_target_in_place(lucina3ds-room)
endif() endif()

View File

@ -56,18 +56,18 @@ static void PrintHelp(const char* argv0) {
"--web-api-url Citra Web API url\n" "--web-api-url Citra Web API url\n"
"--ban-list-file The file for storing the room ban list\n" "--ban-list-file The file for storing the room ban list\n"
"--log-file The file for storing the room log\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" "-h, --help Display this help and exit\n"
"-v, --version Output version information and exit\n"; "-v, --version Output version information and exit\n";
} }
static void PrintVersion() { 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; << " Libnetwork: " << Network::network_version << std::endl;
} }
/// The magic text at the beginning of a citra-room ban list file. /// The magic text at the beginning of a lucina3ds-room ban list file.
static constexpr char BanListMagic[] = "CitraRoom-BanList-1"; static constexpr char BanListMagic[] = "Lucina3DSRoom-BanList-1";
static constexpr char token_delimiter{':'}; static constexpr char token_delimiter{':'};
@ -169,11 +169,11 @@ int main(int argc, char** argv) {
std::string token; std::string token;
std::string web_api_url; std::string web_api_url;
std::string ban_list_file; std::string ban_list_file;
std::string log_file = "citra-room.log"; std::string log_file = "lucina3ds-room.log";
u64 preferred_game_id = 0; u64 preferred_game_id = 0;
u16 port = Network::DefaultRoomPort; u16 port = Network::DefaultRoomPort;
u32 max_members = 16; u32 max_members = 16;
bool enable_citra_mods = false; bool enable_lucina3ds_mods = false;
static struct option long_options[] = { static struct option long_options[] = {
{"room-name", required_argument, 0, 'n'}, {"room-name", required_argument, 0, 'n'},
@ -188,7 +188,7 @@ int main(int argc, char** argv) {
{"web-api-url", required_argument, 0, 'a'}, {"web-api-url", required_argument, 0, 'a'},
{"ban-list-file", required_argument, 0, 'b'}, {"ban-list-file", required_argument, 0, 'b'},
{"log-file", required_argument, 0, 'l'}, {"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'}, {"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'v'}, {"version", no_argument, 0, 'v'},
{0, 0, 0, 0}, {0, 0, 0, 0},
@ -235,7 +235,7 @@ int main(int argc, char** argv) {
log_file.assign(optarg); log_file.assign(optarg);
break; break;
case 'e': case 'e':
enable_citra_mods = true; enable_lucina3ds_mods = true;
break; break;
case 'h': case 'h':
PrintHelp(argv[0]); PrintHelp(argv[0]);
@ -289,19 +289,19 @@ int main(int argc, char** argv) {
if (username.empty()) { if (username.empty()) {
std::cout << "Hosting a public room\n\n"; std::cout << "Hosting a public room\n\n";
NetSettings::values.web_api_url = web_api_url; NetSettings::values.web_api_url = web_api_url;
NetSettings::values.citra_username = UsernameFromDisplayToken(token); NetSettings::values.lucina3ds_username = UsernameFromDisplayToken(token);
username = NetSettings::values.citra_username; username = NetSettings::values.lucina3ds_username;
NetSettings::values.citra_token = TokenFromDisplayToken(token); NetSettings::values.lucina3ds_token = TokenFromDisplayToken(token);
} else { } else {
std::cout << "Hosting a public room\n\n"; std::cout << "Hosting a public room\n\n";
NetSettings::values.web_api_url = web_api_url; NetSettings::values.web_api_url = web_api_url;
NetSettings::values.citra_username = username; NetSettings::values.lucina3ds_username = username;
NetSettings::values.citra_token = token; NetSettings::values.lucina3ds_token = token;
} }
} }
if (!announce && enable_citra_mods) { if (!announce && enable_lucina3ds_mods) {
enable_citra_mods = false; enable_lucina3ds_mods = false;
std::cout << "Can not enable Citra Moderators for private rooms\n\n"; std::cout << "Can not enable lucina3ds Moderators for private rooms\n\n";
} }
InitializeLogging(log_file); InitializeLogging(log_file);
@ -319,7 +319,7 @@ int main(int argc, char** argv) {
std::make_unique<WebService::VerifyUserJWT>(NetSettings::values.web_api_url); std::make_unique<WebService::VerifyUserJWT>(NetSettings::values.web_api_url);
#else #else
std::cout 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>(); verify_backend = std::make_unique<Network::VerifyUser::NullBackend>();
#endif #endif
} else { } else {
@ -330,7 +330,7 @@ int main(int argc, char** argv) {
if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) { if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) {
if (!room->Create(room_name, room_description, "", port, password, max_members, username, if (!room->Create(room_name, room_description, "", port, password, max_members, username,
preferred_game, preferred_game_id, std::move(verify_backend), ban_list, 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"; std::cout << "Failed to create room: \n\n";
return -1; return -1;
} }

View File

@ -6,7 +6,7 @@
// Icon with lowest ID value placed first to ensure application icon // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems. // 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 // RT_MANIFEST
// //
0 RT_MANIFEST "../../dist/citra.manifest" 0 RT_MANIFEST "../../dist/lucina3ds.manifest"

View File

@ -42,8 +42,8 @@ if(ENABLE_LIBUSB)
endif() endif()
create_target_directory_groups(input_common) 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) target_precompile_headers(input_common PRIVATE precompiled_headers.h)
endif() endif()

View File

@ -1,8 +1,8 @@
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
add_executable(citra add_executable(lucina3ds
citra.cpp lucina3ds.cpp
citra.rc lucina3ds.rc
config.cpp config.cpp
config.h config.h
default_ini.h default_ini.h
@ -13,47 +13,47 @@ add_executable(citra
) )
if (ENABLE_SOFTWARE_RENDERER) 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.cpp
emu_window/emu_window_sdl2_sw.h emu_window/emu_window_sdl2_sw.h
) )
endif() endif()
if (ENABLE_OPENGL) if (ENABLE_OPENGL)
target_sources(citra PRIVATE target_sources(lucina3ds PRIVATE
emu_window/emu_window_sdl2_gl.cpp emu_window/emu_window_sdl2_gl.cpp
emu_window/emu_window_sdl2_gl.h emu_window/emu_window_sdl2_gl.h
) )
endif() endif()
if (ENABLE_VULKAN) if (ENABLE_VULKAN)
target_sources(citra PRIVATE target_sources(lucina3ds PRIVATE
emu_window/emu_window_sdl2_vk.cpp emu_window/emu_window_sdl2_vk.cpp
emu_window/emu_window_sdl2_vk.h emu_window/emu_window_sdl2_vk.h
) )
endif() 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(lucina3ds PRIVATE lucina3ds_common lucina3ds_core input_common network)
target_link_libraries(citra PRIVATE inih) target_link_libraries(lucina3ds PRIVATE inih)
if (MSVC) if (MSVC)
target_link_libraries(citra PRIVATE getopt) target_link_libraries(lucina3ds PRIVATE getopt)
endif() 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) if (ENABLE_OPENGL)
target_link_libraries(citra PRIVATE glad) target_link_libraries(lucina3ds PRIVATE glad)
endif() endif()
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
install(TARGETS citra RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") install(TARGETS lucina3ds RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
endif() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(citra PRIVATE precompiled_headers.h) target_precompile_headers(lucina3ds PRIVATE precompiled_headers.h)
endif() endif()
# Bundle in-place on MSVC so dependencies can be resolved by builds. # Bundle in-place on MSVC so dependencies can be resolved by builds.
if (MSVC) if (MSVC)
include(BundleTarget) include(BundleTarget)
bundle_target_in_place(citra) bundle_target_in_place(lucina3ds)
endif() endif()

View File

@ -8,8 +8,8 @@
#include <type_traits> #include <type_traits>
#include <INIReader.h> #include <INIReader.h>
#include <SDL.h> #include <SDL.h>
#include "citra/config.h" #include "lucina3ds/config.h"
#include "citra/default_ini.h" #include "lucina3ds/default_ini.h"
#include "common/file_util.h" #include "common/file_util.h"
#include "common/logging/backend.h" #include "common/logging/backend.h"
#include "common/logging/log.h" #include "common/logging/log.h"
@ -334,8 +334,8 @@ void Config::ReadValues() {
// Web Service // Web Service
NetSettings::values.web_api_url = NetSettings::values.web_api_url =
sdl2_config->GetString("WebService", "web_api_url", "https://api.citra-emu.org"); sdl2_config->GetString("WebService", "web_api_url", "https://api.citra-emu.org");
NetSettings::values.citra_username = sdl2_config->GetString("WebService", "citra_username", ""); NetSettings::values.lucina3ds_username = sdl2_config->GetString("WebService", "citra_username", "");
NetSettings::values.citra_token = sdl2_config->GetString("WebService", "citra_token", ""); NetSettings::values.lucina3ds_token = sdl2_config->GetString("WebService", "citra_token", "");
// Video Dumping // Video Dumping
Settings::values.output_format = Settings::values.output_format =

View File

@ -7,7 +7,7 @@
#include <string> #include <string>
#define SDL_MAIN_HANDLED #define SDL_MAIN_HANDLED
#include <SDL.h> #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/logging/log.h"
#include "common/scm_rev.h" #include "common/scm_rev.h"
#include "core/core.h" #include "core/core.h"
@ -243,7 +243,7 @@ void EmuWindow_SDL2::UpdateFramerateCounter() {
if (current_time > last_time + 2000) { if (current_time > last_time + 2000) {
const auto results = system.GetAndResetPerfStats(); const auto results = system.GetAndResetPerfStats();
const auto title = 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, Common::g_scm_branch, Common::g_scm_desc, results.game_fps,
results.emulation_speed * 100.0f); results.emulation_speed * 100.0f);
SDL_SetWindowTitle(render_window, title.c_str()); SDL_SetWindowTitle(render_window, title.c_str());

View File

@ -8,7 +8,7 @@
#define SDL_MAIN_HANDLED #define SDL_MAIN_HANDLED
#include <SDL.h> #include <SDL.h>
#include <glad/glad.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/scm_rev.h"
#include "common/settings.h" #include "common/settings.h"
#include "core/core.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); 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); Common::g_scm_branch, Common::g_scm_desc);
// First, try to create a context with the requested type. // First, try to create a context with the requested type.

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include "citra/emu_window/emu_window_sdl2.h" #include "lucina3ds/emu_window/emu_window_sdl2.h"
struct SDL_Window; struct SDL_Window;

View File

@ -8,7 +8,7 @@
#define SDL_MAIN_HANDLED #define SDL_MAIN_HANDLED
#include <SDL.h> #include <SDL.h>
#include <SDL_rect.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/scm_rev.h"
#include "common/settings.h" #include "common/settings.h"
#include "core/core.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_SW::EmuWindow_SDL2_SW(Core::System& system_, bool fullscreen, bool is_secondary)
: EmuWindow_SDL2{system_, is_secondary}, system{system_} { : 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); Common::g_scm_branch, Common::g_scm_desc);
render_window = render_window =
SDL_CreateWindow(window_title.c_str(), SDL_CreateWindow(window_title.c_str(),

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include "citra/emu_window/emu_window_sdl2.h" #include "lucina3ds/emu_window/emu_window_sdl2.h"
struct SDL_Renderer; struct SDL_Renderer;
struct SDL_Surface; struct SDL_Surface;

View File

@ -8,7 +8,7 @@
#include <SDL.h> #include <SDL.h>
#include <SDL_syswm.h> #include <SDL_syswm.h>
#include <fmt/format.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/logging/log.h"
#include "common/scm_rev.h" #include "common/scm_rev.h"
#include "core/frontend/emu_window.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_VK::EmuWindow_SDL2_VK(Core::System& system, bool fullscreen, bool is_secondary)
: EmuWindow_SDL2{system, 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); Common::g_scm_branch, Common::g_scm_desc);
render_window = render_window =
SDL_CreateWindow(window_title.c_str(), SDL_CreateWindow(window_title.c_str(),

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include "citra/emu_window/emu_window_sdl2.h" #include "lucina3ds/emu_window/emu_window_sdl2.h"
namespace Frontend { namespace Frontend {
class GraphicsContext; class GraphicsContext;

View File

@ -11,16 +11,16 @@
// This needs to be included before getopt.h because the latter #defines symbols used by it // This needs to be included before getopt.h because the latter #defines symbols used by it
#include "common/microprofile.h" #include "common/microprofile.h"
#include "citra/config.h" #include "lucina3ds/config.h"
#include "citra/emu_window/emu_window_sdl2.h" #include "lucina3ds/emu_window/emu_window_sdl2.h"
#ifdef ENABLE_OPENGL #ifdef ENABLE_OPENGL
#include "citra/emu_window/emu_window_sdl2_gl.h" #include "lucina3ds/emu_window/emu_window_sdl2_gl.h"
#endif #endif
#ifdef ENABLE_SOFTWARE_RENDERER #ifdef ENABLE_SOFTWARE_RENDERER
#include "citra/emu_window/emu_window_sdl2_sw.h" #include "lucina3ds/emu_window/emu_window_sdl2_sw.h"
#endif #endif
#ifdef ENABLE_VULKAN #ifdef ENABLE_VULKAN
#include "citra/emu_window/emu_window_sdl2_vk.h" #include "lucina3ds/emu_window/emu_window_sdl2_vk.h"
#endif #endif
#include "common/common_paths.h" #include "common/common_paths.h"
#include "common/detached_tasks.h" #include "common/detached_tasks.h"
@ -83,7 +83,7 @@ static void PrintHelp(const char* argv0) {
} }
static void PrintVersion() { 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) { static void OnStateChanged(const Network::RoomMember::State& state) {
@ -399,7 +399,7 @@ int main(int argc, char** argv) {
const auto scope = emu_window->Acquire(); 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); Common::g_scm_desc);
Settings::LogSettings(); Settings::LogSettings();
@ -415,7 +415,7 @@ int main(int argc, char** argv) {
return -1; return -1;
case Core::System::ResultStatus::ErrorLoader_ErrorEncrypted: case Core::System::ResultStatus::ErrorLoader_ErrorEncrypted:
LOG_CRITICAL(Frontend, "The game that you are trying to load must be decrypted before " 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: " "decrypting games, please refer to: "
"https://citra-emu.org/wiki/dumping-game-cartridges/"); "https://citra-emu.org/wiki/dumping-game-cartridges/");
return -1; return -1;

View File

@ -6,7 +6,7 @@
// Icon with lowest ID value placed first to ensure application icon // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems. // 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 // 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) cmake_policy(SET CMP0071 NEW)
endif() endif()
add_executable(citra-qt add_executable(lucina3ds-qt
aboutdialog.cpp aboutdialog.cpp
aboutdialog.h aboutdialog.h
aboutdialog.ui aboutdialog.ui
@ -27,7 +27,7 @@ add_executable(citra-qt
camera/qt_camera_base.h camera/qt_camera_base.h
camera/qt_multimedia_camera.cpp camera/qt_multimedia_camera.cpp
camera/qt_multimedia_camera.h camera/qt_multimedia_camera.h
citra-qt.rc lucina3ds-qt.rc
compatdb.cpp compatdb.cpp
compatdb.h compatdb.h
compatdb.ui 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/*) file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*)
if (ENABLE_QT_UPDATER) if (ENABLE_QT_UPDATER)
target_sources(citra-qt PRIVATE target_sources(lucina3ds-qt PRIVATE
updater/updater.cpp updater/updater.cpp
updater/updater.h updater/updater.h
updater/updater_p.h updater/updater_p.h
) )
target_compile_definitions(citra-qt PUBLIC ENABLE_QT_UPDATER) target_compile_definitions(lucina3ds-qt PUBLIC ENABLE_QT_UPDATER)
endif() endif()
if (ENABLE_QT_TRANSLATION) 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) option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF)
# Update source TS file if enabled # Update source TS file if enabled
if (GENERATE_QT_TRANSLATION) if (GENERATE_QT_TRANSLATION)
get_target_property(QT_SRCS citra-qt SOURCES) get_target_property(QT_SRCS lucina3ds-qt SOURCES)
get_target_property(QT_INCLUDES citra-qt INCLUDE_DIRECTORIES) get_target_property(QT_INCLUDES lucina3ds-qt INCLUDE_DIRECTORIES)
qt_add_lupdate(citra-qt TS_FILES ${CITRA_QT_LANGUAGES}/en.ts qt_add_lupdate(lucina3ds-qt TS_FILES ${LUCINA3DS_QT_LANGUAGES}/en.ts
SOURCES ${QT_SRCS} ${UIS} SOURCES ${QT_SRCS} ${UIS}
INCLUDE_DIRECTORIES ${QT_INCLUDES} INCLUDE_DIRECTORIES ${QT_INCLUDES}
NO_GLOBAL_TARGET) NO_GLOBAL_TARGET)
add_custom_target(translation ALL DEPENDS citra-qt_lupdate) add_custom_target(translation ALL DEPENDS lucina3ds-qt_lupdate)
endif() endif()
# Find all TS files except en.ts # Find all TS files except en.ts
file(GLOB_RECURSE LANGUAGES_TS ${CITRA_QT_LANGUAGES}/*.ts) file(GLOB_RECURSE LANGUAGES_TS ${LUCINA3DS_QT_LANGUAGES}/*.ts)
list(REMOVE_ITEM LANGUAGES_TS ${CITRA_QT_LANGUAGES}/en.ts) list(REMOVE_ITEM LANGUAGES_TS ${LUCINA3DS_QT_LANGUAGES}/en.ts)
# Compile TS files to QM files # 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 # Build a QRC file from the QM file list
set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc) set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
@ -241,7 +241,7 @@ else()
set(LANGUAGES) set(LANGUAGES)
endif() endif()
target_sources(citra-qt target_sources(lucina3ds-qt
PRIVATE PRIVATE
${COMPAT_LIST} ${COMPAT_LIST}
${ICONS} ${ICONS}
@ -252,28 +252,28 @@ target_sources(citra-qt
if (APPLE) if (APPLE)
set(DIST_DIR "../../dist/apple") set(DIST_DIR "../../dist/apple")
set(APPLE_RESOURCES set(APPLE_RESOURCES
"${DIST_DIR}/citra.icns" "${DIST_DIR}/lucina3ds.icns"
"${DIST_DIR}/LaunchScreen.storyboard" "${DIST_DIR}/LaunchScreen.storyboard"
"${DIST_DIR}/launch_logo.png" "${DIST_DIR}/launch_logo.png"
) )
target_sources(citra-qt PRIVATE ${APPLE_RESOURCES}) target_sources(lucina3ds-qt PRIVATE ${APPLE_RESOURCES})
# Define app bundle metadata. # Define app bundle metadata.
include(GenerateBuildInfo) include(GenerateBuildInfo)
set_target_properties(citra-qt PROPERTIES set_target_properties(lucina3ds-qt PROPERTIES
MACOSX_BUNDLE TRUE MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST "${DIST_DIR}/Info.plist.in" MACOSX_BUNDLE_INFO_PLIST "${DIST_DIR}/Info.plist.in"
MACOSX_BUNDLE_BUNDLE_NAME "Citra" MACOSX_BUNDLE_BUNDLE_NAME "Lucina3DS"
MACOSX_BUNDLE_GUI_IDENTIFIER "com.citra-emu.citra" MACOSX_BUNDLE_GUI_IDENTIFIER "ink.hifuu.lucina3ds"
MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_VERSION}" MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${BUILD_FULLNAME}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${BUILD_FULLNAME}"
MACOSX_BUNDLE_LONG_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}" RESOURCE "${APPLE_RESOURCES}"
) )
if (IOS) if (IOS)
set_target_properties(citra-qt PROPERTIES set_target_properties(lucina3ds-qt PROPERTIES
# Have Xcode copy and sign MoltenVK into app bundle. # Have Xcode copy and sign MoltenVK into app bundle.
XCODE_EMBED_FRAMEWORKS "${MOLTENVK_LIBRARY}" XCODE_EMBED_FRAMEWORKS "${MOLTENVK_LIBRARY}"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES
@ -284,42 +284,42 @@ if (APPLE)
endif() endif()
elseif(WIN32) elseif(WIN32)
# compile as a win32 gui application instead of a console application # 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) 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) elseif(MINGW)
set_target_properties(citra-qt PROPERTIES LINK_FLAGS_RELEASE "-mwindows") set_target_properties(lucina3ds-qt PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
endif() endif()
endif() endif()
if(ENABLE_SDL2) if(ENABLE_SDL2)
target_link_libraries(citra-qt PRIVATE SDL2::SDL2) target_link_libraries(lucina3ds-qt PRIVATE SDL2::SDL2)
target_compile_definitions(citra-qt PRIVATE HAVE_SDL2) target_compile_definitions(lucina3ds-qt PRIVATE HAVE_SDL2)
endif() 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(lucina3ds-qt PRIVATE audio_core lucina3ds_common lucina3ds_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(lucina3ds-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 ${PLATFORM_LIBRARIES} Threads::Threads)
if (ENABLE_OPENGL) if (ENABLE_OPENGL)
target_link_libraries(citra-qt PRIVATE glad) target_link_libraries(lucina3ds-qt PRIVATE glad)
endif() endif()
if (ENABLE_VULKAN) if (ENABLE_VULKAN)
target_link_libraries(citra-qt PRIVATE vulkan-headers) target_link_libraries(lucina3ds-qt PRIVATE vulkan-headers)
endif() endif()
if (NOT WIN32) if (NOT WIN32)
target_include_directories(citra-qt PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS}) target_include_directories(lucina3ds-qt PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
endif() endif()
if (UNIX AND NOT APPLE) if (UNIX AND NOT APPLE)
target_link_libraries(citra-qt PRIVATE Qt6::DBus gamemode) target_link_libraries(lucina3ds-qt PRIVATE Qt6::DBus gamemode)
endif() endif()
target_compile_definitions(citra-qt PRIVATE target_compile_definitions(lucina3ds-qt PRIVATE
# Use QStringBuilder for string concatenation to reduce # Use QStringBuilder for string concatenation to reduce
# the overall number of temporary strings created. # the overall number of temporary strings created.
-DQT_USE_QSTRINGBUILDER -DQT_USE_QSTRINGBUILDER
@ -338,33 +338,33 @@ target_compile_definitions(citra-qt PRIVATE
-DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_TO_ASCII
) )
if (CITRA_ENABLE_COMPATIBILITY_REPORTING) if (LUCINA3DS_ENABLE_COMPATIBILITY_REPORTING)
target_compile_definitions(citra-qt PRIVATE -DCITRA_ENABLE_COMPATIBILITY_REPORTING) target_compile_definitions(lucina3ds-qt PRIVATE -DLUCINA3DS_ENABLE_COMPATIBILITY_REPORTING)
endif() endif()
if (USE_DISCORD_PRESENCE) if (USE_DISCORD_PRESENCE)
target_sources(citra-qt PUBLIC target_sources(lucina3ds-qt PUBLIC
discord_impl.cpp discord_impl.cpp
discord_impl.h discord_impl.h
) )
target_link_libraries(citra-qt PRIVATE discord-rpc) target_link_libraries(lucina3ds-qt PRIVATE discord-rpc)
target_compile_definitions(citra-qt PRIVATE -DUSE_DISCORD_PRESENCE) target_compile_definitions(lucina3ds-qt PRIVATE -DUSE_DISCORD_PRESENCE)
endif() endif()
if (ENABLE_WEB_SERVICE) if (ENABLE_WEB_SERVICE)
target_link_libraries(citra-qt PRIVATE web_service) target_link_libraries(lucina3ds-qt PRIVATE web_service)
endif() endif()
if(UNIX AND NOT APPLE) 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() endif()
if (CITRA_USE_PRECOMPILED_HEADERS) if (LUCINA3DS_USE_PRECOMPILED_HEADERS)
target_precompile_headers(citra-qt PRIVATE precompiled_headers.h) target_precompile_headers(lucina3ds-qt PRIVATE precompiled_headers.h)
endif() endif()
# Bundle in-place on MSVC so dependencies can be resolved by builds. # Bundle in-place on MSVC so dependencies can be resolved by builds.
if (MSVC) if (MSVC)
include(BundleTarget) include(BundleTarget)
bundle_target_in_place(citra-qt) bundle_target_in_place(lucina3ds-qt)
endif() endif()

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>About Citra</string> <string>About Lucina3DS</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_3">
<item> <item>
@ -34,7 +34,7 @@
<item> <item>
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -49,7 +49,7 @@
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QLabel" name="labelCitra"> <widget class="QLabel" name="labelLucina3DS">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -57,7 +57,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <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> </property>
</widget> </widget>
</item> </item>
@ -84,15 +84,18 @@
</property> </property>
<property name="text"> <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; <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; } 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; hr { height: 1px; border-width: 0; }
&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; li.unchecked::marker { content: &quot;\2610&quot;; }
&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; li.checked::marker { content: &quot;\2612&quot;; }
&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> &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>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
@ -102,7 +105,7 @@ p, li { white-space: pre-wrap; }
<item> <item>
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -142,18 +145,16 @@ p, li { white-space: pre-wrap; }
<item> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property> </property>
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Ok</set> <set>QDialogButtonBox::StandardButton::Ok</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources/>
<include location="../../dist/icons/icons.qrc"/>
</resources>
<connections> <connections>
<connection> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>

View File

@ -7,7 +7,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QString> #include <QString>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "citra_qt/applets/mii_selector.h" #include "lucina3ds_qt/applets/mii_selector.h"
#include "common/string_util.h" #include "common/string_util.h"
QtMiiSelectorDialog::QtMiiSelectorDialog(QWidget* parent, QtMiiSelector* mii_selector_) QtMiiSelectorDialog::QtMiiSelectorDialog(QWidget* parent, QtMiiSelector* mii_selector_)

View File

@ -9,7 +9,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QString> #include <QString>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "citra_qt/applets/swkbd.h" #include "lucina3ds_qt/applets/swkbd.h"
QtKeyboardValidator::QtKeyboardValidator(QtKeyboard* keyboard_) : keyboard(keyboard_) {} QtKeyboardValidator::QtKeyboardValidator(QtKeyboard* keyboard_) : keyboard(keyboard_) {}

View File

@ -8,8 +8,8 @@
#include <QMessageBox> #include <QMessageBox>
#include <QPainter> #include <QPainter>
#include <QWindow> #include <QWindow>
#include "citra_qt/bootmanager.h" #include "lucina3ds_qt/bootmanager.h"
#include "citra_qt/main.h" #include "lucina3ds_qt/main.h"
#include "common/color.h" #include "common/color.h"
#include "common/microprofile.h" #include "common/microprofile.h"
#include "common/scm_rev.h" #include "common/scm_rev.h"

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