Developer's Guide
=================
Cloning
-------
Please see the [Contributing](#contributing) section, below, for details
on how to fork and clone when contributing to Infix.
```bash
$ mkdir ~/Projects; cd ~/Projects
$ git clone https://github.com/kernelkit/infix.git
$ cd infix/
$ git submodule update --init
```
### Customer Builds
Customer builds add product specific device trees, more OSS packages,
e.g., Frr and podman, and sometimes integrates proprietary software.
What's *important to remember*, however, is that they are all made by
setting up Infix as a GIT submodule, similar to how Infix set up a GIT
submodule for Buildroot.
So, in addition to using the customer's specific defconfig(s), one must
also make sure to update *all submodules*, otherwise you will likely end
up with a broken build.
```bash
$ ...
$ git submodule update --init --recursive
~~~~~~~~~~~
```
Other caveats should be documented in the customer specific trees.
Building
--------
Buildroot is almost stand-alone, it needs a few locally installed tools
to bootstrap itself. For details, see the [excellent manual][manual].
> **Note:** installation for Debian/Ubuntu based systems: sudo apt
> install make libssl-dev
Briefly, to build an Infix image; select the target and then make:
make x86_64_defconfig
make
Online help is available:
make help
To see available defconfigs for supported targets, use:
make list-defconfigs
Testing
-------
Manual testing can be done using Qemu by calling make run,
see also [Infix in Virtual Environments](virtual.md).
The Infix automated test suite is built around Qemu and [Qeneth][2], see:
* [Testing](testing.md)
* [Docker Image](../test/docker/README.md)
Contributing
------------
Infix is built from many parts, when contributing you need to set up
your own fork, create a local branch for your change, push to your fork,
and then use GitHub to create a *Pull Reqeuest*.
For this to work as painlessly as possible:
1. Fork Infix to your own user or organization[^1]
2. Fork all the Infix submodules, e.g., `buildroot` to your own user
or organization as well
3. Clone your fork of Infix to your laptop/workstation
If you use a GitHub organization you get the added benefit of having
local peer reviews of changes before making a pull request to the
upstream Infix repository.
```bash
$ cd ~/Projects
$ git clone https://github.com/YOUR_USER_NAME/infix.git
$ cd infix/
$ git submodule update --init
```
> **Note:** when updating/synchronizing with upstream Infix changes you
> may have to synchronize your forks as well. GitHub have a `Sync fork`
> button in the GUI for your fork for this purpose.
[^1]: Organizations should make sure to lock the `main` (or `master`)
branch of their clones to ensure members do not accidentally merge
changes there. Keeping these branches in sync with upstream Infix
is highly recommended as a baseline and reference. For integration
of local changes another company-specific branch can be used instead.
[1]: https://buildroot.org/downloads/manual/manual.html
[2]: https://github.com/wkz/qeneth