Conversion from ELF now has feature parity with conversion from
assembly, so I am setting it as the default.
---------
Co-authored-by: Leandro Pacheco <contact@leandropacheco.com>
There are many advantages in using standard assemblers and linkers,
like:
- maturity;
- more complete support of assembly language, which in turn allows for
support to more high level languages and compilers;
- link-time optimizations;
- no need to deal with language edge cases (our assembler and linker
deals with a number of rust stuff, but it would need even more to
support `std`).
But it comes with a cost, as we need to lift references to text data
back into labels, (because powdr operates on a higher abstraction
level), and to do that, we need the ELF file to either be a PIE
(Position Independent Executable), or to still have the linkage
relocation tables (option `--emit-relocs` of GNU and LLVM linkers).
---------
Co-authored-by: Leo Alt <leo@ethereum.org>
Co-authored-by: Leo <leo@powdrlabs.com>
As suggested by @lvella .
I'm not too sure about this actually. I agree that compiling Rust ->
powdr-asm should have a separate pipeline somewhere, but before we could
do Rust -> proof in a single command, and with this we can't anymore.
- Do we expose the `prove` command and everything else here as well?
That'd be a lot of duplicated code.
- Do we force the user to first run `powdr-rs compile <rust_proj>` then
`powdr pil/prove ...`? That's potentially worse UX than right now.
- Do we keep all the Rust stuff in the `cli` crate?