PCSX2 Documentation/Compiling on Linux: Difference between revisions

From PCSX2 Wiki
Jump to navigation Jump to search
mNo edit summary
m (Honesty in labeling.)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
The following is a guide on how to obtain and compile the PCSX2 source code on the Linux platform.
The following is a guide on how to obtain and compile the PCSX2 source code on the Linux platform.


'''For a more in-depth guide on the PCSX2 build process, please refer to this guide here:'''
'''For a more in-depth guide on the PCSX2 build process, please don't refer to this guide here, as it is massively outdated:'''
*[[PCSX2 Documentation/PCSX2 Build Scripts]]
*[[PCSX2 Documentation/PCSX2 Build Scripts]]


Line 12: Line 12:
*'''Fedora:''' <code># dnf install git</code>
*'''Fedora:''' <code># dnf install git</code>


Next you are going to want to create a directory on your machine for the PCSX2 code to live in. For this example, let's say the directory you create is /home/you/workspace. You are going to want clone the remote PCSX2 repository like so:
Next you are going to want to create a directory on your machine for the PCSX2 code to live in. For this example, let's say the directory you create is /home/your/workspace. You are going to want clone the remote PCSX2 repository like so:


<source lang="bash">
<source lang="bash">
$ cd /home/you/workspace
$ cd /home/your/workspace
$ git clone https://github.com/PCSX2/pcsx2.git
$ git clone git@github.com:PCSX2/pcsx2.git --recurse
</source>
</source>


Line 23: Line 23:
==Setting up the Build System==
==Setting up the Build System==


PCSX2 uses the cmake build system to create project files and other things for multiple platforms, and GCC to compile on the linux platform.
PCSX2 uses the cmake build system to create project files and other things for multiple platforms, and GCC or clang to compile on the linux platform.
 
Quick compile instructions:
 
{| class="wikitable"
|+ Compiling a release build.
|-
! Compiler/build system !! command
|-
| gcc/make || mkdir build && cd build && cmake --preset=gcc-release .. && make -j <number of jobs. Say 4 or 6 if you aren't sure.>
|-
| gcc/ninja || mkdir build && cd build && cmake --preset=gcc-release-ninja .. && ninja
|-
| clang/ninja/lld || mkdir build && cd build && cmake --preset=clang-release .. && ninja
|}
 
And run bin/pcsx2-qt .
 
=== Compiling ===
 
To compile on linux, you will need git, cmake, and a compiler. For a compiler, gcc and clang are supported. If you are going to use the clang presets, also install lld as a linker. You'll also need make or ninja. Ninja is recommended, and required if using the clang presets.


===32-bit compile on 64-bit machines===
====Arch====
====Arch====


If you are running 64-bit Arch Linux, you are going to need to enable access to the multilib repository, so you can obtain 32-bit libraries. You can do this by uncommenting the following lines in <code>/etc/pacman.conf</code>:
The required packages to compile PCSX2 can be installed with:
<source lang="apache">
<code># pacman -S cmake gcc</code>
[Multilib]
Include = /etc/pacman.d/mirrorlist
</source>


Then, just run the following:
and optionally:
<code># pacman -S clang lld ninja</code>


<code># pacman -S cmake gcc</code>
(base-devel has gcc in it as well, and may be a good idea to install.)


====Fedora====
====Fedora====


It is important to note that you do not need to install <code>gcc-c++.i686</code>. Installing this package could result in some packages being downgraded, resulting in a broken g++ compiler.
The required packages to compile PCSX2 can be installed with:
<code># sudo yum install cmake g++</code>
 
and optionally:
<code># sudo yum install ninja-build lld clang</code>
 
====Ubuntu====
 
The required packages to compile PCSX2 can be installed with:
<code># sudo apt install cmake g++</code>
 
and optionally:
<code># sudo apt install ninja-build lld clang</code>
 
(Like Arch, if you're having trouble, install build-essential)
 
====openSUSE====


The required packages to compile PCSX2 can be installed with:
The required packages to compile PCSX2 can be installed with:
<code>sudo zypper install cmake gcc gcc-c++</code>


<code># dnf install gcc-g++ cmake glibc-devel.i686 libstdc++-devel.i686</code>
and optionally:
<code># sudo zypper install ninja-build lld llvm-clang</code>
 
(Not absolutely sure the latter is correct. Could use testing.)


==Installing the Dependencies==
==Installing the Dependencies==


PCSX2 relies on a number of 3rd party software libraries, so you are going to need to obtain those before you can compile the source code. Here's a non-exhaustive list of these dependencies.  
PCSX2 relies on a number of 3rd party software libraries, so you are going to need to obtain those before you can compile the source code. Here's a non-exhaustive list of these dependencies.</br>
 
If you don't have the following, it will use prebundled versions:
<source lang="bash">
sdl2 >= 2.0.22
fmt >= 7.1.3
rapidyaml >= 0.4.0
zstd >= 1.4.5
libzip >= 1.8.0
</source>


You have to have:
<source lang="bash">
<source lang="bash">
lib32-alsa-lib
pcap
lib32-bzip2
liblzma
lib32-libjpeg
libaio
lib32-glew
libsoundtouch
lib32-nvidia-cg-toolkit
qt6
lib32-portaudio
lib32-sdl
lib32-libaio
lib32-wxgtk3
lib32-soundtouch
lib32-libpcap
lib32-libsamplerate
sparsehash
fmt
</source>
</source>


When generating the build configuration, CMake will first attempt to use pre-bundled versions of some of these packages to ensure PCSX2 is built against the most suitable version of its dependencies.
If your distribution has development versions of packages, you'll probably need those packages as well. With qt 6, we're probably talking something like:</br>
In order to install these pre-packaged dependencies, run the following commands at the top-level directory of the PCSX2 git repository you just cloned
'''Fedora:'''
<source>yum install qt6-qtbase-devel qt6-qtbase-private-devel qt6-qttools-devel</source>
 
'''OpenSuse:'''
<source>sudo zypper install qt6-base-devel qt6-base-private-devel qt6-tools-devel qt6-linguist-devel</source>


<source>
'''Ubuntu:'''
$ mkdir -p pcsx2/build && cd pcsx2/build
<source>apt install qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools</source>
$ git submodule init
$ git submodule update
</source>


Please note you may still need to install 32-bit versions of some of these libraries yourself.
(All of those worked at one point, but need to be doublechecked.)


===Fedora===
==Compiling the Source==


To obtain all the required dependencies for 32-bit compile on Fedora, reference their <code>i686</code> architecture version, like so:
If you didn't already get pcsx2's source, run:</br>
<code>$ git clone [email protected]:PCSX2/pcsx2.git --recurse</code>


<pre>
Now go into the pcsx2 directory:
# dnf install alsa-lib-devel.i686 libpcap-devel.i686 libxml2-devel.i686 freetype-devel.i686 \
<source>$ cd ./pcsx2</source>
  xz-devel.i686 mesa-libGL-devel.i686 libpng-devel.i686 libaio-devel.i686 systemd-devel.i686 \
If you forgot the "--recurse" part when cloning, run this command:
  portaudio-devel.i686 soundtouch-devel.i686 SDL2-devel.i686 harfbuzz-devel.i686 wxGTK3-devel.i686 \
<source>$ git submodule --init --recursive</source>
  gtk3.i686 gtk3-devel.i686 glib2-devel.i686 libsamplerate.i686 libsamplerate-devel.i686 gdk-pixbuf2-devel.i686
Now, make a build directory:
</pre>
<source>$ mkdir -p ./build && cd ./build</source>


Note: this list of dependencies was last verified on a Fedora 33 (x86_64) installation.
Now, it is time to compile the source code! Easiest way to do that is with a preset.<br />


==Compiling the Source==
If you're using gcc/make:
<source lang="bash">$ cmake --preset=gcc-release ..
$ make -j <number of jobs. Say 4 or 6 if you aren't sure.></source>


Note: On Arch Linux, you may need to explicitly specify to cmake where to find the config executables. You can do that by adding these flags into the build script:
If you are using gcc & ninja:
<source lang="bash">$ cmake --preset=gcc-release-ninja ..  
$ ninja</source>


<source lang="bash">
And if you are using clang with lld and ninja:
-DwxWidgets_CONFIG_EXECUTABLE='/usr/bin/wx-config32-2.8'
<source lang="bash">$ cmake --preset=clang-release ..  
-DwxWidgets_wxrc_EXECUTABLE='/usr/bin/wxrc32-2.8'
$ ninja</source>
</source>


Now that we have installed all external libraries, it is time to compile the source code! To do that, we are going to run a shell script which automates the entire process.<br />
Here's a full list, if you want a different preset:
<source lang="bash">
{| class="wikitable"
$ cd /home/you/workspace/pcsx2
|+ For reference, here is the current list of presets:
$ sh build.sh
|-
</source>
! Name !! Description
|-
| ninja-multi || Generates ninja build files for debug/devel/and release builds for gcc.
|-
| gcc-debug || For making a debug build with gcc and make.
|-
| gcc-devel || For making a development build with gcc and make.
|-
| gcc-release || For making a release build with gcc and make. Does not have LTO.
|-
| gcc-debug-ninja || For making a debug build with gcc and ninja. (ninja builds faster then make.)
|-
| gcc-devel-ninja || For making a development build with gcc and ninja.(ninja builds faster then make.)
|-
| gcc-release-ninja || For making a release build with gcc and ninja. Does not have LTO. (ninja builds faster then make.)
|-
| clang-debug || For making a debug build with clang and ninja. (Fastest builds.)
|-
| clang-devel || For making a development build with clang and ninja. (Fastest builds.)
|-
| clang-release || For making a release build with clang and ninja. (This one has lto, so has the slowest build time.)
|}


If omit any of the libraries or headers specified above (or other, newer dependencies not included here), CMake will abort, your compiler may skip certain parts of the overall build or the linker may fail to link all the dependencies into the final PCSX2 executable. The output from any one of these tools should be able to tell the dependencies you're missing.
If omit any of the libraries or headers specified above (or other, newer dependencies not included here), CMake will abort, your compiler may skip certain parts of the overall build or the linker may fail to link all the dependencies into the final PCSX2 executable. The output from any one of these tools should be able to tell the dependencies you're missing.
Line 110: Line 174:
==Running the Binary==
==Running the Binary==


This process may take several minutes. Once it has finished, you should be able to run the pcsx2 binary, which should've been output to the <code>bin/</code> directory.
This process may take several minutes. Once it has finished, you should be able to run the pcsx2 binary, which should've been output to the <code>build/bin/</code> directory.
 
<source lang="bash">$ ./bin/PCSX2</source>
 
The most straightforward to invoke the PCSX2 binary is via the Linux wrapper script provided in the same folder, which should be run from the top-level directory:


<source lang="bash">
<source lang="bash">$ ./bin/pcsx2-qt</source>
$ chmod +x ./bin/PCSX2-linux.sh
$ ./bin/PCSX2-linux.sh
</source>


==Additional external links==
==Additional external, likely outdated links==
* [http://forums.pcsx2.net/Thread-PCSX2-for-Debian-Ubuntu PCSX2 for Debian/Ubuntu]
* [http://forums.pcsx2.net/Thread-PCSX2-for-Debian-Ubuntu PCSX2 for Debian/Ubuntu]
* [http://forums.pcsx2.net/Thread-PCSX2-for-Archlinux PCSX2 for Archlinux]
* [http://forums.pcsx2.net/Thread-PCSX2-for-Archlinux PCSX2 for Archlinux]

Latest revision as of 04:33, 13 January 2023

The following is a guide on how to obtain and compile the PCSX2 source code on the Linux platform.

For a more in-depth guide on the PCSX2 build process, please don't refer to this guide here, as it is massively outdated:

Obtaining the Source Code

PCSX2 is hosted on GitHub, a website where people can contribute to each others' programming projects using the Git version control software. GitHub is essentially just a showcase for your projects, to actually work on them you need to download and install Git itself.

  • Arch Linux: # pacman -S git
  • Debian: # apt-get install git
  • Fedora: # dnf install git

Next you are going to want to create a directory on your machine for the PCSX2 code to live in. For this example, let's say the directory you create is /home/your/workspace. You are going to want clone the remote PCSX2 repository like so:

<source lang="bash"> $ cd /home/your/workspace $ git clone [email protected]:PCSX2/pcsx2.git --recurse </source>

You are now making a copy of the remote repository into your own directory.

Setting up the Build System

PCSX2 uses the cmake build system to create project files and other things for multiple platforms, and GCC or clang to compile on the linux platform.

Quick compile instructions:

Compiling a release build.
Compiler/build system command
gcc/make mkdir build && cd build && cmake --preset=gcc-release .. && make -j <number of jobs. Say 4 or 6 if you aren't sure.>
gcc/ninja mkdir build && cd build && cmake --preset=gcc-release-ninja .. && ninja
clang/ninja/lld mkdir build && cd build && cmake --preset=clang-release .. && ninja

And run bin/pcsx2-qt .

Compiling

To compile on linux, you will need git, cmake, and a compiler. For a compiler, gcc and clang are supported. If you are going to use the clang presets, also install lld as a linker. You'll also need make or ninja. Ninja is recommended, and required if using the clang presets.

Arch

The required packages to compile PCSX2 can be installed with: # pacman -S cmake gcc

and optionally: # pacman -S clang lld ninja

(base-devel has gcc in it as well, and may be a good idea to install.)

Fedora

The required packages to compile PCSX2 can be installed with: # sudo yum install cmake g++

and optionally: # sudo yum install ninja-build lld clang

Ubuntu

The required packages to compile PCSX2 can be installed with: # sudo apt install cmake g++

and optionally: # sudo apt install ninja-build lld clang

(Like Arch, if you're having trouble, install build-essential)

openSUSE

The required packages to compile PCSX2 can be installed with: sudo zypper install cmake gcc gcc-c++

and optionally: # sudo zypper install ninja-build lld llvm-clang

(Not absolutely sure the latter is correct. Could use testing.)

Installing the Dependencies

PCSX2 relies on a number of 3rd party software libraries, so you are going to need to obtain those before you can compile the source code. Here's a non-exhaustive list of these dependencies.

If you don't have the following, it will use prebundled versions: <source lang="bash"> sdl2 >= 2.0.22 fmt >= 7.1.3 rapidyaml >= 0.4.0 zstd >= 1.4.5 libzip >= 1.8.0 </source>

You have to have: <source lang="bash"> pcap liblzma libaio libsoundtouch qt6 </source>

If your distribution has development versions of packages, you'll probably need those packages as well. With qt 6, we're probably talking something like:
Fedora: <source>yum install qt6-qtbase-devel qt6-qtbase-private-devel qt6-qttools-devel</source>

OpenSuse: <source>sudo zypper install qt6-base-devel qt6-base-private-devel qt6-tools-devel qt6-linguist-devel</source>

Ubuntu: <source>apt install qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools</source>

(All of those worked at one point, but need to be doublechecked.)

Compiling the Source

If you didn't already get pcsx2's source, run:
$ git clone [email protected]:PCSX2/pcsx2.git --recurse

Now go into the pcsx2 directory: <source>$ cd ./pcsx2</source> If you forgot the "--recurse" part when cloning, run this command: <source>$ git submodule --init --recursive</source> Now, make a build directory: <source>$ mkdir -p ./build && cd ./build</source>

Now, it is time to compile the source code! Easiest way to do that is with a preset.

If you're using gcc/make: <source lang="bash">$ cmake --preset=gcc-release .. $ make -j <number of jobs. Say 4 or 6 if you aren't sure.></source>

If you are using gcc & ninja: <source lang="bash">$ cmake --preset=gcc-release-ninja .. $ ninja</source>

And if you are using clang with lld and ninja: <source lang="bash">$ cmake --preset=clang-release .. $ ninja</source>

Here's a full list, if you want a different preset:

For reference, here is the current list of presets:
Name Description
ninja-multi Generates ninja build files for debug/devel/and release builds for gcc.
gcc-debug For making a debug build with gcc and make.
gcc-devel For making a development build with gcc and make.
gcc-release For making a release build with gcc and make. Does not have LTO.
gcc-debug-ninja For making a debug build with gcc and ninja. (ninja builds faster then make.)
gcc-devel-ninja For making a development build with gcc and ninja.(ninja builds faster then make.)
gcc-release-ninja For making a release build with gcc and ninja. Does not have LTO. (ninja builds faster then make.)
clang-debug For making a debug build with clang and ninja. (Fastest builds.)
clang-devel For making a development build with clang and ninja. (Fastest builds.)
clang-release For making a release build with clang and ninja. (This one has lto, so has the slowest build time.)

If omit any of the libraries or headers specified above (or other, newer dependencies not included here), CMake will abort, your compiler may skip certain parts of the overall build or the linker may fail to link all the dependencies into the final PCSX2 executable. The output from any one of these tools should be able to tell the dependencies you're missing.

Running the Binary

This process may take several minutes. Once it has finished, you should be able to run the pcsx2 binary, which should've been output to the build/bin/ directory.

<source lang="bash">$ ./bin/pcsx2-qt</source>

Additional external, likely outdated links