Skip to content

Nintendo 3DS Compilation / Development Guide

Environment configuration

You need the homebrew Nintendo 3DS SDK libctru and DevkitARM toolchain installed.
If you are running windows you will need to install MSYS2 and point it to your devkitARM installation like this:

1
2
3
4
5
6
Put these lines in RetroArch3DSEnv.sh
export DEVKITPRO="/c/devkitPro"
export DEVKITARM="$DEVKITPRO/devkitARM"
export CTRULIB="$DEVKITPRO/libctru"
export CTRBANNERTOOL="/c/Users/Emily/Desktop/RetroArchDev/CompatFiles/bannertool.exe"
bash

The custom bannertool is needed if you want to compile .cia builds due to a broken wav encoder in the windows version of bannertool included with RetroArch.
Before building RetroArch you will have to load MSYS2 and launch RetroArch3DSEnv.sh, then proceed as you would for linux.

The working bannertool can be compiled from the sources here using MSYS2.

RetroArch Compilation

Fetching RetroArch

Clone RetroArch's repository from GitHub

1
2
git clone https://github.com/libretro/RetroArch.git retroarch
cd retroarch

For subsequent builds you only need to pull the changes from the repo

1
2
cd retroarch
git pull

To update your local copy from the repository run git pull

Building RetroArch separately

First, you need to compile Salamander. To compile Salamander (for 3DS) run:

1
make -f Makefile.ctr.salamander

Second, to compile RetroArch (for 3DS) run:

1
make -f Makefile.ctr

Note

RetroArch on 3DS is statically linked. With statically linked RetroArch, each executable is a separate libretro core instead of the core being separately loaded from a single executable. A pre-existing libretro library needs to be present in the root directory in order to link RetroArch 3DS. This file needs to be called 'libretro_ctr.a'.

After a few seconds/minutes you should be able to find a retroarch_ctr.elf and retroarch_ctr.dol file under that directory.

Building RetroArch in bulk

Instead of building each core one by one, you can build all cores as a batch task. Run from the main 'retroarch' directory:

1
cd dist-scripts

Note

Make sure that all the libretro cores that you want to compile are inside the 'dist-scripts' directory.

Once inside this directory, run :

1
./dist-cores.sh ctr

This process will also automate the packaging process for you.

Packaging RetroArch

Additional Tips:

Core Compilation

Fetching Cores

The easiest way to fetch all the cores is to use libretro-super. Run

1
./libretro-fetch.sh

Building Cores

The easiest way to build all the cores (for 3DS) is to use libretro-super. Run

1
./libretro-build-ctr.sh

In case you only want to build one and/or more cores instead of all, you can specify the cores you want to build after the first command in no particular order. E.g.:

1
./libretro-build-ctr.sh snes9x2010 fceumm

Once finished, you can find the libretro cores inside directory dist/ctr.


Last update: 2024-04-25