瀏覽代碼

Merge pull request #6648 from Calinou/compiling-linuxbsd-faster-linking

Document ways to further speed up linking in Compiling for Linux/*BSD
Max Hilbrunner 2 年之前
父節點
當前提交
be5ac7b34b
共有 1 個文件被更改,包括 73 次插入0 次删除
  1. 73 0
      contributing/development/compiling/compiling_for_linuxbsd.rst

+ 73 - 0
contributing/development/compiling/compiling_for_linuxbsd.rst

@@ -36,6 +36,8 @@ required:
              For a general overview of SCons usage for Godot, see
              :ref:`doc_introduction_to_the_buildsystem`.
 
+.. _doc_compiling_for_linuxbsd_oneliners:
+
 Distro-specific one-liners
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 +------------------+-----------------------------------------------------------------------------------------------------------+
@@ -261,6 +263,77 @@ created in the ``bin/`` folder.
 It's still recommended to use GCC for production builds as they can be compiled using
 link-time optimization, making the resulting binaries smaller and faster.
 
+Using mold for faster development
+---------------------------------
+
+For even faster linking compared to LLD, you can use `mold <https://github.com/rui314/mold>`__.
+mold can be used with either GCC or Clang.
+
+As of January 2023, mold is not readily available in Linux distribution
+repositories, so you will have to install its binaries manually.
+
+- Download mold binaries from its `releases page <https://github.com/rui314/mold/releases/latest>`__.
+- Extract the ``.tar.gz`` file, then move the extraced folder to a location such as ``.local/share/mold``.
+- Add ``$HOME/.local/share/mold/bin`` to your user's ``PATH`` environment variable.
+  For example, you can add the following line at the end of your ``$HOME/.bash_profile`` file:
+
+::
+
+    PATH="$HOME/.local/share/mold/bin:$PATH"
+
+- Open a new terminal (or run ``source "$HOME/.bash_profile"``),
+  then use the following SCons command when compiling Godot::
+
+    scons platform=linuxbsd linker=mold
+
+Using system libraries for faster development
+---------------------------------------------
+
+`Godot bundles the source code of various third-party libraries. <https://github.com/godotengine/godot/tree/master/thirdparty>`__
+You can choose to use system versions of third-party libraries instead.
+This makes the Godot binary faster to link, as third-party libraries are
+dynamically linked. Therefore, they don't need to be statically linked
+every time you build the engine (even on small incremental changes).
+
+However, not all Linux distributions have packages for third-party libraries
+available (or they may not be up-to-date).
+
+Moving to system libraries can reduce linking times by several seconds on slow
+CPUs, but it requires manual testing depending on your Linux distribution. Also,
+you may not be able to use system libraries for everything due to bugs in the
+system library packages (or in the build system, as this feature is less
+tested).
+
+To compile Godot with system libraries, install these dependencies *on top* of the ones
+listed in the :ref:`doc_compiling_for_linuxbsd_oneliners`:
+
++------------------+-----------------------------------------------------------------------------------------------------------+
+| **Fedora**       | ::                                                                                                        |
+|                  |                                                                                                           |
+|                  |     sudo dnf install embree-devel enet-devel glslang-devel graphite2-devel harfbuzz-devel libicu-devel \  |
+|                  |         libsquish-devel libtheora-devel libvorbis-devel libwebp-devel libzstd-devel mbedtls-devel \       |
+|                  |         miniupnpc-devel                                                                                   |
++------------------+-----------------------------------------------------------------------------------------------------------+
+
+After installing all required packages, use the following command to build Godot:
+
+.. NOTE: Some `builtin_` options aren't used here because they break the build as of January 2023
+   (tested on Fedora 37).
+
+::
+
+    scons platform=linuxbsd builtin_embree=no builtin_enet=no builtin_freetype=no builtin_graphite=no builtin_harfbuzz=no builtin_libogg=no builtin_libpng=no builtin_libtheora=no builtin_libvorbis=no builtin_libwebp=no builtin_mbedtls=no builtin_miniupnpc=no builtin_pcre2=no builtin_zlib=no builtin_zstd=no
+
+You can view a list of all built-in libraries that have system alternatives by
+running ``scons -h``, then looking for options starting with ``builtin_``.
+
+.. warning::
+
+    When using system libraries, the resulting library is **not** portable
+    across Linux distributions anymore. Do not use this approach for creating
+    binaries you intend to distribute to others, unless you're creating a
+    package for a Linux distribution.
+
 Using Pyston for faster development
 -----------------------------------