On Thursday, August 8, 2024 1:13 PM, Josh Steadmon wrote: >On 2024.08.07 19:51, rsbecker@xxxxxxxxxxxxx wrote: >> On Wednesday, August 7, 2024 7:08 PM, Josh Steadmon wrote: >> >On 2024.08.07 17:40, rsbecker@xxxxxxxxxxxxx wrote: >> >> On Wednesday, August 7, 2024 5:21 PM, brian m. carlson wrote: >> >> >On 2024-08-07 at 18:21:28, Josh Steadmon wrote: >> >> >> Introduce cgit-rs, a Rust wrapper crate that allows Rust code to >> >> >> call functions in libgit.a. This initial patch defines build >> >> >> rules and an interface that exposes user agent string getter >> >> >> functions as a proof of concept. A proof-of-concept library >> >> >> consumer is provided in contrib/cgit-rs/src/main.rs. This >> >> >> executable can be run with `cargo run` >> >> >> >> >> >> Symbols in cgit can collide with symbols from other libraries >> >> >> such as libgit2. We avoid this by first exposing library symbols >> >> >> in public_symbol_export.[ch]. These symbols are prepended with "libgit_" >> >> >> to avoid collisions and set to visible using a visibility pragma. >> >> >> In build.rs, Rust builds contrib/cgit-rs/libcgit.a, which also >> >> >> contains libgit.a and other dependent libraries, with >> >> >> -fvisibility=hidden to hide all symbols within those libraries >> >> >> that haven't been exposed with a visibility pragma. >> >> > >> >> >I think this is a good idea. It's optional and it allows us to >> >> >add functionality as we go along. Platforms that don't have Rust >> >> >can just >> omit >> >building it. >> >> > >> >> >> +[dependencies] >> >> >> +libc = "0.2.155" >> >> > >> >> >I don't love that we're using libc here. It would be better to >> >> >use rustix because that provides safe APIs that are compatible >> >> >with POSIX, but I think for now we need this because rustix >> >> >doesn't offer memory management like free(3). I'd really prefer >> >> >that we didn't have to do memory management in Rust, but maybe >> >> >that can come in with a >> >future series. >> >> >> >> This is a good point. Libc is not portable, but because I can't >> >> build with RUST anyway, I hope that libc is restricted to this >> >> facility if used. It should not be included in the git C build. It >> >> is probably moot for me anyway for this series, but I have to >> >> mention it in case >> anyone else >> >gets the idea to include it as a dependency for git C. >> > >> >I know you don't have access to Rust, but would you be able to test >> >the >> symbol >> >visibility steps with `make contrib/cgit-rs/libcgit.a`? >> >> Of course. Branch? URI? > >https://github.com/steadmon/git/tree/cgit-dev I got to: ld -r contrib/cgit-rs/public_symbol_export.o libgit.a reftable/libreftable.a xdiff/lib.a -o contrib/cgit-rs/partial_symbol_export.o /usr/bin/c89: illegal option -- r The -r option is not supported on NonStop. I think we had discussed this.