OSv 0.19 is out, with a rewrite of the build system. The old OSv build system was fairly complex, but the rewrite makes it simpler and faster.
The old OSv build system had several makefiles including each other, playing tricks with the current directory and
VPATH, dynamically rewriting makefiles, and running submakes.
Makefile was responsible not only for building the kernel, it also built tests, called various Python scripts to build modules for different applications, and carried out other tasks.
In the new build system, there is just one “Makefile” for building the entire OSv kernel. Everything is in one file, and also better commented.
Separate kernel building from application building
In the old build system, we used “make” to do everything from building the OSv kernel, building various applications, and building images containing OSv and a collection of applications. This complicated the
Makefile, and resulted in unexpected build requirements. For example, building OSv always built some Java tests and thus required Maven and a working Internet connection).
In the new system,
make only builds the OSv kernel, and
build applications and images. In the future, you could use Capstan instead of
scripts/build to make an image that you would like to manage with Capstan.
make command lines that worked in the previous build system will
continue to work unchanged with
scripts/build. For example:
# build image with default OSv application scripts/build # build the rogue image scripts/build image=rogue # or scripts/build modules=rogue # clean kernel and all modules scripts/build clean # make parameters can also be given to build scripts/build mode=debug # build image with tests, and run them scripts/build check
Additional benefits of this rewrite include:
Faster rebuilds. For example “touch loader.cc; scripts/build image=rogue” takes just 6 seconds (14 seconds previously). make after “make clean” (with ccache) is just 10 seconds (30 seconds previously).
It should be fairly easy to add additional build scripts which will build different types of images using the same OSv kernel. One popularly requested option is to have the ability to create a bootfs-only image, without ZFS.
Some smaller improvements, like more accurate setting of the desired image size (covered in issue #595), and supporting setting CROSS_PREFIX without also needing to specify ARCH.
What happened to
The OSv test are a module like other modules – they won’t be compiled unless someone builds the
tests module. They will have a separate Makefile in
mvn tools, both currently used in our makefile just for building tests, will no longer be run every time the kernel is compiled, but just when the “tests” module is being built. To build and run the tests:
Try it out
The good news is that now, running
make is faster, and the image build process is simpler and easier to extend. Check it out — questions and comments welcome on the osv-dev mailing list.