mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 21:54:42 +00:00
Support choosing the allocator in xtask dist
This commit is contained in:
parent
84d38c7e94
commit
f6b9cff105
3 changed files with 55 additions and 19 deletions
|
@ -10,7 +10,11 @@ use time::OffsetDateTime;
|
|||
use xshell::{cmd, Shell};
|
||||
use zip::{write::FileOptions, DateTime, ZipWriter};
|
||||
|
||||
use crate::{date_iso, flags, project_root};
|
||||
use crate::{
|
||||
date_iso,
|
||||
flags::{self, Malloc},
|
||||
project_root,
|
||||
};
|
||||
|
||||
const VERSION_STABLE: &str = "0.3";
|
||||
const VERSION_NIGHTLY: &str = "0.4";
|
||||
|
@ -22,6 +26,7 @@ impl flags::Dist {
|
|||
|
||||
let project_root = project_root();
|
||||
let target = Target::get(&project_root);
|
||||
let allocator = self.allocator();
|
||||
let dist = project_root.join("dist");
|
||||
sh.remove_path(&dist)?;
|
||||
sh.create_dir(&dist)?;
|
||||
|
@ -33,11 +38,11 @@ impl flags::Dist {
|
|||
// A hack to make VS Code prefer nightly over stable.
|
||||
format!("{VERSION_NIGHTLY}.{patch_version}")
|
||||
};
|
||||
dist_server(sh, &format!("{version}-standalone"), &target)?;
|
||||
dist_server(sh, &format!("{version}-standalone"), &target, allocator)?;
|
||||
let release_tag = if stable { date_iso(sh)? } else { "nightly".to_owned() };
|
||||
dist_client(sh, &version, &release_tag, &target)?;
|
||||
} else {
|
||||
dist_server(sh, "0.0.0-standalone", &target)?;
|
||||
dist_server(sh, "0.0.0-standalone", &target, allocator)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
@ -73,7 +78,12 @@ fn dist_client(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn dist_server(sh: &Shell, release: &str, target: &Target) -> anyhow::Result<()> {
|
||||
fn dist_server(
|
||||
sh: &Shell,
|
||||
release: &str,
|
||||
target: &Target,
|
||||
allocator: Malloc,
|
||||
) -> anyhow::Result<()> {
|
||||
let _e = sh.push_env("CFG_RELEASE", release);
|
||||
let _e = sh.push_env("CARGO_PROFILE_RELEASE_LTO", "thin");
|
||||
|
||||
|
@ -87,7 +97,8 @@ fn dist_server(sh: &Shell, release: &str, target: &Target) -> anyhow::Result<()>
|
|||
}
|
||||
|
||||
let target_name = &target.name;
|
||||
cmd!(sh, "cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --target {target_name} --release").run()?;
|
||||
let features = allocator.to_features();
|
||||
cmd!(sh, "cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --target {target_name} {features...} --release").run()?;
|
||||
|
||||
let dst = Path::new("dist").join(&target.artifact_name);
|
||||
gzip(&target.server_path, &dst.with_extension("gz"))?;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::install::{ClientOpt, Malloc, ServerOpt};
|
||||
use crate::install::{ClientOpt, ServerOpt};
|
||||
|
||||
xflags::xflags! {
|
||||
src "./src/flags.rs"
|
||||
|
@ -36,6 +36,10 @@ xflags::xflags! {
|
|||
optional --dry-run
|
||||
}
|
||||
cmd dist {
|
||||
/// Use mimalloc allocator for server
|
||||
optional --mimalloc
|
||||
/// Use jemalloc allocator for server
|
||||
optional --jemalloc
|
||||
optional --client-patch-version version: String
|
||||
}
|
||||
/// Read a changelog AsciiDoc file and update the GitHub Releases entry in Markdown.
|
||||
|
@ -106,6 +110,8 @@ pub struct Promote {
|
|||
|
||||
#[derive(Debug)]
|
||||
pub struct Dist {
|
||||
pub mimalloc: bool,
|
||||
pub jemalloc: bool,
|
||||
pub client_patch_version: Option<String>,
|
||||
}
|
||||
|
||||
|
@ -215,6 +221,23 @@ impl AsRef<str> for MeasurementType {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub(crate) enum Malloc {
|
||||
System,
|
||||
Mimalloc,
|
||||
Jemalloc,
|
||||
}
|
||||
|
||||
impl Malloc {
|
||||
pub(crate) fn to_features(self) -> &'static [&'static str] {
|
||||
match self {
|
||||
Malloc::System => &[][..],
|
||||
Malloc::Mimalloc => &["--features", "mimalloc"],
|
||||
Malloc::Jemalloc => &["--features", "jemalloc"],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Install {
|
||||
pub(crate) fn server(&self) -> Option<ServerOpt> {
|
||||
if self.client && !self.server {
|
||||
|
@ -236,3 +259,15 @@ impl Install {
|
|||
Some(ClientOpt { code_bin: self.code_bin.clone() })
|
||||
}
|
||||
}
|
||||
|
||||
impl Dist {
|
||||
pub(crate) fn allocator(&self) -> Malloc {
|
||||
if self.mimalloc {
|
||||
Malloc::Mimalloc
|
||||
} else if self.jemalloc {
|
||||
Malloc::Jemalloc
|
||||
} else {
|
||||
Malloc::System
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ use std::{env, path::PathBuf, str};
|
|||
use anyhow::{bail, format_err, Context};
|
||||
use xshell::{cmd, Shell};
|
||||
|
||||
use crate::flags;
|
||||
use crate::flags::{self, Malloc};
|
||||
|
||||
impl flags::Install {
|
||||
pub(crate) fn run(self, sh: &Shell) -> anyhow::Result<()> {
|
||||
|
@ -34,12 +34,6 @@ pub(crate) struct ServerOpt {
|
|||
pub(crate) dev_rel: bool,
|
||||
}
|
||||
|
||||
pub(crate) enum Malloc {
|
||||
System,
|
||||
Mimalloc,
|
||||
Jemalloc,
|
||||
}
|
||||
|
||||
fn fix_path_for_mac(sh: &Shell) -> anyhow::Result<()> {
|
||||
let mut vscode_path: Vec<PathBuf> = {
|
||||
const COMMON_APP_PATH: &str =
|
||||
|
@ -122,7 +116,7 @@ fn install_client(sh: &Shell, client_opt: ClientOpt) -> anyhow::Result<()> {
|
|||
if !installed_extensions.contains("rust-analyzer") {
|
||||
bail!(
|
||||
"Could not install the Visual Studio Code extension. \
|
||||
Please make sure you have at least NodeJS 12.x together with the latest version of VS Code installed and try again. \
|
||||
Please make sure you have at least NodeJS 16.x together with the latest version of VS Code installed and try again. \
|
||||
Note that installing via xtask install does not work for VS Code Remote, instead you’ll need to install the .vsix manually."
|
||||
);
|
||||
}
|
||||
|
@ -131,11 +125,7 @@ fn install_client(sh: &Shell, client_opt: ClientOpt) -> anyhow::Result<()> {
|
|||
}
|
||||
|
||||
fn install_server(sh: &Shell, opts: ServerOpt) -> anyhow::Result<()> {
|
||||
let features = match opts.malloc {
|
||||
Malloc::System => &[][..],
|
||||
Malloc::Mimalloc => &["--features", "mimalloc"],
|
||||
Malloc::Jemalloc => &["--features", "jemalloc"],
|
||||
};
|
||||
let features = opts.malloc.to_features();
|
||||
let profile = if opts.dev_rel { "dev-rel" } else { "release" };
|
||||
|
||||
let cmd = cmd!(sh, "cargo install --path crates/rust-analyzer --profile={profile} --locked --force --features force-always-assert {features...}");
|
||||
|
|
Loading…
Reference in a new issue