mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 10:52:30 +00:00
52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
As we have multiple projects we use a workspace to manage them (it's way simpler and leads to less issues). In order
|
|
to vendor all the dependencies we need to store both the registry and the packages themselves.
|
|
|
|
Note that this includes the exact `std` dependencies for the rustc version used in CI (currently nightly-2024-04-01),
|
|
so you need to install `rustup component add rust-src` for the specific version.
|
|
|
|
* First step: (Re)-generate the Cargo.lock file (run under `workspace/`).
|
|
|
|
```bash
|
|
cargo generate-lockfile
|
|
```
|
|
|
|
* Generate the local registry:
|
|
|
|
Note that we use both commands to vendor both registry and crates. No idea why both are necessary.
|
|
|
|
* First we need to install the tool if you don't already have it:
|
|
```bash
|
|
cargo install --version 0.2.6 cargo-local-registry
|
|
```
|
|
|
|
* Now add the local packages:
|
|
|
|
```bash
|
|
export CH_TOP_DIR=$(git rev-parse --show-toplevel)
|
|
export RUSTC_ROOT=$(rustc --print=sysroot)
|
|
|
|
cd "$CH_TOP_DIR"/rust/workspace
|
|
|
|
cargo local-registry --git --sync Cargo.lock "$CH_TOP_DIR"/contrib/rust_vendor
|
|
cp "$RUSTC_ROOT"/lib/rustlib/src/rust/Cargo.lock "$RUSTC_ROOT"/lib/rustlib/src/rust/library/std/
|
|
cargo local-registry --no-delete --git --sync "$RUSTC_ROOT"/lib/rustlib/src/rust/library/std/Cargo.lock "$CH_TOP_DIR"/contrib/rust_vendor
|
|
cp "$RUSTC_ROOT"/lib/rustlib/src/rust/Cargo.lock "$RUSTC_ROOT"/lib/rustlib/src/rust/library/test/
|
|
cargo local-registry --no-delete --git --sync "$RUSTC_ROOT"/lib/rustlib/src/rust/library/test/Cargo.lock "$CH_TOP_DIR"/contrib/rust_vendor
|
|
|
|
cargo vendor --no-delete --locked "$CH_TOP_DIR"/contrib/rust_vendor
|
|
cd "$RUSTC_ROOT"/lib/rustlib/src/rust/library/std/
|
|
cargo vendor --no-delete "$CH_TOP_DIR"/contrib/rust_vendor
|
|
cd "$RUSTC_ROOT"/lib/rustlib/src/rust/library/test/
|
|
cargo vendor --no-delete "$CH_TOP_DIR"/contrib/rust_vendor
|
|
|
|
# Remove windows only dependencies (which are really heavy and we don't want in the repo)
|
|
rm -rf "$CH_TOP_DIR"/contrib/rust_vendor/winapi* "$CH_TOP_DIR"/contrib/rust_vendor/windows*
|
|
|
|
# Cleanup the lock files we copied
|
|
rm "$RUSTC_ROOT"/lib/rustlib/src/rust/library/std/Cargo.lock "$RUSTC_ROOT"/lib/rustlib/src/rust/library/test/Cargo.lock
|
|
cd "$CH_TOP_DIR"/rust/workspace
|
|
```
|
|
|
|
The `rustc --print=sysroot` part includes `std` dependencies, required to build with sanitizer flags. It must be kept
|
|
in sync with the rustc version used in CI.
|