summaryrefslogtreecommitdiffstats
path: root/docs/setup/linux_build.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/setup/linux_build.rst')
-rw-r--r--docs/setup/linux_build.rst282
1 files changed, 282 insertions, 0 deletions
diff --git a/docs/setup/linux_build.rst b/docs/setup/linux_build.rst
new file mode 100644
index 0000000000..321db0a96a
--- /dev/null
+++ b/docs/setup/linux_build.rst
@@ -0,0 +1,282 @@
+Building Firefox On Linux
+=========================
+
+They aren’t complicated, but there are a few prerequisites to building Firefox on Linux. You need:
+
+#. A 64-bit installation of Linux. You can check by opening a terminal window; if ``uname -m`` returns ``x86_64`` you can proceed.
+#. Next, you’ll need Python 3.6 or later installed. You can check with ``python3 --version`` to see if you have it already. If not, see `Installing Python <#installingpython>`_. You'll also need to install Mercurial and can do so with ``pip3 install Mercurial``.
+#. Finally, a reasonably fast internet connection and 30GB of free disk space.
+
+Getting Started
+---------------
+
+Getting set up on Linux is fast and easy.
+
+If you don’t have one yet, create a "``src``" directory for
+yourself under your home directory:
+
+.. code-block:: shell
+
+ mkdir src && cd src
+
+Next `download the bootstrap.py
+script <https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py>`_
+and save it in the ``src/`` directory created above.
+
+.. warning::
+
+ Building Firefox in Linux on top of a non-native file system -
+ for example, on a mounted NTFS partition - is explicitly not
+ supported. While a build environment like this may succeed it
+ may also fail while claiming to have succeeded, which can be
+ quite difficult to diagnose and fix.
+
+And finally, in your terminal from above start the bootstrapper
+like this:
+
+.. code-block:: shell
+
+ python3 bootstrap.py
+
+... and follow the prompts. This will use mercurial to checkout
+the source code. If you prefer to work with ``git``, use this command
+instead (make sure you have ``git`` installed):
+
+.. code-block:: shell
+
+ python3 bootstrap.py --vcs=git
+
+Let’s Build Firefox
+-------------------
+
+You’re ready; now we can tie it all together. In your terminal:
+
+.. code-block:: shell
+
+ cd mozilla-unified # ... or the name of the repo you chose in the above step
+
+If you are not working on the C/C++ files you can also opt for
+:ref:`Artifact Builds <Understanding Artifact Builds>`
+which are much faster. To enable artifact build set up a
+:ref:`mozconfig <Configuring Build Options>`
+file with the following options:
+
+.. code-block:: shell
+
+ # Automatically download and use compiled C++ components:
+ # This option will disable C/C++ compilation
+ ac_add_options --enable-artifact-builds
+
+ # Write build artifacts to (not mandatory):
+ mk_add_options MOZ_OBJDIR=./objdir-frontend
+
+If you plan to walk through code with a debugger, set up a
+:ref:`.mozconfig <Configuring Build Options>`
+file with the following options:
+
+.. code-block:: shell
+
+ ac_add_options --disable-optimize
+ ac_add_options --enable-debug
+
+
+Older clang versions (especially clang 6) `from LTS linux
+distributions sometimes miscompile
+Firefox <https://bugzilla.mozilla.org/show_bug.cgi?id=1594686>`_,
+resulting in startup crashes when starting the resulting build.
+If this happens, you can force the use of the ``clang`` version
+that ``./mach bootstrap`` downloaded by adding the following to
+your ``.mozconfig``:
+
+.. code-block:: shell
+
+ export CC=path/to/home/.mozbuild/clang/bin/clang
+ export CXX=path/to/home/.mozbuild/clang/bin/clang++
+
+And finally, run the build command:
+
+.. code-block:: shell
+
+ ./mach build
+
+If you encounter any error related to LLVM/Clang on Ubuntu or
+Debian, download the latest version of LLVM and Clang and then
+re-run ``./mach build``.
+
+And you’re on your way, building your own copy of Firefox from
+source. Don’t be discouraged if this takes a while; this takes
+some time on even the fastest modern machines, and as much as two
+hours or more on older hardware. When the
+``--enable-artifact-builds`` option is used, builds usually finish
+within a few minutes.
+
+Now the fun starts
+------------------
+
+You have the code, you’ve compiled Firefox. Fire it up with
+``./mach run`` and you’re ready to start hacking. The next steps
+are up to you: join us on `Matrix <https://chat.mozilla.org/>`_
+in the `Introduction <https://chat.mozilla.org/#/room/#introduction:mozilla.org>`_
+channel, and find `a bug to start working on. <https://codetribute.mozilla.org/>`_
+
+
+General considerations
+----------------------
+
+#. 4GB RAM with an additional 4GB of available swap space is the bare minimum, and more RAM is always better - having 8GB or more will dramatically improve build time.
+#. A 64-bit x86 CPU and a 64-bit OS. As of early 2015 it is no longer possible to do a full build of Firefox from source on most 32-bit systems; a 64-bit OS is required. ":ref:`Artifact Builds <Understanding Artifact Builds>`" may be possible, but are not a supported configuration. On Linux you can determine this by typing "``uname -a``" in a terminal. It is possible to build a 32-bit Firefox on a 64-bit system, see :ref:`Building Firefox 32-bit on Linux 64-bit <Building Firefox 32-bit On Linux 64-bit>`.
+#. A recent version of Clang is required to build Firefox. You can learn more about the features we use and their :ref:`compiler support <Using C++ in Mozilla code>`.
+#. If you are on a Fedora machine then simply install the following prerequisites from the terminal window:
+
+.. code-block:: shell
+
+ sudo dnf install @development-tools @c-development gtk2-devel gtk3-devel libXt-devel GConf2-devel dbus-glib-devel yasm-devel alsa-lib-devel pulseaudio-libs-devel
+
+
+.. _installingpython:
+
+Installing Python
+-----------------
+
+To build Firefox, it's necessary to have a Python of version 3.6 or later
+installed. Python 2 is no longer required to build Firefox, although it is still
+required for some development tasks, like testing and pushing to ``try``.
+
+Often, you can install both Python 2 and 3 with your system package manager.
+Make sure your system is up to date! However, users on older Linux distributions
+might find they are unable to install a recent enough Python 3, while users on
+newer Linux distributions may find that they can no longer install Python 2.7.
+`pyenv <https://github.com/pyenv/pyenv>`_ is an easy way to install arbitrary
+Python versions if you fall into either of these categories. Your system package
+manager may or may not provide ``pyenv``, but the ``pyenv`` GitHub repository
+provides detailed `manual installation instructions
+<https://github.com/pyenv/pyenv#installation>`_ in any case.
+
+Once you have ``pyenv`` configured properly and ``pyenv``'s ``shims`` directory
+at the front of your ``$PATH``, you can easily install any version of Python
+and configure your project to use them. For example, at the root of your
+checkout, do the following:
+
+.. code-block:: shell
+
+ pyenv install 2.7.17
+ pyenv install 3.7.8
+ pyenv local 3.7.8 2.7.17
+
+
+Requirements for Debian / Ubuntu users
+--------------------------------------
+
+You need a number of different packages:
+
+.. code-block:: shell
+
+ # the rust compiler
+ aptitude install rustc
+
+ # the rust package manager
+ aptitude install cargo
+
+ # the headers of important libs
+ aptitude install libgtk-2-dev
+ aptitude install libgtk-3-dev
+ aptitude install libgconf2-dev
+ aptitude install libdbus-glib-1-dev
+ aptitude install libpulse-dev
+
+ # rust dependencies
+ cargo install cbindgen
+
+ # an assembler for compiling webm
+ aptitude install yasm
+
+ # Python 3 dependencies. This will work on Ubuntu 18.04LTS and later or
+ # Debian buster and later. For earlier releases of Ubuntu or Debian, you
+ # may prefer to use pyenv.
+ aptitude install python3 python3-dev python3-pip python3-setuptools
+
+ # Python 2 dependencies. This will work on Ubuntu versions prior to 20.04 LTS
+ # and Debian versions prior to bullseye. For later releases of Ubuntu or
+ # Debian, you may prefer to use pyenv.
+ aptitude install python python-dev python-pip python-setuptools
+
+
+One-Line Bootstrapping
+----------------------
+
+Our system bootstrapping script can automatically install the required
+dependencies. You can download and run it by copying this line and
+pasting it into a terminal window:
+
+.. code-block:: shell
+
+ wget -q https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O bootstrap.py && python3 bootstrap.py
+
+.. note::
+
+ Note: piping bootstrap.py to stdin of a python process will cause
+ interactive prompts in the bootstrap script to fail, causing the
+ bootstrap process to fail. You must run Python against a local file.
+
+If the above command fails, the reason is often because some Linux
+distributions ship with an outdated list of root certificates. In this
+case, you should upgrade your Linux distribution or use your browser to
+download the file. That ensures that you will get it from the right
+source.
+If you get an error from this process, consider `filing a
+bug <https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Build%20Config>`_
+saying that the bootstrapper didn't work and `contact Mike
+Hoye <mailto:mhoye@mozilla.com>` directly for help. Please include the
+error message and some details about your operating system.
+
+If you have already checked out the source code via Mercurial or Git you
+can also use :ref:`mach` with the bootstrap command:
+
+.. code-block:: shell
+
+ ./mach bootstrap
+
+
+
+Common Bootstrapper Failures
+----------------------------
+
+.. code-block:: shell
+
+ wget: command not found
+
+You may not have wget (or curl) installed. In that case, you can either
+install it via your package manager:
+
+On Debian-based distros like Ubuntu:
+
+.. code-block:: shell
+
+ sudo apt install wget
+
+On Fedora-based distros:
+
+.. code-block:: shell
+
+ sudo dnf install wget
+
+or you can just `download
+bootstrap.py <https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py>`_
+using your browser and then run it with this command:
+
+.. code-block:: shell
+
+ python3 bootstrap.py
+
+In some cases people who've customized their command prompt to include
+emoji or other non-text symbols have found that bootstrap.py fails with
+a ``UnicodeDecodeError``. We have a bug filed for that but in the
+meantime if you run into this problem you'll need to change your prompt
+back to something boring.
+
+
+More info
+---------
+
+The above bootstrap script supports popular Linux distributions. If it
+doesn't work for you, see :ref:`Linux build prerequisites <Building Firefox On Linux>` for more.