Skip to content

Commit

Permalink
Explain why libatomic is not needed on FreeBSD riscv64
Browse files Browse the repository at this point in the history
From Jessica Clarke (jrtc27@)
  • Loading branch information
Tobias Kortkamp committed Dec 3, 2021
1 parent 47474f1 commit e24045e
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
5 changes: 4 additions & 1 deletion compiler/rustc_llvm/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,10 @@ fn main() {
"stdc++"
};

// RISC-V requires libatomic for sub-word atomic operations
// RISC-V GCC erroneously requires libatomic for sub-word
// atomic operations. FreeBSD uses Clang as its system
// compiler and provides no libatomic in its base system so
// does not want this.
if !target.contains("freebsd") && target.starts_with("riscv") {
println!("cargo:rustc-link-lib=atomic");
}
Expand Down
9 changes: 7 additions & 2 deletions src/bootstrap/native.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,13 @@ impl Step for Llvm {
}

if !target.contains("freebsd") && target.starts_with("riscv") {
// In RISC-V, using C++ atomics require linking to `libatomic` but the LLVM build
// system check cannot detect this. Therefore it is set manually here.
// RISC-V GCC erroneously requires linking against
// `libatomic` when using 1-byte and 2-byte C++
// atomics but the LLVM build system check cannot
// detect this. Therefore it is set manually here.
// FreeBSD uses Clang as its system compiler and
// provides no libatomic in its base system so does
// not want this.
if !builder.config.llvm_tools_enabled {
cfg.define("CMAKE_EXE_LINKER_FLAGS", "-latomic");
} else {
Expand Down

0 comments on commit e24045e

Please sign in to comment.