1# coreboot kconfig 2 3This is coreboot's copy of kconfig which tracks Linux as upstream but comes 4with a few patches for portability but also a few semantic changes. 5 6The patches that lead to this tree can be found in the patches/ subdirectory 7in a [quilt](http://savannah.nongnu.org/projects/quilt) friendly format that 8is also simple enough to manage manually with Unix tooling. 9 10## Updating kconfig 11 12The first step is to unapply the patches. This can either be done with quilt 13in an already-configured tree (`quilt pop -a` should cleanly unapply them all) 14or manually if quilt doesn't have its tracking metadata around yet: 15 16```sh 17for i in $( ls patches/*.patch | tac ); do patch -p1 -R -i "$i"; done 18``` 19 20The result should be a subtree that, apart from a few coreboot specific 21files on our side (e.g. documentation, integration in our build system) 22and a few files on the upstream end that we don't carry (e.g. the tests), 23is identical to the scripts/kconfig/ directory of Linux as of the most recent 24uprev we did. Check the uprev version by looking through 25`git log util/kconfig` output in our tree. 26 27Assuming that you want to uprev from Linux 5.13 to 5.14, with a Linux git tree 28available in `~/linux` 29 30```sh 31cd util/kconfig && (cd ~/linux/ && git diff v5.13..v5.14 scripts/kconfig) | patch -p2` 32``` 33 34applies the changes to your local tree. 35 36Then reapply our patch train, which might be as simple as 37`quilt push -a --refresh` but might also require some meddling with the 38patches to make them apply again with the changes you just imported from 39Linux. 40 41Check that kconfig still works, `git add` and `git commit` the changes and 42write a meaningful commit message that documents what Linux kconfig version 43the tree has been upreved to. 44 45## Adding a new patch 46 47The format of the patches to kconfig is a mix of the headers produced by `git 48format-patch` and the patch format of quilt. However neither git nor quilt 49seems to have any functionality to directly produce a file in such a format 50 51To add a patch in this format: 521. Add your changes to the sources and `git commit` them 532. Generate a git patch for the commit: 54 55 $ git format-patch HEAD~ 56 573. Reverse apply the newly created patch file to restore the tree back to the 58 state quilt thinks it is in: 59 60 $ git apply -R <the patch file> 61 624. Import the patch info quilt: 63 64 $ quilt import <the patch file> 65 665. Force push the change to the top of quilt's patch stack (quilt won't like 67 the git diff style and would normally refuse to apply the patch): 68 69 $ quilt push -f <the patch file> 70 716. Add the changed files to be tracked against the quilt: 72 73 $ quilt add <the files you changed> 74 757. Re-apply your changes from the patch file: 76 77 $ git apply <the patch file> 78 798. Add the changes to quilt to regenerate the patch file in a quilt compatible 80 format while keeping the git header: 81 82 $ quilt refresh 83 849. The new patch file and updated patches/series files can now be added to the 85 git commit 86