diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b08fffdf..fc19f4f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 diff --git a/Cargo.toml b/Cargo.toml index 402b06bb..2f7b6076 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -97,6 +97,7 @@ opt-level = 1 [features] default = ["use_custom_libcxx"] use_custom_libcxx = [] +v8_enable_pointer_compression = [] [dependencies] bitflags = "2.5" diff --git a/build.rs b/build.rs index f9a5a7e0..4c0cc2bb 100644 --- a/build.rs +++ b/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());