mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 14:27:49 +00:00
Merge pull request #395 from phil-opp/builtin-lld
LLD is now shipped with Rust!
This commit is contained in:
@@ -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
|
||||
|
||||
17
.travis.yml
17
.travis.yml
@@ -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)
|
||||
|
||||
@@ -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).
|
||||
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user