Skip to content

Please default auto-builds to the existing minimal picoquic build path #79

@Uptake8476

Description

@Uptake8476

I tested slipstream-rust on Fedora 43 and found that the current default native auto-build path is overbuilding unnecessary vendored targets.

Environment:

  • Fedora Linux 43
  • GCC 15.2.1
  • CMake 3.31.10
  • Rust 1.93.1
  • OpenSSL 3.5.4

What I tested

  1. Fresh default build:
PICOQUIC_BUILD_DIR=$PWD/.picoquic-build-client-default \
CARGO_TARGET_DIR=$PWD/target-client-default \
cargo build -p slipstream-client -p slipstream-server

This failed after building the required libraries, because the full native build continued into vendored extras and then died in bundled picotls CLI/test code:

.picoquic-build-client-default/_deps/picotls-src/t/cli.c:45
fatal error: openssl/engine.h: No such file or directory
  1. Fresh minimal build:
PICOQUIC_BUILD_DIR=$PWD/.picoquic-build-client-min \
CARGO_TARGET_DIR=$PWD/target-client-min \
cargo build -p slipstream-client -p slipstream-server --features picoquic-minimal-build

This succeeded.

Why this looks like the right downstream default

The repo already contains the pieces for a smaller native build:

  • slipstream-client and slipstream-server expose picoquic-minimal-build
  • scripts/build_picoquic.sh already disables:
    • BUILD_DEMO
    • BUILD_HTTP
    • BUILD_LOGLIB
    • BUILD_LOGREADER
    • picoquic_BUILD_TESTS
  • and builds only picoquic-core

From the Rust side, slipstream-ffi only links the core library set:

  • picoquic-core
  • picotls-core
  • picotls-openssl
  • picotls-minicrypto
  • optional picotls-fusion

So slipstream-rust does not appear to need vendored picotls test/CLI targets, demos, or other extra executables for a normal release build.

I locally patched the build path so minimal mode becomes the default for auto-builds, with PICOQUIC_MINIMAL_BUILD=0 as an explicit opt-out, and after that a fresh plain default build succeeded on Fedora 43 without needing the Cargo feature.

Suggestion

Please consider making the existing minimal native build path the default for auto-builds, or otherwise recommending it as the normal build mode for Linux. The full native build can still remain available behind an explicit opt-out.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions