Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to LLVM 18.1.0 rc 4 #121395

Merged
merged 2 commits into from
Mar 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 30 additions & 7 deletions src/bootstrap/src/core/build_steps/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2021,18 +2021,39 @@ fn add_env(builder: &Builder<'_>, cmd: &mut Command, target: TargetSelection) {
}
}

fn install_llvm_file(builder: &Builder<'_>, source: &Path, destination: &Path) {
fn install_llvm_file(
builder: &Builder<'_>,
source: &Path,
destination: &Path,
install_symlink: bool,
) {
if builder.config.dry_run() {
return;
}

builder.install(source, destination, 0o644);
if source.is_symlink() {
// If we have a symlink like libLLVM-18.so -> libLLVM.so.18.1, install the target of the
// symlink, which is what will actually get loaded at runtime.
builder.install(&t!(fs::canonicalize(source)), destination, 0o644);
if install_symlink {
// If requested, also install the symlink. This is used by download-ci-llvm.
let full_dest = destination.join(source.file_name().unwrap());
builder.copy(&source, &full_dest);
}
} else {
builder.install(&source, destination, 0o644);
}
}

/// Maybe add LLVM object files to the given destination lib-dir. Allows either static or dynamic linking.
///
/// Returns whether the files were actually copied.
fn maybe_install_llvm(builder: &Builder<'_>, target: TargetSelection, dst_libdir: &Path) -> bool {
fn maybe_install_llvm(
builder: &Builder<'_>,
target: TargetSelection,
dst_libdir: &Path,
install_symlink: bool,
) -> bool {
// If the LLVM was externally provided, then we don't currently copy
// artifacts into the sysroot. This is not necessarily the right
// choice (in particular, it will require the LLVM dylib to be in
Expand Down Expand Up @@ -2081,7 +2102,7 @@ fn maybe_install_llvm(builder: &Builder<'_>, target: TargetSelection, dst_libdir
} else {
PathBuf::from(file)
};
install_llvm_file(builder, &file, dst_libdir);
install_llvm_file(builder, &file, dst_libdir, install_symlink);
}
!builder.config.dry_run()
} else {
Expand All @@ -2096,7 +2117,7 @@ pub fn maybe_install_llvm_target(builder: &Builder<'_>, target: TargetSelection,
// dynamically linked; it is already included into librustc_llvm
// statically.
if builder.llvm_link_shared() {
maybe_install_llvm(builder, target, &dst_libdir);
maybe_install_llvm(builder, target, &dst_libdir, false);
}
}

Expand All @@ -2108,7 +2129,7 @@ pub fn maybe_install_llvm_runtime(builder: &Builder<'_>, target: TargetSelection
// dynamically linked; it is already included into librustc_llvm
// statically.
if builder.llvm_link_shared() {
maybe_install_llvm(builder, target, &dst_libdir);
maybe_install_llvm(builder, target, &dst_libdir, false);
}
}

Expand Down Expand Up @@ -2203,6 +2224,8 @@ impl Step for RustDev {

let mut tarball = Tarball::new(builder, "rust-dev", &target.triple);
tarball.set_overlay(OverlayKind::LLVM);
// LLVM requires a shared object symlink to exist on some platforms.
tarball.permit_symlinks(true);

builder.ensure(crate::core::build_steps::llvm::Llvm { target });

Expand Down Expand Up @@ -2243,7 +2266,7 @@ impl Step for RustDev {
// of `rustc-dev` to support the inherited `-lLLVM` when using the
// compiler libraries.
let dst_libdir = tarball.image_dir().join("lib");
maybe_install_llvm(builder, target, &dst_libdir);
maybe_install_llvm(builder, target, &dst_libdir, true);
let link_type = if builder.llvm_link_shared() { "dynamic" } else { "static" };
t!(std::fs::write(tarball.image_dir().join("link-type.txt"), link_type), dst_libdir);

Expand Down
3 changes: 0 additions & 3 deletions src/bootstrap/src/core/build_steps/llvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,6 @@ pub fn prebuilt_llvm_config(
let out_dir = builder.llvm_out(target);

let mut llvm_config_ret_dir = builder.llvm_out(builder.config.build);
if (!builder.config.build.is_msvc() || builder.ninja()) && !builder.config.llvm_from_ci {
llvm_config_ret_dir.push("build");
}
llvm_config_ret_dir.push("bin");
let build_llvm_config = llvm_config_ret_dir.join(exe("llvm-config", builder.config.build));
let llvm_cmake_dir = out_dir.join("lib/cmake/llvm");
Expand Down
2 changes: 1 addition & 1 deletion src/llvm-project
Submodule llvm-project updated 252 files
3 changes: 2 additions & 1 deletion src/tools/opt-dist/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ fn execute_pipeline(
})?;

let libdir = env.build_artifacts().join("stage2").join("lib");
let llvm_lib = io::find_file_in_dir(&libdir, "libLLVM", ".so")?;
// The actual name will be something like libLLVM.so.18.1-rust-dev.
let llvm_lib = io::find_file_in_dir(&libdir, "libLLVM.so", "")?;

log::info!("Optimizing {llvm_lib} with BOLT");

Expand Down
Loading