On Sun, Feb 25, 2024, 01:06 bzt <bztemail@gmail.com> wrote:
Hi,

I've a question. I'm writing a software that installs a specific Linux
distro on the target computer automatically. It also should flash
coreboot as part of the install process, and that's where I'm stuck.

From what I've gathered, for that I would need a stripped down version
of libflashrom that only has the internal SPI driver, nothing else
(without laptop-checks, Paralell, LPC, NICs, external USB programmers
etc.) What is the best way to achieve this?

I've already set up my test environment: I've configured and compiled
qemu with "-enable-m25p80", which emulates lots of flash chips, among
others the one that my target machine has. Then I can run qemu with
"-device m25p80" and start a minimal Linux VM with the flashrom
utility that I've compiled from source.

I've also cleaned up flashrom.c to only list the chips with the
BUS_SPI interface (I need to support one specific chip only, but my
understanding is, all of these use the same driver so it shouldn't be
a problem having all these chips in this list). Now I need to remove
files and functions that are not related to internal SPI, and I'm not
sure how to proceed. Which would be the easiest and suggested way to
have a stripped down libflashrom with just the internal SPI driver?

ps: unfortunately using flashrom as-is is out of question because it
has way too many dependencies that the installer image simply does not
have. For example, there's no libpci, libusb and no /dev/spidev device
either, so I must restrict libflashrom to use its own driver, and also
my installer can't call system(), so I must link it with libflashrom.

You did not mention the actual CPU architecture or mainboard you are running on, so I'd have to guess a bit here. But changes are that you will need at least libpci to configure the spi controller. You can configure a flashrom binary without USB support however. 

You did not mention why system() is not an option. Maybe using execve(2) works for you?

Generally there is no difference in dependencies between libflashrom and flashrom. You can configure either without certain drivers to control dependencies. Check out Makefile or meson_options.txt

Stefan