Merge pull request #395 from phil-opp/builtin-lld

LLD is now shipped with Rust!
This commit is contained in:
Philipp Oppermann
2018-03-06 11:55:45 +01:00
committed by GitHub
5 changed files with 4 additions and 47 deletions

View File

@@ -65,9 +65,7 @@ install:
build: false
before_test:
- mkdir bin
- mklink "bin\ld.exe" "C:\Program Files\LLVM\bin\lld.exe"
- set PATH=%CD%\bin;C:\msys64\mingw%MSYS_BITS%\bin;C:\msys64\usr\bin;%PATH%
- set PATH=C:\msys64\mingw%MSYS_BITS%\bin;C:\msys64\usr\bin;%PATH%
- rustup component add rust-src
- set RUST_BACKTRACE=1
- if not exist %USERPROFILE%\.cargo\bin\cargo-install-update.exe cargo install cargo-update

View File

@@ -19,29 +19,12 @@ os:
- linux
- osx
addons:
apt:
sources:
- llvm-toolchain-trusty-5.0
packages:
- lld-5.0
cache:
directories:
- $HOME/.cargo
- $HOME/.xargo
- $TRAVIS_BUILD_DIR/target
before_install:
- |
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
set -e
LLVM_URL="https://releases.llvm.org/5.0.1/clang+llvm-5.0.1-x86_64-apple-darwin.tar.xz"
travis_retry wget -O llvm.tar.xz -nv ${LLVM_URL}
tar -xJ -f llvm.tar.xz
export PATH="`pwd`/clang+llvm-5.0.1-final-x86_64-apple-darwin/bin:$PATH"
fi
before_script:
- rustup component add rust-src
- (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)

View File

@@ -1,18 +0,0 @@
+++
title = "Installing LLD"
order = 3
path = "installing-lld"
template = "second-edition/extra.html"
+++
[LLD] is the linker by the LLVM project. It has the big advantage that it is a cross-linker by default. This means that you can link libraries and executables for all kinds of platforms with the same LLD installation.
[LLD]: https://lld.llvm.org/
There are plans to distribute LLD together with the Rust compiler, but is not quite there yet. So you have to install it manually. On this page, we try to describe the installation procedure for as many platforms as possible, so if you have additional information for any listed or unlisted platform, please send a pull request on the [Github repo](https://github.com/phil-opp/blog_os)!
## Linux
On most Linux distributions LLD can be installed through the package manager. For example, for Debian and Ubuntu there is are official apt sources at <https://apt.llvm.org/>.
## Other Platforms
For Windows and Mac you can download a pre-built LLVM release from <http://releases.llvm.org/download.html>, which contains LLD. If there are no pre-compiled versions for your platform (e.g. some other Linux distribution), you can download the source code and [build it yourself](https://lld.llvm.org/#build).

View File

@@ -132,11 +132,10 @@ We add the following build-related entries:
```json
"linker-flavor": "ld",
"linker": "ld.lld",
"linker-flavor": "ld.lld",
```
Instead of using the platform's default linker (which might not support Linux targets), we use the cross platform [LLD] linker for linking our kernel.
Instead of using the platform's default linker (which might not support Linux targets), we use the cross platform [LLD] linker for linking our kernel. LLD is shipped with Rust since the `2018-03-05` nightly.
[LLD]: https://lld.llvm.org/
@@ -260,10 +259,6 @@ Let's try it:
Finished dev [unoptimized + debuginfo] target(s) in 0.29 secs
```
(If you're getting a linking error because LLD could not be found, see our “[Installing LLD]” guide.)
[Installing LLD]: ./second-edition/extra/installing-lld/index.md
It worked! We see that `xargo` cross-compiled the `core` library for our new custom target and then continued to compile our `blog_os` crate.
Now we are able to build our kernel for a bare metal target. However, our `_start` entry point, which will be called by the boot loader, is still empty. So let's output something to screen from it.

View File

@@ -6,8 +6,7 @@
"target-pointer-width": "64",
"target-c-int-width": "32",
"os": "none",
"linker-flavor": "ld",
"linker": "ld.lld",
"linker-flavor": "ld.lld",
"executables": true,
"features": "-mmx,-sse,+soft-float",
"disable-redzone": true,