mirror of
https://github.com/denoland/rusty_v8.git
synced 2025-02-14 17:47:08 -05:00
feat: add pointer-compression-enabled build for x86_64 linux (#1687)
Co-authored-by: Bert Belder <bertbelder@gmail.com>
This commit is contained in:
parent
021e7017bb
commit
45edd18001
3 changed files with 58 additions and 23 deletions
54
.github/workflows/ci.yml
vendored
54
.github/workflows/ci.yml
vendored
|
@ -12,7 +12,7 @@ permissions: write-all
|
|||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ matrix.config.variant }} ${{ matrix.config.target }}
|
||||
name: ${{ matrix.config.variant }} ${{ matrix.config.target }} ${{ matrix.config.v8_enable_pointer_compression && 'ptrcomp' || '' }}
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
timeout-minutes: 180
|
||||
strategy:
|
||||
|
@ -30,58 +30,82 @@ jobs:
|
|||
- os: macos-13
|
||||
target: x86_64-apple-darwin
|
||||
variant: debug
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: macos-13
|
||||
target: x86_64-apple-darwin
|
||||
variant: release
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: macos-14
|
||||
target: aarch64-apple-darwin
|
||||
variant: asan
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: macos-14
|
||||
target: aarch64-apple-darwin
|
||||
variant: debug
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: macos-14
|
||||
target: aarch64-apple-darwin
|
||||
variant: release
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: x86_64-unknown-linux-gnu
|
||||
variant: debug
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: x86_64-unknown-linux-gnu
|
||||
variant: release
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: x86_64-unknown-linux-gnu
|
||||
variant: debug
|
||||
v8_enable_pointer_compression: true
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: x86_64-unknown-linux-gnu
|
||||
variant: release
|
||||
v8_enable_pointer_compression: true
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'windows-2022-xxl' || 'windows-2022' }}
|
||||
target: x86_64-pc-windows-msvc
|
||||
variant: release # Note: we do not support windows debug builds.
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: aarch64-unknown-linux-gnu
|
||||
variant: debug
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-22.04-xl' || 'ubuntu-22.04' }}
|
||||
target: aarch64-unknown-linux-gnu
|
||||
variant: release
|
||||
v8_enable_pointer_compression: false
|
||||
cargo: cargo
|
||||
|
||||
env:
|
||||
V8_FROM_SOURCE: true
|
||||
CARGO_VARIANT_FLAG: ${{ matrix.config.variant == 'release' && '--release' || '' }}
|
||||
CARGO_FEATURE_FLAGS: ${{ matrix.config.v8_enable_pointer_compression && '--features v8_enable_pointer_compression' || '' }}
|
||||
LIB_NAME: ${{ contains(matrix.config.target, 'windows') && 'rusty_v8' || 'librusty_v8' }}
|
||||
LIB_EXT: ${{ contains(matrix.config.target, 'windows') && 'lib' || 'a' }}
|
||||
FEATURES_SUFFIX: ${{ matrix.config.v8_enable_pointer_compression && '_ptrcomp' || '' }}
|
||||
RUSTFLAGS: -D warnings
|
||||
|
||||
steps:
|
||||
|
@ -143,10 +167,8 @@ jobs:
|
|||
target/*/.*
|
||||
target/*/build
|
||||
target/*/deps
|
||||
key:
|
||||
cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-${{ hashFiles('Cargo.lock', 'build.rs', 'git_submodule_status.txt') }}
|
||||
restore-keys:
|
||||
cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-
|
||||
key: cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-{{ matrix.config.v8_enable_pointer_compression }}-${{ hashFiles('Cargo.lock', 'build.rs', 'git_submodule_status.txt') }}
|
||||
restore-keys: cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-{{ matrix.config.v8_enable_pointer_compression }}-
|
||||
|
||||
- name: Install and start sccache
|
||||
shell: pwsh
|
||||
|
@ -207,21 +229,19 @@ jobs:
|
|||
env:
|
||||
SCCACHE_IDLE_TIMEOUT: 0
|
||||
if: matrix.config.variant == 'debug' || matrix.config.variant == 'release'
|
||||
run:
|
||||
${{ matrix.config.cargo }} nextest run -v --cargo-verbose --cargo-verbose --all-targets --locked --target ${{ matrix.config.target }} ${{ env.CARGO_VARIANT_FLAG }}
|
||||
run: ${{ matrix.config.cargo }} nextest run -v --cargo-verbose --cargo-verbose --all-targets --locked --target ${{ matrix.config.target }} ${{ env.CARGO_VARIANT_FLAG }} ${{ env.CARGO_FEATURE_FLAGS }}
|
||||
|
||||
- name: Clippy
|
||||
run:
|
||||
${{ matrix.config.cargo }} clippy --all-targets --locked ${{ env.CARGO_VARIANT_FLAG }} --target ${{ matrix.config.target }} -- -D clippy::all
|
||||
run: ${{ matrix.config.cargo }} clippy --all-targets --locked --target ${{ matrix.config.target }} ${{ env.CARGO_VARIANT_FLAG }} ${{ env.CARGO_FEATURE_FLAGS }} -- -D clippy::all
|
||||
|
||||
- name: Prepare binary publish
|
||||
if: matrix.config.variant == 'debug' || matrix.config.variant == 'release'
|
||||
run: |
|
||||
gzip -9c target/${{ matrix.config.target }}/${{ matrix.config.variant }}/gn_out/obj/${{ env.LIB_NAME }}.${{ env.LIB_EXT }} > target/${{ env.LIB_NAME }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
ls -l target/${{ env.LIB_NAME }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
gzip -9c target/${{ matrix.config.target }}/${{ matrix.config.variant }}/gn_out/obj/${{ env.LIB_NAME }}.${{ env.LIB_EXT }} > target/${{ env.LIB_NAME }}${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
ls -l target/${{ env.LIB_NAME }}${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
|
||||
cp target/${{ matrix.config.target }}/${{ matrix.config.variant}}/gn_out/src_binding.rs target/src_binding_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
ls -l target/src_binding_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
cp target/${{ matrix.config.target }}/${{ matrix.config.variant}}/gn_out/src_binding.rs target/src_binding${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
ls -l target/src_binding${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
|
||||
- name: Binary publish
|
||||
uses: softprops/action-gh-release@v0.1.15
|
||||
|
@ -233,14 +253,14 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
files: |
|
||||
target/${{ env.LIB_NAME }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
target/src_binding_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
target/${{ env.LIB_NAME }}${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}.gz
|
||||
target/src_binding${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
|
||||
- name: Upload CI artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: src_binding_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
path: target/src_binding_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
name: src_binding${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
path: target/src_binding${{ env.FEATURES_SUFFIX }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.rs
|
||||
|
||||
publish:
|
||||
needs: build
|
||||
|
|
|
@ -97,6 +97,7 @@ opt-level = 1
|
|||
[features]
|
||||
default = ["use_custom_libcxx"]
|
||||
use_custom_libcxx = []
|
||||
v8_enable_pointer_compression = []
|
||||
|
||||
[dependencies]
|
||||
bitflags = "2.5"
|
||||
|
|
26
build.rs
26
build.rs
|
@ -195,10 +195,14 @@ fn build_v8(is_asan: bool) {
|
|||
if is_asan {
|
||||
gn_args.push("is_asan=true".to_string());
|
||||
}
|
||||
if env::var("CARGO_FEATURE_USE_CUSTOM_LIBCXX").is_err() {
|
||||
gn_args.push("use_custom_libcxx=false".to_string());
|
||||
}
|
||||
|
||||
gn_args.push(format!(
|
||||
"use_custom_libcxx={}",
|
||||
env::var("CARGO_FEATURE_USE_CUSTOM_LIBCXX").is_ok()
|
||||
));
|
||||
gn_args.push(format!(
|
||||
"v8_enable_pointer_compression={}",
|
||||
env::var("CARGO_FEATURE_V8_ENABLE_POINTER_COMPRESSION").is_ok()
|
||||
));
|
||||
// Fix GN's host_cpu detection when using x86_64 bins on Apple Silicon
|
||||
if cfg!(target_os = "macos") && cfg!(target_arch = "aarch64") {
|
||||
gn_args.push("host_cpu=\"arm64\"".to_string())
|
||||
|
@ -399,6 +403,14 @@ fn prebuilt_profile() -> &'static str {
|
|||
}
|
||||
}
|
||||
|
||||
fn prebuilt_features_suffix() -> String {
|
||||
let mut features = String::new();
|
||||
if env::var("CARGO_FEATURE_V8_ENABLE_POINTER_COMPRESSION").is_ok() {
|
||||
features.push_str("_ptrcomp");
|
||||
}
|
||||
features
|
||||
}
|
||||
|
||||
fn static_lib_name(suffix: &str) -> String {
|
||||
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
|
||||
if target_os == "windows" {
|
||||
|
@ -418,11 +430,12 @@ fn static_lib_url() -> String {
|
|||
let version = env::var("CARGO_PKG_VERSION").unwrap();
|
||||
let target = env::var("TARGET").unwrap();
|
||||
let profile = prebuilt_profile();
|
||||
let features = prebuilt_features_suffix();
|
||||
format!(
|
||||
"{}/v{}/{}.gz",
|
||||
base,
|
||||
version,
|
||||
static_lib_name(&format!("_{}_{}", profile, target)),
|
||||
static_lib_name(&format!("{}_{}_{}", features, profile, target)),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -691,7 +704,8 @@ fn print_prebuilt_src_binding_path() {
|
|||
|
||||
let target = env::var("TARGET").unwrap();
|
||||
let profile = prebuilt_profile();
|
||||
let name = format!("src_binding_{}_{}.rs", profile, target);
|
||||
let features = prebuilt_features_suffix();
|
||||
let name = format!("src_binding{}_{}_{}.rs", features, profile, target);
|
||||
|
||||
let src_binding_path = get_dirs().root.join("gen").join(name.clone());
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue