es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasa las banderas de Rustc a la caja dentro del espacio de trabajo.

Tengo un espacio de trabajo con dos cajas: lib y app, donde quiero usar el código de lib en app.

Además, quiero tener la siguiente configuración de Cargo solo en la caja lib para instrumentarla con SanitizeCoverage de LLVM (proporciono las funciones de devolución de llamada de SanitizeCoverage en la caja app, porque no deben ser instrumentadas, de lo contrario habría un desbordamiento de pila):

[build]
rustflags = [
    &"-Cpasses=sancov-module",
    &"-Cllvm-args=-sanitizer-coverage-level=1",
    &"-Cllvm-args=-sanitizer-coverage-trace-pc-guard",
]

Desafortunadamente, Cargo no utiliza este archivo de configuración si se incluye en lib/.cargo/config.toml.

Intenté pasar la configuración con un archivo build.rs de la caja lib:

pub fn main() {
    println!("cargo:rustc-env=RUSTFLAGS=\"-Cpasses=sancov-module -Cllvm-args=-sanitizer-coverage-level=1 -Cllvm-args=-sanitizer-coverage-trace-pc-guard\"");
}

Pero tampoco funciona (el código no está instrumentado, como verifiqué con el desensamblaje posteriormente).

¿Hay alguna manera de hacer esto? También intenté crear dos cajas diferentes, sin un espacio de trabajo, pero en ese caso también se ignora el archivo de configuración de Cargo de la caja lib.
También intenté crear manualmente un rlib y enlazarlo manualmente, pero aunque esto funciona más o menos, es realmente problemático porque tengo que exportar una interfaz C en ese caso. Además, esto falla si quiero ejecutarlo en el marco de trabajo Fortanix SGX (que es mi objetivo final).

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para utilizar el código del crate “lib”, al mismo tiempo que se aplica la configuración de Cargo solo al crate “lib”, puedes agregar lo siguiente a tu archivo “Cargo.toml” en el crate “app”:

    [dependencies]
    lib = { path = "../lib" }
    
    [build]
    rustflags = [
        "-Cpasses=sancov-module",
        "-Cllvm-args=-sanitizer-coverage-level=1",
        "-Cllvm-args=-sanitizer-coverage-trace-pc-guard",
    ]
    

    Esto te permitirá utilizar el código del crate “lib” en el crate “app”, al mismo tiempo que se aplica la configuración de Cargo solo al crate “lib”.

    Además, puedes eliminar el archivo “build.rs” del crate “lib”, ya que no es necesario.

Comments are closed.