OpenPlatformPkg is dead, long live edk2-platforms!

For a few years now, I have been working towards improving the availability of open source platform ports and device drivers for EDK2.

Initially, this began by setting up OpenPlatformPkg. This has been used both for platforms from Linaro members and external parties, and has already led to some amount of reduced code duplication, and moving common functionality to EDK2.

Now, the platforms that were in OpenPlatformPkg have been moved into the master branch of edk2-platforms, and OpenPlatformPkg itself has become a read-only archive.

So ... what changes?

Well, the first and most obvious change is that the repository now lives in the TianoCore area on github:

Like OpenPlatformPkg, this is not part of the main EDK2 repository. Unlike OpenPlatformPkg, there is an official way to work with this repository as part of the TianoCore group of projects. Code contributions to this repository are reviewed on the edk2-devel mailing list.

Secondly, the directory structure changes slightly. I will let you discover the specifics for yourself.

Thirdly, edk2-platforms is being kept license clean and source only. So binary-only content from OpenPlatformPkg was moved to a separate edk2-non-osi repository. We still want to enable platforms that have a number of non-open-source components to be able to share part of their code, but edk2-platforms will contain only free software.

At the same time, we change the build behavior from having OpenPlatformPkg nested under edk2 to building with edk2, edk2-platforms and (if needed) edk2-non-osi located "wherever" and individual packages located using PACKAGES_PATH.

Updates to uefi-tools

As before, I am way too lazy to keep figuring out the build command lines for each platform/toolchain combination, so I added support to uefi-tools for the new structure as well. Rather than breaking the compatibility of with OpenPlaformPkg, or making it more complex by making it support both, I added a new script called (which uses a new default platform configuration file called edk2-platforms.config).

Usage-wise, the most visible change is that the script no longer needs to be executed inside the edk2 directory; any directory it is executed from becomes the WORKSPACE, and build output, including intermediary stages, will be placed underneath it.

Secondly, the addition of new command line parameters to point out the locations of the various repositories involved in a build:

-e <edk2 directory>
-p <edk2-platforms directory>
-n <edk2-non-osi directory>

Release management

Well, the old strategies that could be used with edk2/OpenPlatformPkg to achieve a coherent commit on a single hash (git subrepos or submodules) are no longer much use. In order to make a tagged release over multiple repositories, a tool such as mr or repo will be necessary.

I will have to figure out which I pick for the Linaro Enterprise 17.10 release, but I have several weeks left for that :)