From: "Mikkel Fahnøe Jørgensen" <mikkel@dvide.com>
To: caml-list@yquem.inria.fr
Subject: [ANN] ocamlbuild-ctools and symbiosis meta build engine
Date: Sat, 27 Sep 2008 01:57:08 +0200 [thread overview]
Message-ID: <caee5ad80809261657o14fe541ax8d129e0836e3cb8c@mail.gmail.com> (raw)
I just dusted off some code used for internal builds and made it public.
---- cppinclude ----
http://git.dvide.com/pub/cppinclude/
A very simple but fast dependency scanner needed by ocamlbuild-ctools.
Just compile the cppinclude.c file to cppi binary and put it in the
executable path.
---- ocamlbuild-ctools ----
http://git.dvide.com/pub/ocamlbuild-ctools
http://git.dvide.com/pub/ocamlbuild-ctools/tree/README
An ocamlbuild plugin that supports compiling C and C++ cross platform
using ocamlbuild only.
Variant builds - can build many different variants from the same
source tree. For example static libraries, test builds, debug,
optimization, linking or not linking with some other code, different
platform builds etc.
Automic recursive header file generation - needed for pulling source
into _build directory.
It used to be able to rebuild on header file change, but it has
regressed - it is possible that .stamp files do not hold signatures of
dependencies of dependencies or something.
It has not been tested on Windows, but build rules have been copied
from old build scripts so it should not be that hard to get going.
---- Symbiosis ----
http://git.dvide.com/pub/symbiosis
http://git.dvide.com/pub/symbiosis/tree/README
This is a meta build system.
It is implemented as an ocamlbuild plugin.
It checks out source code from repositories and starts builds of
individual components.
Because ocamlbuild doesn't support linking additional files, a lot of
different code is collected in a single file. This includes a JSON
parser for configuration files.
Symbiosis tries to avoid the problem of collecting all source
dependencies in one large tree, or alternatively installing
dependencies on the system. The former makes it difficult to change
dependent component versions. The latter makes it difficult to quickly
test different build version complicates developer setup.
Correctly configured, just call ocamlbuild with a target for the top
most component to build. All the source should be appear in the
working directory and build.
Initially it can be complex to set up, but once done, it is rather
easy to add new components with interesting dependencies.
The README explains it, but it really lacks examples since it was
extracted from my own build infrastructure.
Each component is viewed as a source tree with actions that can depend
on other actions in other components. Typically checkout and build
actions.
Actions are implemented through agents - for example to execute make,
ocamlbuild or check out source code.
Actions receive parameters and return result arguments. This makes it
possible to find tool locations, libraries etc.
Future:
Currently agents need to be added to the ocamlbuild plugin. This is
easy - for example adding a new scm agent. But it would be nice to add
agents as external scripts. Symbiosis is designed to support this, but
it has not been implemented.
I have looked into integration with continuos build systems, but it
appears to be easier to integrate this into symbiosis also, since it
already does some of the work such a build system requires - but is
definitely is also missing some parts.
Mikkel
next reply other threads:[~2008-09-26 23:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-26 23:57 Mikkel Fahnøe Jørgensen [this message]
2008-09-28 16:39 ` Mikkel Fahnøe Jørgensen
2008-09-28 17:33 ` [Caml-list] " David Teller
2008-10-23 19:59 ` Mikkel Fahnøe Jørgensen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=caee5ad80809261657o14fe541ax8d129e0836e3cb8c@mail.gmail.com \
--to=mikkel@dvide.com \
--cc=caml-list@yquem.inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox