Skip to content

Improved build staging and control #72

Open
@workingjubilee

Description

@workingjubilee

While #27 is no longer on the table, in order to make #70 happen, and to make #26 easy, PL/Rust needs builds that are slightly more finely staged and offer more user input, so the user can easily recover things like the Cargo.toml and Cargo.lock that PL/Rust is going to use. In addition, we would like to run the build under various debug or other settings of their choice. Currently, we hardcode all build settings to run once the crate is provisioned:

command.current_dir(&self.crate_dir);
command.arg("rustc");
command.arg("--release");
command.arg("--target");
command.arg(target_str);
command.env("PGX_PG_CONFIG_PATH", pg_config);
if let Some(target_dir) = target_dir {
command.env("CARGO_TARGET_DIR", &target_dir);
}
command.env(
"RUSTFLAGS",
"-Ctarget-cpu=native -Clink-args=-Wl,-undefined,dynamic_lookup",
);

For correctness purposes, it is important that after crate generation and before the build that PL/Rust guarantees that "nothing happens" from the perspective of actually running the build. However, this is also probably the perfect time for events which examine the crate without actually fully building and running it.

We want to be careful about exposing control over the build options that are input, as compiler options are implicitly "unsafe". Thus, unlimited access to the compiler's command flags may allow instructing the compiler to run the build under parameters that can hypothetically violate any safety properties we have embedded in the PL/Rust design.

  • Add staging for pre-build events: Catch #[no_mangle] #128
  • Support "no-op" validation: Diet of WORMs #143
  • Question: Must this apply to build artifacts as well?
  • Improve UI for manually recovering build deets from inside the PL/Rust builder
  • Add UI for running user-provided introspection during provisioning
  • Add more UI for controlling the build itself
  • Consider UI for incremental introspection during crate building (for builds that may involve complex build.rs steps)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions