Editing Building RetroArch

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
This page contains instructions of building [[RetroArch]] from source. Most average users should use prebuilt binaries instead.
 
 
 
=Building on Windows=
 
=Building on Windows=
The recommended toolchain for building RetroArch on Windows is MinGW-w64 running inside the MSYS2 environment. Installers for MSYS2 can be found at [https://msys2.github.io/ msys2.github.io]. Other toolchains like TDM-GCC or Visual Studio can work, but this guide will only cover MSYS2.
+
Note - the following is for 64-bit Windows only. 32-bit Windows will need to get 32-bit MinGW instead and use 32-bit headers and libs for RetroArch.
  
==Preparing the environment==
+
Download the prepackaged toolchain from [https://www.dropbox.com/sh/91sakv0qdyxjx9f/0jhM7OoWBP/dev_tools/RetroArch_MinGW64_gcc-4.8.2.7z here].
  
Once you have installed MSYS2, you will need to update it and install the toolchain packages.
+
Extract it somewhere, for example C:\MinGW.
  
===Updating MSYS2===
+
Run Git Bash.vbs. Then do the following commands:
 
 
First, start the MSYS2 Shell entry that should be present in your Start Menu.
 
 
 
Updating your install is a multiple step operation: first you update the core, then you have to rehash the environment and finally you'll be able to properly update the rest of the system. Once you are in the MSYS2 Shell terminal, run the following commands to upgrade the core MSYS2 packages:
 
 
 
pacman --noconfirm -Sy
 
pacman --needed --noconfirm -S bash pacman pacman-mirrors msys2-runtime
 
 
 
Once the window closes, open the MSYS2 Shell again and type <code>pacman --noconfirm -Su</code> then repeat the previous operation to finish the process.
 
Note: If you get fork errors, the second step may have failed. You should go to your msys2 install directory and run <code>autorebase.bat</code> manually. If that didn't solve the problem consider reinstalling msys2.
 
 
 
===Installing the build time dependencies===
 
 
 
The following commands will install everything you need to build RetroArch in your MSYS2 environment.
 
 
 
*For 32 bit builds run:
 
 
 
pacman -S --noconfirm --needed git make mingw-w64-i686-toolchain mingw-w64-i686-pkg-config mingw-w64-i686-SDL2 mingw-w64-i686-libxml2 mingw-w64-i686-freetype mingw-w64-i686 python3 mingw-w64-i686-ffmpeg
 
 
 
*For 64 bit builds:
 
 
 
pacman -S --noconfirm --needed git make mingw-w64-x86_64-toolchain mingw-w64-x86_64-pkg-config mingw-w64-x86_64-SDL2 mingw-w64-x86_64-libxml2 mingw-w64-x86_64-freetype mingw-w64-x86_64-python3 mingw-w64-x86_64-ffmpeg
 
 
 
For the nvidia-cg-toolkit packages, you will need to download the pkg manually from Sourceforge to your home directory for [http://sourceforge.net/projects/msys2/files/REPOS/MINGW_GCC_4_9/i686/mingw-w64-i686-nvidia-cg-toolkit-3.1-2-any.pkg.tar.xz/download 32-bit] or [http://sourceforge.net/projects/msys2/files/REPOS/MINGW_GCC_4_9/x86_64/mingw-w64-x86_64-nvidia-cg-toolkit-3.1-2-any.pkg.tar.xz/download 64-bit], then use pacman to install them.
 
 
 
*32-bit:
 
 
 
pacman -U --noconfirm mingw-w64-i686-nvidia-cg-toolkit-3.1-2-any.pkg.tar.xz
 
 
 
*64-bit:
 
 
 
pacman -U --noconfirm mingw-w64-x86_64-nvidia-cg-toolkit-3.1-2-any.pkg.tar.xz
 
 
 
After installing the packages, close the MSYS2 shell and open either MinGW-w64 Win64 Shell for 64 bit builds or MinGW-w64 Win32 Shell if you want to build for 32 bit systems. Both should be available in your Start Menu.
 
 
 
==Cloning RetroArch and libretro repositories==
 
 
 
Once you are running the MSY2 MinGW-w64 Shell, then you will need to clone the RetroArch and libretro Git repositories.
 
  
 
  git clone https://github.com/libretro/libretro-super.git
 
  git clone https://github.com/libretro/libretro-super.git
 
  cd libretro-super
 
  cd libretro-super
  ./libretro-fetch.sh
+
  sh libretro-fetch.sh
  
This will fetch every repository in the libretro organization on Github into <code>%MSYS2%/home/%USERNAME%/</code> . Since there are a lot of repositories to download, this will take a while to complete. You can use <code>libretro-fetch.sh</code> again to update all repositories, and you can fetch repositories individually by specifying their name e.g. <code>./libretro-fetch.sh mednafen_psx</code>
+
You should now have all the libretro organization repositories cloned in the libretro-super folder within your MinGW folder. You can use libretro-fetch.sh again to update all repositories.
 +
 
 +
Just as a tip, always do a "git pull" to update the repository and "make clean" to clean up old build files before building anything. -j sets the number of jobs to do simultaneously, if you have a quad-core CPU, use -j4.  
  
 
If you change a file in one of the cloned repositories and git won't let you update, do:
 
If you change a file in one of the cloned repositories and git won't let you update, do:
Line 59: Line 21:
 
  git pull
 
  git pull
  
It should update after that. If not, delete the whole repository and run <code>libretro-fetch.sh</code> again.
+
It should update after that. If not, delete the whole repository and run libretro-fetch.sh again.
  
 
To change directories/folders do:
 
To change directories/folders do:
Line 75: Line 37:
 
Other basic UNIX shell commands like "ls" can be useful as well.
 
Other basic UNIX shell commands like "ls" can be useful as well.
  
==Building RetroArch==
+
==To build RetroArch:==
 
+
Download the [http://themaister.net/retroarch-dl/RetroArch-win64-headers.zip headers] and [http://themaister.net/retroarch-dl/RetroArch-win64-libs.zip libs] and extract them to the folder where the RetroArch repository was cloned (in \libretro-super\retroarch if you used the fetch script). Then execute these commands from the Git Bash shell:
To build RetroArch from the MSY2 MinGW-w64 Shell, execute the following:
 
 
 
cd libretro-super/retroarch && git pull && git submodule update --init && ./configure && make clean && make -j4
 
 
 
You should see a list of files being compiled, ending with <code>LD retroarch</code>. You can then copy the newly compiled <code>retroarch.exe</code> from <code>libretro-super\retroarch</code> to wherever you keep your RetroArch installation.
 
 
 
If you want to do a debug build, then execute the following:
 
 
 
make clean
 
make DEBUG=1 GL_DEBUG=1 -j4
 
mv retroarch.exe retroarch_debug.exe
 
 
 
This build will have all of the debug symbols intact and will be built with compiler optimizations turned off, so it can be run through a debugger like gdb.
 
 
 
If you are experiencing a missing DLL error, you can fetch all MSYS2 installed DLLs by executing this line:
 
 
 
for i in $(seq 3); do for bin in $(ldd *exe *dll | grep -i mingw | cut -d\ -f 3); do cp -vu "$bin" . ; done; done
 
 
 
Video filters and Audio DSP filters are compiled by going into gfx/filters and audio/filters, respectively, and running make on the Makefile. For example
 
  
 +
cd libretro-super
 
  cd retroarch
 
  cd retroarch
  cd gfx/filters
+
  git pull
  make clean
+
  make -f Makefile.win clean
  make
+
  make -f Makefile.win -j4
  
After they build, you can copy the filters to your RetroArch installation.
+
You should see a list of files being compiled, ending with "LD RetroArch.exe". You can then copy the newly compiled retroarch.exe and \tools\retroarch-joyconfig.exe from libretro-super\retroarch to wherever you keep your RetroArch installation.
  
==Building libretro cores==
+
==To build libretro cores:==
  
After running the fetch script, you should have a folder for each libretro core in your libretro-super folder.
+
After running the fetch script, you should have a folder for each libretro core in your libretro-super folder. For most cores all you need to do is do:
 
 
You can use <code>libretro-build.sh</code> to build all cores at once:
 
 
 
cd libretro-super
 
./libretro-build.sh
 
 
 
This will attempt to build almost every core available. This can take quite a while to complete, so you may wish to build cores individually:
 
 
 
cd libretro-super
 
./libretro-build.sh mednafen_psx
 
 
 
The exact names for fetching or building individual cores can be found in the [https://github.com/libretro/libretro-super/blob/master/rules.d/core-rules.sh /rules.d/core-rules.sh] script.
 
 
 
Cores that build successfully are put in <code>/dist/win</code> or <code>/dist/win_x64</code> in your libretro-super folder. Be sure to run <code>libretro-fetch.sh</code> to update your local Git clones before building.
 
 
 
==Building cores manually==
 
 
 
If you wish, you can build cores manually if you want more control over the build process, though it's not recommended for inexperienced users. For most cores, all you need to do is do:
 
  
 
  git pull
 
  git pull
Line 130: Line 56:
 
  make -f Makefile.libretro -j4
 
  make -f Makefile.libretro -j4
  
If there isn't a Makefile or Makefile.libretro in the top level, try to find a "libretro" folder within the repository and there should be a Makefile in there. After the core is built, it will be in the same folder as the Makefile used to compile it.  
+
If there isn't a Makefile.libretro in the top level, try to find a "libretro" folder within the repository and there should be a makefile in there. After the core is built, it will be in the same folder as the makefile used to compile it.
  
The following need only <code>make</code>:
+
Refer to the [https://github.com/libretro/libretro-super/blob/master/libretro-build-common.sh libretro-build-common.sh] for exact commands for each core.
* 4do-libretro
 
* blastem-libretro
 
* any 'beetle' source
 
* cannonball
 
* daphne
 
* Dinothawr
 
* FreeIntv
 
* freej2me (inside <code>/src/libretro</code>)
 
* Gearboy (inside <code>/platforms/ibretro</code>)
 
* libretro-atari800
 
* libretro-cap32
 
* libretro-chailove
 
* libretro-crocods
 
* libretro-lutro
 
* libretro-o2em
 
* libretro-uae
 
* melonDS
 
* Mesen (inside <code>/Libretro</code>)
 
* mrboom-libretro
 
* mupen64plus-libretro
 
* nestopia (inside <code>/libretro</code>)
 
* nxengine-libretro
 
* parallel-n64
 
* ppsspp (inside <code>/libretro</code>)
 
* prosystem-libretro
 
* reicast-emulator
 
* REminiscence
 
* SameBoy  (inside <code>/libretro</code>)
 
* scummvm (inside <code>/backends/platform/libretro/build</code>)
 
* snes9x (inside <code>/libretro</code>)
 
* stella-libretro
 
* tgbdual-libretro
 
* theodore
 
* virtualjaguar-libretro
 
* yabause (inside <code>/libretro</code>)
 
  
The following need <code>make -f Makefile.libretro</code>:
+
You can do to build all cores at once:
* 81-liberetro
 
* blueMSX-libretro
 
* Craft
 
* desmume (inside <code>/desmume</code>)
 
* dosbox-libretro
 
* easyrpg-libretro (inside <code>/builds/libretro</code>)
 
* fbalpha (NOTE: makefile.libretro is **all-lowercase**.)
 
* fuse-libretro
 
* gambatte-libretro
 
* Genesis-Plus-GX
 
* gw-libretro
 
* Hatari
 
* libretro-JamVM
 
* libretro-meowPC98 (inside <code>/libretro</code>)
 
* libretro-vecx
 
* mgba
 
* NP2kai (inside <code>/sdl2</code>)
 
* picodrive
 
* px68k-libretro
 
* PokeMini
 
* snes9x-next
 
* vba-next
 
  
The following cores also require the running of <code>git submodule update --init</code>:
+
cd libretro-super
 
+
sh libretro-build.sh
* dolphin
 
* libretro-ppsspp
 
* picodrive
 
  
Some cores need special commands for building:
+
You may need to open the script in text editor and add the following to the script around line 84 to make it work if you're using the prepackaged toolchain:
  
===bsnes===
+
MAKE=make
 +
CC=gcc
 +
CXX=g++
  
make profile='%PROFILE%' clean
+
Cores that build successfully are put in /dist/win in your libretro-super folder.
make profile='%PROFILE%' -j4
 
  
Replace %PROFILE% with accuracy, balanced, or performance.
+
Some cores need special commands for building:
  
===Dolphin===
+
===bSNES Performance===
  
Dolphin requires Cmake now. Its information on the Libretro core is inside <code>/Source/Core/DolphinLibretro</code>.
+
cd libretro-bsnes/perf
 +
make ui='target-libretro' profile='performance' clean
 +
make ui='target-libretro' profile='performance' -j4
  
===emux===
+
===bSNES Balanced===
  
  cd libretro
+
  cd libretro-bsnes/balanced
  make -f Makefile.%TARGET% MACHINE=%MACH%
+
  make ui='target-libretro' profile='balanced' clean
 +
make ui='target-libretro' profile='balanced' -j4
  
Replace %TARGET% with the device to which you plan on building the core (e.g. linux-portable_x86_64, mingw_x86...)
+
===bSNES Accuracy===
Replace %MACH% with any one of the following devices: chip8, gc, nes, sms.
 
  
===MAME===
+
cd libretro-bsnes
If doing a 64-bit build.
+
make ui='target-libretro' profile='accuracy' clean
 +
make ui='target-libretro' profile='accuracy' -j4
  
cd libretro-mame
+
===Mednafen===
make -f Makefile.libretro PTR64=1 clean
 
make -f Makefile.libretro PTR64=1 -j4
 
  
This core will take a while to build, depending on how fast your CPU is, how many jobs you specify, and how many cores your CPU has. You can save some time updating the core by adding PARTIAL=1 when doing a clean. You can specify a subtarget by adding e.g. <code>SUBTARGET=arcade</code> or <code>SUBTARGET=tiny</code> in the current version of MAME.
+
cd libretro-mednafen
 +
make core=[CORE] clean
 +
make core=[CORE] -j4
  
===Redream===
+
Replace [CORE] with psx for PlayStation, pce-fast for PC-Engine, wswan for WonderSwan, ngp for Neo-Geo Pocket, or vb for Virtual Boy.
Redream requires Cmake.
+
Do not bother with snes or gba, those cores do not function correctly on Windows and are based on old versions of bSNES and VBA-M.
  
===Rustation-libretro===
+
===Mupen64plus===
Rustation is written in Rust, not C or C++; neither make nor Cmake would work.
 
  
=Building on Linux=
+
To make a build with the dynarec available:
Building on Linux is similar to building on Windows.
 
  
After entering the RetroArch folder, do:
+
cd libretro-mupen64plus
 +
make WITH_DYNAREC=x86_64 clean
 +
make WITH_DYNAREC=x86_64 -j4
  
./configure
+
===MAME 2013===
  
...and install any necessary dependencies before running ./configure again. Then, do:
+
Download and install [http://www.python.org/ftp/python/2.7.5/python-2.7.5.amd64.msi Python 2.7.5] to the default location.
  
make
+
Then do:
  
 +
make -f Makefile.libretro PTR64=1 PYTHON="C:/Python27/pythonw.exe" clean
 +
make -f Makefile.libretro PTR64=1 PYTHON="C:/Python27/pythonw.exe" -j4
  
NOTE: Compilation may fail if you do not have the following installed:
+
This core will take a while to build, depending on how fast your CPU is, how many jobs you specify, and how many cores your CPU has.
  
* g++
+
==Libretro Super==
* libgl1-mesa-dev
 
* libsdl2-dev
 
* mesa-common-dev
 
* pkg-config
 
  
Also, you may need one of the following if RetroArch is to run audio:
+
Libretro-super is a series of scripts used to ease the compilation and installation of each and every libretro emulation core and RetroArch itself. Thus this is the simplest route to a fully functional installation. If you need or want to build each core individually then you can refer to the [https://github.com/libretro/libretro-super/blob/master/libretro-build-common.sh build-common.sh] script for direction.
 
+
git clone git://github.com/libretro/libretro-super.git
* alsa (libsdl2-dev)
+
cd libretro-super
* libpulse (libpulse-dev)
+
sh libretro-fetch.sh
* lossaudo
+
sh libretro-build.sh
* lopenal (libopenal-dev)
+
sh libretro-install.sh <path where you'd like RetroArch installed>
* jack
 
* libroar (libroar-dev) WARNING: This might break your compilation.
 
* rsound
 
 
 
==Raspberry Pi==
 
There is a tutorial on how to bypass X11 and use KMS, thus reducing overhead.
 
 
 
https://www.raspberrypi.org/forums/viewtopic.php?f=78&t=56070
 
 
 
The above might work on regular desktop Linux, too.
 
 
 
Even so, if you plan on turning your Raspberry Pi into a "RetroArch machine", the easiest way is installing the [http://blog.petrockblock.com/retropie/retropie-downloads/ RetroPie image]. (You can also run [http://blog.petrockblock.com/2012/07/22/retropie-setup-an-initialization-script-for-retroarch-on-the-raspberry-pi/ its script].)
 
 
 
[[Category:FAQs]]
 
[[Category:RetroArch]]
 

Please note that all contributions to Emulation General Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Emulation General Wiki:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)