2019-06-26 08:13:59 +00:00
|
|
|
# JW-Build Build System
|
|
|
|
|
|
|
|
|
|
The JW-Build package basically is a bunch of scripts and GNU makefile snippets.
|
|
|
|
|
You can install it to its standard location /opt/jw-build, or put it anywhere
|
|
|
|
|
you want in your file system, typically next to your own projects in the same
|
2019-06-26 09:21:54 +00:00
|
|
|
directory. You then include JW-Build's makefiles from within your own project
|
2019-06-26 08:13:59 +00:00
|
|
|
to organize your build.
|
|
|
|
|
|
2019-06-26 09:21:54 +00:00
|
|
|
JW-Build is small. You can install the package with your distribution's package
|
|
|
|
|
manager, but you can also keep it within your version system, alongside your
|
|
|
|
|
own code. It's also meant to be the lightest possible touch on any given source
|
|
|
|
|
code package, in terms of needed prerequisites, and also in terms of code you
|
|
|
|
|
need to put into those packages. This way, it's easily introduced - but it
|
|
|
|
|
also allows you to easily opt out of JW-Build at any time.
|
|
|
|
|
|
2019-06-26 08:13:59 +00:00
|
|
|
A package using JW-Build only needs three-liners as makefiles. This buys you
|
|
|
|
|
convenience, minimal, clean, humanly digestable code, and a structured way to
|
|
|
|
|
customize builds involving multiple packages - you can override any of
|
2019-06-26 09:21:54 +00:00
|
|
|
JW-Build's default variables centrally for many projects, for an entire
|
|
|
|
|
project, or inside any subdirectory of any project, at your option. It avoids
|
|
|
|
|
makefile generation as done by CMake or GNU Autotools, to keep the running code
|
|
|
|
|
small and readable to facilitate debugging. To achieve this, it has to detect a
|
|
|
|
|
couple of things in every directory, but there's a caching mechanism in place,
|
|
|
|
|
which keeps builds reasonably fast.
|
|
|
|
|
|
|
|
|
|
JW-Build honours some environment variables to control the build. It builds
|
|
|
|
|
libraries and executables, outputs object code from C/C++, Python and Java, and
|
|
|
|
|
is easily extendible to support any given programming language. It provides
|
|
|
|
|
targets to produce Debian, RPM and IPK packages, install them, or feed them
|
|
|
|
|
into a DevOps pipeline, taking note within GIT, SVN or CVS. It supports a
|
|
|
|
|
simple configuration file per project, containing the project's metadata, e.g.
|
|
|
|
|
their dependencies, license, description or the like. It has a SAT-solver built
|
|
|
|
|
in, for building multiple projects in the right order, including packages that
|
|
|
|
|
are not organized with jw-build. It automatically generates BitBake recipes and
|
|
|
|
|
organizes Yocto-builds incorporating your software. It supports cross
|
|
|
|
|
compilation with MinGW and the GNU toolchain. It's tested on Debian, OpenSUSE,
|
|
|
|
|
Fedora / CentOS / RHEL, Mint and many Unices.
|
2019-06-26 08:13:59 +00:00
|
|
|
|
2019-06-26 09:21:54 +00:00
|
|
|
JW-Build is designed to be friendly to both developers and integrators. You can
|
|
|
|
|
cd into any given directory, run make, and expect the resulting code to work
|
|
|
|
|
and be testable. It has built-in support for remote Git repositories and
|
|
|
|
|
collaboration. Of course, it can build and package itself.
|