2024-04-30 17:42:28 +00:00
|
|
|
# Copy this file to `config.toml` to speed up your builds.
|
|
|
|
#
|
|
|
|
# # Faster linker
|
|
|
|
#
|
|
|
|
# One of the slowest aspects of compiling large Rust programs is the linking time. This file configures an
|
|
|
|
# alternate linker that may improve build times. When choosing a new linker, you have two options:
|
|
|
|
#
|
|
|
|
# ## LLD
|
|
|
|
#
|
2024-07-31 21:16:05 +00:00
|
|
|
# LLD is a linker from the LLVM project that supports Linux, Windows, macOS, and Wasm. It has the greatest
|
2024-04-30 17:42:28 +00:00
|
|
|
# platform support and the easiest installation process. It is enabled by default in this file for Linux
|
2024-07-31 21:16:05 +00:00
|
|
|
# and Windows. On macOS, the default linker yields higher performance than LLD and is used instead.
|
2024-04-30 17:42:28 +00:00
|
|
|
#
|
|
|
|
# To install, please scroll to the corresponding table for your target (eg. `[target.x86_64-pc-windows-msvc]`
|
|
|
|
# for Windows) and follow the steps under `LLD linker`.
|
|
|
|
#
|
|
|
|
# For more information, please see LLD's website at <https://lld.llvm.org>.
|
|
|
|
#
|
|
|
|
# ## Mold
|
|
|
|
#
|
|
|
|
# Mold is a newer linker written by one of the authors of LLD. It boasts even greater performance, specifically
|
|
|
|
# through its high parallelism, though it only supports Linux.
|
|
|
|
#
|
|
|
|
# Mold is disabled by default in this file. If you wish to enable it, follow the installation instructions for
|
|
|
|
# your corresponding target, disable LLD by commenting out its `-Clink-arg=...` line, and enable Mold by
|
|
|
|
# *uncommenting* its `-Clink-arg=...` line.
|
|
|
|
#
|
2024-07-31 21:16:05 +00:00
|
|
|
# There is a fork of Mold named Sold that supports macOS, but it is unmaintained and is about the same speed as
|
2024-04-30 17:42:28 +00:00
|
|
|
# the default ld64 linker. For this reason, it is not included in this file.
|
|
|
|
#
|
|
|
|
# For more information, please see Mold's repository at <https://github.com/rui314/mold>.
|
|
|
|
#
|
|
|
|
# # Nightly configuration
|
|
|
|
#
|
|
|
|
# Be warned that the following features require nightly Rust, which is expiremental and may contain bugs. If you
|
|
|
|
# are having issues, skip this section and use stable Rust instead.
|
|
|
|
#
|
|
|
|
# There are a few unstable features that can improve performance. To use them, first install nightly Rust
|
|
|
|
# through Rustup:
|
|
|
|
#
|
|
|
|
# ```
|
|
|
|
# rustup toolchain install nightly
|
|
|
|
# ```
|
|
|
|
#
|
|
|
|
# Finally, uncomment the lines under the `Nightly` heading for your corresponding target table (eg.
|
|
|
|
# `[target.x86_64-unknown-linux-gnu]` for Linux) to enable the following features:
|
|
|
|
#
|
|
|
|
# ## `share-generics`
|
|
|
|
#
|
|
|
|
# Usually rustc builds each crate separately, then combines them all together at the end. `share-generics` forces
|
|
|
|
# crates to share monomorphized generic code, so they do not duplicate work.
|
|
|
|
#
|
|
|
|
# In other words, instead of crate 1 generating `Foo<String>` and crate 2 generating `Foo<String>` separately,
|
|
|
|
# only one crate generates `Foo<String>` and the other adds on to the pre-exiting work.
|
|
|
|
#
|
|
|
|
# Note that you may have some issues with this flag on Windows. If compiling fails due to the 65k symbol limit,
|
|
|
|
# you may have to disable this setting. For more information and possible solutions to this error, see
|
|
|
|
# <https://github.com/bevyengine/bevy/issues/1110>.
|
|
|
|
#
|
|
|
|
# ## `threads`
|
|
|
|
#
|
|
|
|
# This option enables rustc's parallel frontend, which improves performance when parsing, type checking, borrow
|
|
|
|
# checking, and more. We currently set `threads=0`, which defaults to the amount of cores in your CPU.
|
|
|
|
#
|
|
|
|
# For more information, see the blog post at <https://blog.rust-lang.org/2023/11/09/parallel-rustc.html>.
|
2020-06-08 06:35:40 +00:00
|
|
|
|
2020-01-21 11:11:16 +00:00
|
|
|
[target.x86_64-unknown-linux-gnu]
|
Documentation: simplify NixOS dependencies (#3527)
# Objective
The description of NixOS dependencies is extremely long and spends entire paragraphs just for simple line changes.
With this PR it should be much simpler.
## Solution
- Linking Vulkan in `build.rs` is less effective than adding it in LD_LIBRARY_PATH, so I removed the former (related to #1992);
- I put a simple comment explaining the line in the list of dependencies, instead of making entire paragraphs;
- Clang is not in an absolute path in `.cargo/config_fast_builds` anymore, so that there is no need to specify it in `docs/linux_dependencies.md` (didn't test if this breaks other distros, though I doubt it. Also, maybe it could also be done on Darwin for consistency?);
- Also added optional wayland dependencies.
A few notes:
- The x11 libraries will be linked only during the compilation phase. This means that if you use the `x11` feature without these libraries in the environment (for example because you forget to enter the nix shell before compiling), the program will still compile successfully but won't run. You'll have to `cargo clean` and recompile with the x11 libraries in the environment. I don't know if this is important enough to be added to the documentation, but it's not specified anywhere, though I don't think it's specific to NixOS;
- The wayland dependencies need to be put in LD_LIBRARY_PATH only in certain conditions (IIRC, only if using the `dynamic` feature) and the text doesn't specify it. Because putting them there doesn't increase the number of dependencies (they are already in buildInputs) or alter the performance, I doubt anyone will care;
- Should I comment out what isn't needed by default?
- ~I removed `cargo` from buildInputs. Ignoring the fact that it should be in nativeBuildInputs, having it in `shell.nix` allows to use stable Rust in case it's not in the system environment, but maybe the user wanted to use the version that was already in the system environment and will be caught by surprise. In my opinion, if someone is looking at a Bevy's documentation on NixOS, that user will either have Rust already in the system environment (eg. via rustup) or is capable to add the toolchain they want on shell.nix by themselves. This isn't exactly the place to explain how this works.~ ~EDIT: I replaced `cargo` with Rust from the [Oxalica overlay](https://github.com/oxalica/rust-overlay) in order to have the latest nightly.~ EDIT: Removed `cargo` from dependencies. See comments for details.
2022-01-10 17:05:13 +00:00
|
|
|
linker = "clang"
|
2024-01-25 19:07:51 +00:00
|
|
|
rustflags = [
|
2024-04-30 17:42:28 +00:00
|
|
|
# LLD linker
|
|
|
|
#
|
|
|
|
# You may need to install it:
|
|
|
|
#
|
|
|
|
# - Ubuntu: `sudo apt-get install lld clang`
|
|
|
|
# - Fedora: `sudo dnf install lld clang`
|
|
|
|
# - Arch: `sudo pacman -S lld clang`
|
|
|
|
"-Clink-arg=-fuse-ld=lld",
|
|
|
|
|
|
|
|
# Mold linker
|
|
|
|
#
|
|
|
|
# You may need to install it:
|
|
|
|
#
|
|
|
|
# - Ubuntu: `sudo apt-get install mold clang`
|
|
|
|
# - Fedora: `sudo dnf install mold clang`
|
|
|
|
# - Arch: `sudo pacman -S mold clang`
|
|
|
|
# "-Clink-arg=-fuse-ld=/usr/bin/mold",
|
|
|
|
|
|
|
|
# Nightly
|
|
|
|
# "-Zshare-generics=y",
|
|
|
|
# "-Zthreads=0",
|
2024-01-25 19:07:51 +00:00
|
|
|
]
|
2020-06-01 06:18:24 +00:00
|
|
|
|
2020-06-08 06:35:40 +00:00
|
|
|
[target.x86_64-apple-darwin]
|
2023-02-06 18:24:12 +00:00
|
|
|
rustflags = [
|
2024-04-30 17:42:28 +00:00
|
|
|
# LLD linker
|
|
|
|
#
|
|
|
|
# The default ld64 linker is faster, you should continue using it instead.
|
|
|
|
#
|
|
|
|
# You may need to install it:
|
|
|
|
#
|
|
|
|
# Brew: `brew install llvm`
|
|
|
|
# Manually: <https://lld.llvm.org/MachO/index.html>
|
|
|
|
# "-Clink-arg=-fuse-ld=/usr/local/opt/llvm/bin/ld64.lld",
|
|
|
|
|
|
|
|
# Nightly
|
|
|
|
# "-Zshare-generics=y",
|
|
|
|
# "-Zthreads=0",
|
2023-02-06 18:24:12 +00:00
|
|
|
]
|
2020-06-08 06:35:40 +00:00
|
|
|
|
2021-08-30 21:56:12 +00:00
|
|
|
[target.aarch64-apple-darwin]
|
2023-02-06 18:24:12 +00:00
|
|
|
rustflags = [
|
2024-04-30 17:42:28 +00:00
|
|
|
# LLD linker
|
|
|
|
#
|
|
|
|
# The default ld64 linker is faster, you should continue using it instead.
|
|
|
|
#
|
|
|
|
# You may need to install it:
|
|
|
|
#
|
|
|
|
# Brew: `brew install llvm`
|
|
|
|
# Manually: <https://lld.llvm.org/MachO/index.html>
|
|
|
|
# "-Clink-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld",
|
|
|
|
|
|
|
|
# Nightly
|
|
|
|
# "-Zshare-generics=y",
|
|
|
|
# "-Zthreads=0",
|
2023-02-06 18:24:12 +00:00
|
|
|
]
|
2021-08-30 21:56:12 +00:00
|
|
|
|
2020-06-01 06:18:24 +00:00
|
|
|
[target.x86_64-pc-windows-msvc]
|
2024-04-30 17:42:28 +00:00
|
|
|
# LLD linker
|
|
|
|
#
|
|
|
|
# You may need to install it:
|
|
|
|
#
|
|
|
|
# ```
|
|
|
|
# cargo install -f cargo-binutils
|
|
|
|
# rustup component add llvm-tools
|
|
|
|
# ```
|
|
|
|
linker = "rust-lld.exe"
|
2024-07-08 00:34:21 +00:00
|
|
|
rustdocflags = ["-Clinker=rust-lld.exe"]
|
2024-01-29 23:13:22 +00:00
|
|
|
rustflags = [
|
2024-04-30 17:42:28 +00:00
|
|
|
# Nightly
|
2024-07-02 13:29:10 +00:00
|
|
|
# "-Zshare-generics=n", # This needs to be off if you use dynamic linking on Windows.
|
2024-04-30 17:42:28 +00:00
|
|
|
# "-Zthreads=0",
|
2024-01-29 23:13:22 +00:00
|
|
|
]
|
2020-09-04 21:09:20 +00:00
|
|
|
|
|
|
|
# Optional: Uncommenting the following improves compile times, but reduces the amount of debug info to 'line number tables only'
|
2024-07-31 21:16:05 +00:00
|
|
|
# In most cases the gains are negligible, but if you are on macOS and have slow compile times you should see significant gains.
|
2024-04-30 17:42:28 +00:00
|
|
|
# [profile.dev]
|
|
|
|
# debug = 1
|
2024-05-13 18:33:47 +00:00
|
|
|
|
2024-06-17 15:25:39 +00:00
|
|
|
# This enables you to run the CI tool using `cargo ci`.
|
2024-05-13 18:33:47 +00:00
|
|
|
# This is not enabled by default, you need to copy this file to `config.toml`.
|
|
|
|
[alias]
|
|
|
|
ci = "run --package ci --"
|