reggae 0.1.0
A build system in D
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
Reggae
A build system in D. This is alpha software, only tested on Linux and likely to have breaking changes made.
Usage
Reggae is actually a meta build system and works similarly to CMake or Premake. Those systems require writing configuration files in their own proprietary languages. The configuration files for Reggae are written in D.
From a build directory (usually not the same as the source one),
type reggae -b <ninja|make> </path/to/project>
. This will create the actual build system depending
on the backend chosen, for Ninja or
GNU Make.
The project path passed must either:
- Contain a a file named
reggaefile.d
with the build configuration - Be a dub project
Dub projects with no reggaefile.d
will have one generated for them in the build directory.
How to write build configurations
The best examples can be found in the features directory since they're executable.
Each reggaefile.d
must contain one and only one function with a return value of type
Build. This function can be generated automatically with the
build template mixin. The Build
struct is a container for
Target
structs, which themselves may depend on other targets.
Arbritrary build rules can be used. Here is an example of a simple D build reggaefile.d
:
import reggae;
const mainObj = Target("main.o", "dmd -I$project/src -c $in -of$out", Target("src/main.d"));
const mathsObj = Target("maths.o", "dmd -c $in -of$out", Target("src/maths.d"));
const app = Target("myapp", "dmd -of$out $in", [mainObj, mathsObj]);
mixin build!(app);
That was just an example. To build D apps with no external dependencies, this will suffice:
import reggae;
alias app = dExe!(App("src/main.d", "myapp"),
Flags("-g -debug"),
ImportPaths(["/path/to/imports"])
);
mixin build!(app);
There are also other functions and pre-built rules for C and C++ objects.
Dub integration
The easiest dub integration is to run reggae with a directory containing a dub project as
parameter. That will create a build system that would do the same as "dub build" but probably
faster. In all likelihood a user needing reggae will need more than that, and reggae provides
an API to use dub build information in a reggaefile.d
build description file. A simple
example for building production and unittest binaries concurrently is this:
import reggae;
alias main = dubDefaultTarget!("-g -debug");
alias ut = dubConfigurationTarget!(ExeName("ut"), Configuration("unittest"));
mixin build!(main, ut);
Depending on whether or not the dub project in questions uses configurations, reggae's dub support might not work before this pull request is merged.
Building Reggae
Reggae can build itself. To bootstrap, either use dub or the included bootstrap script.
Call it without arguments for make
or with one to choose another backend, such as ninja
. This
will create a reggae
binary in a bin
directory then call itself to generate the "real" build
system with the requested backend.
Goals
- No external dependencies, including on dub
- Minimal boilerplate for writing build configurations
- Flexibility for low-level tasks with built-in common tasks
- 0.1.0 released 9 years ago
- atilaneves/reggae
- github.com/atilaneves/reggae
- BSD 3-clause
- Copyright © 2015, Atila Neves
- Authors:
- Dependencies:
- none
- Versions:
-
0.11.0 2023-Nov-10 0.10.1 2023-Sep-19 0.10.0 2023-Sep-07 0.9.5 2023-Mar-13 0.9.4 2022-Jun-20 - Download Stats:
-
-
1 downloads today
-
30 downloads this week
-
94 downloads this month
-
43607 downloads total
-
- Score:
- 3.8
- Short URL:
- reggae.dub.pm