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

BIN
dist/Lucina3DS.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,10 +0,0 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Citra Room
Comment=Multiplayer room host for Citra
Icon=citra
TryExec=citra-room
Exec=citra-room %f
Categories=Game;Emulator;
Keywords=3DS;Nintendo

BIN
dist/citra.ico vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

2
dist/citra.svg vendored

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

BIN
dist/doc-icon.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
dist/icon.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,22 +1,22 @@
.Dd November 22 2016
.Dt citra-qt 6
.Dt lucina3ds-qt 6
.Os
.Sh NAME
.Nm Citra-Qt
.Nm Lucina3DS-Qt
.Nd Nintendo 3DS Emulator/Debugger (Qt)
.Sh SYNOPSIS
.Nm citra-qt
.Nm Lucina3DS-qt
.Op Ar file
.Sh DESCRIPTION
Citra is an experimental open-source Nintendo 3DS emulator/debugger.
Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
.Pp
.Nm citra-qt
.Nm lucina3ds-qt
is the Qt implementation.
.Sh FILES
.Bl -tag -width Ds
.It Pa $XDG_DATA_HOME/citra-emu
.It Pa $XDG_DATA_HOME/lucina3ds
Emulator storage.
.It Pa $XDG_CONFIG_HOME/citra-emu
.It Pa $XDG_CONFIG_HOME/lucina3ds
Configuration files.
.El
.Sh AUTHORS

View File

@@ -1,14 +1,14 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Citra
Name=Lucina3DS
GenericName=3DS Emulator
GenericName[fr]=Émulateur 3DS
Comment=Nintendo 3DS video game console emulator
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
Icon=citra
TryExec=citra-qt
Exec=citra-qt %f
Icon=lucina3ds
TryExec=lucina3ds-qt
Exec=lucina3ds-qt %f
Categories=Game;Emulator;Qt;
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
Keywords=3DS;Nintendo;

10
dist/lucina3ds-room.desktop vendored Normal file
View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Lucina3DS Room
Comment=Multiplayer room host for Lucina3DS
Icon=lucina3ds
TryExec=lucina3ds-room
Exec=lucina3ds-room %f
Categories=Game;Emulator;
Keywords=3DS;Nintendo

View File

@@ -1,11 +1,11 @@
.Dd September 13 2024
.Dt citra 6
.Dt lucina3ds 6
.Os
.Sh NAME
.Nm Citra
.Nm Lucina3DS
.Nd Nintendo 3DS Emulator/Debugger (SDL)
.Sh SYNOPSIS
.Nm citra
.Nm lucina3ds
.Op Ar options
.Op Ar file
.Sh OPTIONS
@@ -31,9 +31,9 @@ Shows syntax help and exits
.It Fl v , Fl Fl version
Describes the installed version and exits
.Sh DESCRIPTION
Citra is an experimental open-source Nintendo 3DS emulator/debugger.
Lucina3DS is an experimental open-source Nintendo 3DS emulator/debugger.
.Pp
.Nm citra
.Nm lucina3ds
is the Simple DirectMedia Layer (SDL) implementation.
.Sh FILES
.Bl -tag -width Ds

View File

@@ -1,14 +1,14 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Citra
Name=Lucina3DS
GenericName=3DS Emulator
GenericName[fr]=Émulateur 3DS
Comment=Nintendo 3DS video game console emulator
Comment[fr]=Émulateur de console de jeu Nintendo 3DS
Icon=citra
TryExec=citra
Exec=citra %f
Icon=lucina3ds
TryExec=lucina3ds-qt
Exec=lucina3ds-qt %f
Categories=Game;Emulator;
MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi;
Keywords=3DS;Nintendo;

BIN
dist/lucina3ds.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

131
dist/lucina3ds.svg vendored Normal file
View File

@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
sodipodi:docname="Lucina3DS_G.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
inkscape:export-filename="Lucina3DS.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="1.2753906"
inkscape:cx="270.8974"
inkscape:cy="256.00001"
inkscape:window-width="2560"
inkscape:window-height="1380"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><inkscape:path-effect
effect="spiro"
id="path-effect12"
is_visible="true"
lpeversion="1" /><linearGradient
id="linearGradient8"
inkscape:collect="always"><stop
style="stop-color:#fef600;stop-opacity:1;"
offset="0"
id="stop9" /><stop
style="stop-color:#ff8803;stop-opacity:1;"
offset="1"
id="stop10" /></linearGradient><inkscape:path-effect
effect="spiro"
id="path-effect1"
is_visible="true"
lpeversion="1" /><inkscape:path-effect
effect="circle_with_radius"
id="path-effect6"
is_visible="true"
lpeversion="1" /><linearGradient
id="linearGradient1"
inkscape:collect="always"><stop
style="stop-color:#fef600;stop-opacity:1;"
offset="0"
id="stop1" /><stop
style="stop-color:#ff8803;stop-opacity:1;"
offset="1"
id="stop2" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="linearGradient2"
x1="142.00873"
y1="142.00873"
x2="369.99124"
y2="369.99124"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1264159,0,0,1.1264159,-32.362465,-32.362465)" /><inkscape:path-effect
effect="spiro"
id="path-effect1-7"
is_visible="true"
lpeversion="1" /><inkscape:path-effect
effect="spiro"
id="path-effect12-2"
is_visible="true"
lpeversion="1" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient8"
id="linearGradient13"
x1="222.62624"
y1="166.19441"
x2="294.93878"
y2="238.50694"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.77232939,0,0,0.77232939,58.767238,59.784916)" /></defs><g
inkscape:label="图层 1"
inkscape:groupmode="layer"
id="layer1"><rect
style="mix-blend-mode:normal;fill:url(#linearGradient2);fill-rule:evenodd;stroke:none;stroke-width:8.75079;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect1"
width="461.48184"
height="461.48184"
x="25.259001"
y="25.259001"
rx="20"
ry="20" /><path
style="display:inline;fill:#ffffff;fill-opacity:0.999969;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
d="m 256.39204,108.98622 c 2.318,9.14731 5.47166,18.08268 9.40888,26.6585 12.86653,28.02509 34.12047,52.40001 41.5559,82.32772 3.61286,14.54182 3.68319,30.22381 -1.62595,44.23561 -2.65457,7.00589 -6.63536,13.53227 -11.82978,18.93109 -5.19442,5.39883 -11.61188,9.65255 -18.69128,12.10436 -12.47119,4.31915 -26.62823,2.79237 -38.41961,-3.1363 -7.99311,-4.01891 -15.00816,-10.00609 -20.1073,-17.3573 -5.09913,-7.35121 -8.25739,-16.05943 -8.90342,-24.98267 -0.63444,-8.76308 1.12172,-17.55976 3.90867,-25.89205 2.78695,-8.33228 6.59253,-16.27949 10.20466,-24.28865 9.26015,-20.5325 17.29654,-41.5932 25.09035,-62.72588 3.17557,-8.61046 6.3119,-17.23539 9.40888,-25.87443 z"
id="path1"
inkscape:path-effect="#path-effect1"
inkscape:original-d="m 256.39204,108.98622 c 0,0 6.27259,18.29505 9.40888,26.6585 3.1363,8.36345 27.70394,55.1465 41.5559,82.32772 13.85197,27.18121 -21.43134,50.1807 -32.14701,75.27106 -10.71568,25.09035 -25.61307,-2.61358 -38.41961,-3.1363 -12.80653,-0.52271 -19.60183,-27.70393 -29.01072,-42.33997 -9.40888,-14.63604 9.40889,-33.19244 14.11333,-50.1807 4.70444,-16.98826 16.98826,-42.33997 25.09035,-62.72588 8.10209,-20.38592 9.40888,-25.87443 9.40888,-25.87443 z"
transform="matrix(1.2947843,0,0,1.2947843,-78.054433,-75.464863)" /><path
style="fill:url(#linearGradient13);stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
d="m 256.39204,108.98622 c 2.318,9.14731 5.47166,18.08268 9.40888,26.6585 12.86653,28.02509 34.12047,52.40001 41.5559,82.32772 3.61286,14.54182 3.68319,30.22381 -1.62595,44.23561 -2.65457,7.00589 -6.63536,13.53227 -11.82978,18.93109 -5.19442,5.39883 -11.61188,9.65255 -18.69128,12.10436 -12.47119,4.31915 -26.62823,2.79237 -38.41961,-3.1363 -7.99311,-4.01891 -15.00816,-10.00609 -20.1073,-17.3573 -5.09913,-7.35121 -8.25739,-16.05943 -8.90342,-24.98267 -0.63444,-8.76308 1.12172,-17.55976 3.90867,-25.89205 2.78695,-8.33228 6.59253,-16.27949 10.20466,-24.28865 9.26015,-20.5325 17.29654,-41.5932 25.09035,-62.72588 3.17557,-8.61046 6.3119,-17.23539 9.40888,-25.87443 z"
id="path1-3"
inkscape:path-effect="#path-effect1-7"
inkscape:original-d="m 256.39204,108.98622 c 0,0 6.27259,18.29505 9.40888,26.6585 3.1363,8.36345 27.70394,55.1465 41.5559,82.32772 13.85197,27.18121 -21.43134,50.1807 -32.14701,75.27106 -10.71568,25.09035 -25.61307,-2.61358 -38.41961,-3.1363 -12.80653,-0.52271 -19.60183,-27.70393 -29.01072,-42.33997 -9.40888,-14.63604 9.40889,-33.19244 14.11333,-50.1807 4.70444,-16.98826 16.98826,-42.33997 25.09035,-62.72588 8.10209,-20.38592 9.40888,-25.87443 9.40888,-25.87443 z"
transform="matrix(0.80835273,0,0,0.91964574,47.345041,14.506872)" /><path
style="fill:#ffffff;fill-opacity:1;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
d="m 79.975499,256.39204 c 5.425018,-11.9183 12.57961,-23.04766 21.169981,-32.93109 14.08853,-16.20919 31.8107,-28.86269 50.18071,-39.98775 17.11103,-10.36261 34.94011,-19.53934 53.317,-27.44257 -5.93477,20.02227 -10.39389,40.48176 -13.32925,61.15774 -2.18434,15.38592 -3.48986,31.3194 0.78407,46.26033 3.79604,13.2703 12.00304,25.20779 22.91567,33.65914 10.91263,8.45136 24.46093,13.40061 38.24207,14.16935 2.61087,0.14564 5.22986,0.14564 7.84073,0 4.27324,9.29986 4.55091,20.35688 0.74986,29.85952 -3.80105,9.50263 -11.62766,17.31794 -21.13577,21.10526 -3.25312,1.2958 -6.69776,2.13869 -10.19295,2.35222 -6.22311,0.38018 -12.4517,-1.24772 -18.08978,-3.90924 -5.63808,-2.66152 -10.74044,-6.32996 -15.62539,-10.20409 -16.20385,-12.85087 -30.67834,-28.65082 -38.4196,-47.82848 -7.45891,-18.4782 -8.24323,-39.19541 -4.70444,-58.80551 2.14912,-11.90928 5.8491,-23.53777 10.97703,-34.49924 -12.06684,6.45184 -24.08968,12.98599 -36.06738,19.60184 -16.28858,8.99695 -32.493692,18.145 -48.612561,27.44257 z"
id="path12-1"
inkscape:path-effect="#path-effect12-2"
inkscape:original-d="m 79.975499,256.39204 c 0,0 14.374682,-22.47677 21.169981,-32.93109 6.79531,-10.45431 33.19245,-26.13578 50.18071,-39.98775 16.98826,-13.85196 53.317,-27.44257 53.317,-27.44257 0,0 -9.14753,41.5559 -13.32925,61.15774 -4.18173,19.60183 1.04543,30.57886 0.78407,46.26033 -0.26135,15.68147 40.24911,31.6243 61.15774,47.82849 20.90862,16.20418 7.84073,0 7.84073,0 0,0 -14.11332,33.71516 -20.38591,50.96478 -6.27259,17.24961 -6.7953,1.8295 -10.19295,2.35222 -3.39766,0.52271 -22.47678,-9.9316 -33.71517,-14.11333 -11.23838,-4.18172 -25.35171,-31.36294 -38.4196,-47.82848 -13.06789,-16.46554 -3.13629,-39.20368 -4.70444,-58.80551 -1.56815,-19.60184 10.97703,-34.49924 10.97703,-34.49924 0,0 -24.04492,13.06789 -36.06738,19.60184 -12.02246,6.53394 -48.612561,27.44257 -48.612561,27.44257 z"
transform="matrix(-1.2947843,0,0,1.2947843,587.75426,-76.137043)" /><path
style="fill:#ffffff;fill-opacity:1;stroke-width:6;stroke-linejoin:round;paint-order:fill markers stroke"
d="m 79.975499,256.39204 c 5.425018,-11.9183 12.57961,-23.04766 21.169981,-32.93109 14.08853,-16.20919 31.8107,-28.86269 50.18071,-39.98775 17.11103,-10.36261 34.94011,-19.53934 53.317,-27.44257 -5.93477,20.02227 -10.39389,40.48176 -13.32925,61.15774 -2.18434,15.38592 -3.48986,31.3194 0.78407,46.26033 3.79604,13.2703 12.00304,25.20779 22.91567,33.65914 10.91263,8.45136 24.46093,13.40061 38.24207,14.16935 2.61087,0.14564 5.22986,0.14564 7.84073,0 4.27324,9.29986 4.55091,20.35688 0.74986,29.85952 -3.80105,9.50263 -11.62766,17.31794 -21.13577,21.10526 -3.25312,1.2958 -6.69776,2.13869 -10.19295,2.35222 -6.22311,0.38018 -12.4517,-1.24772 -18.08978,-3.90924 -5.63808,-2.66152 -10.74044,-6.32996 -15.62539,-10.20409 -16.20385,-12.85087 -30.67834,-28.65082 -38.4196,-47.82848 -7.45891,-18.4782 -8.24323,-39.19541 -4.70444,-58.80551 2.14912,-11.90928 5.8491,-23.53777 10.97703,-34.49924 -12.06684,6.45184 -24.08968,12.98599 -36.06738,19.60184 -16.28858,8.99695 -32.493692,18.145 -48.612561,27.44257 z"
id="path12"
inkscape:path-effect="#path-effect12"
inkscape:original-d="m 79.975499,256.39204 c 0,0 14.374682,-22.47677 21.169981,-32.93109 6.79531,-10.45431 33.19245,-26.13578 50.18071,-39.98775 16.98826,-13.85196 53.317,-27.44257 53.317,-27.44257 0,0 -9.14753,41.5559 -13.32925,61.15774 -4.18173,19.60183 1.04543,30.57886 0.78407,46.26033 -0.26135,15.68147 40.24911,31.6243 61.15774,47.82849 20.90862,16.20418 7.84073,0 7.84073,0 0,0 -14.11332,33.71516 -20.38591,50.96478 -6.27259,17.24961 -6.7953,1.8295 -10.19295,2.35222 -3.39766,0.52271 -22.47678,-9.9316 -33.71517,-14.11333 -11.23838,-4.18172 -25.35171,-31.36294 -38.4196,-47.82848 -13.06789,-16.46554 -3.13629,-39.20368 -4.70444,-58.80551 -1.56815,-19.60184 10.97703,-34.49924 10.97703,-34.49924 0,0 -24.04492,13.06789 -36.06738,19.60184 -12.02246,6.53394 -48.612561,27.44257 -48.612561,27.44257 z"
transform="matrix(1.2947843,0,0,1.2947843,-75.464865,-75.464863)" /><path
style="fill:#ffffff;fill-opacity:0.999969;stroke-width:8.48321;stroke-linejoin:round;paint-order:fill markers stroke"
d="m 221.43137,394.8085 34.06963,69.25714 32.93398,-71.42141 -34.06964,-27.05358 z"
id="path13" /></g></svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -4,7 +4,7 @@
<comment>Nintendo 3DS homebrew executable</comment>
<comment xml:lang="fr">Exécutable non-officiel pour Nintendo 3DS</comment>
<acronym>3DSX</acronym>
<icon name="citra"/>
<icon name="lucina3ds"/>
<glob pattern="*.3dsx"/>
<magic><match value="3DSX" type="string" offset="0"/></magic>
</mime-type>
@@ -14,7 +14,7 @@
<comment xml:lang="fr">Image de cartouche Nintendo 3DS</comment>
<acronym>CCI</acronym>
<expanded-acronym>CTR Cart Image</expanded-acronym>
<icon name="citra"/>
<icon name="lucina3ds"/>
<glob pattern="*.cci"/>
<glob pattern="*.3ds"/>
<magic><match value="NCSD" type="string" offset="256"/></magic>
@@ -25,7 +25,7 @@
<comment xml:lang="fr">Exécutable Nintendo 3DS</comment>
<acronym>CXI</acronym>
<expanded-acronym>CTR eXecutable Image</expanded-acronym>
<icon name="citra"/>
<icon name="lucina3ds"/>
<glob pattern="*.cxi"/>
<magic><match value="NCCH" type="string" offset="256"/></magic>
</mime-type>
@@ -35,7 +35,7 @@
<comment xml:lang="fr">Archive installable Nintendo 3DS</comment>
<acronym>CIA</acronym>
<expanded-acronym>CTR Importable Archive</expanded-acronym>
<icon name="citra"/>
<icon name="lucina3ds"/>
<glob pattern="*.cia"/>
</mime-type>

View File

@@ -13,7 +13,7 @@
<file alias="48x48/no_avatar.png">icons/48x48/no_avatar.png</file>
<file alias="48x48/plus.png">icons/48x48/plus.png</file>
<file alias="48x48/sd_card.png">icons/48x48/sd_card.png</file>
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
<file alias="256x256/lucina3ds.png">icons/256x256/lucina3ds.png</file>
<file alias="256x256/plus_folder.png">icons/256x256/plus_folder.png</file>
</qresource>
<qresource prefix="default">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -11,10 +11,10 @@ class RequestType(enum.IntEnum):
ReadMemory = 1,
WriteMemory = 2
CITRA_PORT = 45987
LUCINA3DS_PORT = 45987
class Citra:
def __init__(self, address="127.0.0.1", port=CITRA_PORT):
class Lucina3DS:
def __init__(self, address="127.0.0.1", port=LUCINA3DS_PORT):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.address = address
@@ -45,7 +45,7 @@ class Citra:
request_data = struct.pack("II", read_address, temp_read_size)
request, request_id = self._generate_header(RequestType.ReadMemory, len(request_data))
request += request_data
self.socket.sendto(request, (self.address, CITRA_PORT))
self.socket.sendto(request, (self.address, LUCINA3DS_PORT))
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.ReadMemory)
@@ -77,7 +77,7 @@ class Citra:
request_data += write_contents[:temp_write_size]
request, request_id = self._generate_header(RequestType.WriteMemory, len(request_data))
request += request_data
self.socket.sendto(request, (self.address, CITRA_PORT))
self.socket.sendto(request, (self.address, LUCINA3DS_PORT))
raw_reply = self.socket.recv(MAX_PACKET_SIZE)
reply_data = self._read_and_validate_header(raw_reply, request_id, RequestType.WriteMemory)
@@ -92,4 +92,4 @@ class Citra:
if "__main__" == __name__:
import doctest
doctest.testmod(extraglobs={'c': Citra()})
doctest.testmod(extraglobs={'c': LUCINA3DS()})