On Tue, 2022-03-15 at 04:39 +0530, Utkarsh M wrote:
> Hi everyone! My name is Utkarsh Mahajan. I'm a 2nd year ECE student
> from NITK, India.  I am passionate about Computer architecture and
> working on low level stuff. I recently found out about coreboot through
> gsoc. I am very much interested in contributing towards this
> repository.
> 
> Related to coreboot, I have a decent knowledge of c and just started
> playing with x86_64 assembly a month ago. So I recently started off by
> reading a bit of docs available on coreboot's website and tried out
> building an image file for i386 and testing it using QEMU. Which I was
> successfully able to do.

Welcome and awesome!


> Then I started exploring other parts of the docs and later tried
> understanding the code base but had a hard time understanding it so I
> am currently trying to understand specific tools used like kconfig and
> about makefiles from publicly available sources.

If you have any questions, please let us know.


> I'm specifically interested in the project "Provide toolchain
> binaries", But I wasn't able to understand what exactly is to be done
> in the project. As far from the written text, I understood that we need
> to provide package installers for the compiler so that for example
> coreboot could be installed from AUR helpers if an arch aur version was
> made.

Correct. Did you also see this document [1]?


> But then there's written about crossgcc, that we need something to
> replace it for individual architecture like x86_64 if i'm not wrong. If
> anyone could help me clarify about the project and could redirect me
> towards a few resources where I could gain enough knowledge to be able
> to work on coreboot and this project, it would be really helpful.

In order to build coreboot you need to build the toolchain for the
specific target architecture. This is not the architecture of your host
you are building on, but the architecture of the device you want to run
coreboot on. The command "make help" gives you an overview which target
architectures are supported.

The project is about packaging the toolchain for different distros,
like Arch, Debian/Ubuntu, openSUSE. Maybe even some *BSD (OpenBSD,
FreeBSD, ...) systems? :). So you need to get familiar with their
packaging system, how to make the package usable, 

I packaged the coreboot toolchain for NixOS [2][3]. Maybe it helps and
gives an idea of what needs to be done. Though, NixOS works a little
different than other distros.

So to get the coreboot version string and git revision appended to the
usual version string of the tools, I had to extend the buildgcc script
with a new command/parameter allowing to store the coreboot version
string in a file and hook it up in the postFetch phase, because there
the .git folder still exists. The .git folder is deleted at the end of
postFetch phase making the build reproducible.

After the postFetch phase, the internet connection is cut off, so that
no program can download any more things. This is another requirement
for reproducible builds.

So it's needed to prepare the environment first, which is done in the
postPatch phase. This phase hooks up stable.nix [4], which is just a
collection of the sources needed for the stable build of the toolchain.
The postPatch phase creates symlinks from their location to the place
where buildgcc expects the files.

Even it is hooked up after postFetch, the Nix evaluator is aware of
that and it will download all remote available ressources at the
beginning so that they are available later. I use a script [5] to
update the ressources in stable.nix when a new coreboot release is out.

In buildPhase I just read the coreboot version and run the command to
build the toolchain. I use the variable `DEST` so that the result is
moved to the final package folder later.

In my case, "common" is a function taking the argument "arch". So at
the bottom of default.nix, you can see that I iterate over different
target architectures and build the toolchain for them using the common
function. The result are different packages using the scheme coreboot-
toolchain.<architecture>, as you can see in the package search [2].

I hope that helps and that it isn't too confusing :)


// Felix

[1]
https://docs.google.com/document/d/1LU8CTITfqhJU_G_XHwvSkHAQQWed0_FLWPPoBfcplAQ/edit#
[2]
https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=coreboot-toolchain
[3]
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/misc/coreboot-toolchain/default.nix
[4]
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/misc/coreboot-toolchain/stable.nix
[5]
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/tools/misc/coreboot-toolchain/update.sh
_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-le...@coreboot.org

Reply via email to