mirror of https://github.com/natnat-mc/moonbuild
parent
c8670ab903
commit
b2f0de7b38
@ -0,0 +1,7 @@ |
||||
tasks: |
||||
build: => |
||||
sh "moon bin/moonbuild.moon -jy" |
||||
release: => |
||||
error "no version provided" unless @v |
||||
tasks.build! |
||||
sh "rockbuild -m -t #{@v} upload" |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,24 @@ |
||||
package: moonbuild |
||||
source: |
||||
url: git://github.com/natnat-mc/moonbuild |
||||
description: |
||||
summary: Small build system in between make and a build.sh |
||||
detailed: > |
||||
moonbuild is a small build system that simplifies your |
||||
build definitions by allowing you to use declarative as |
||||
well as imperative rules. |
||||
It represents the build as a DAG with explicit ordering, |
||||
and doesn't give you any default confusing rules (unlike |
||||
make). |
||||
If you can, installing luaposix and/or luafilesystem |
||||
will speed up builds and increase stability. |
||||
homepage: https://github.com/natnat-mc/moonbuild |
||||
dependencies: |
||||
- lua >= 5.1 |
||||
- argparse >= 0.7.1-1 |
||||
- moonscript >= 0.5.0-1 |
||||
build: |
||||
type: builtin |
||||
install: |
||||
bin: |
||||
moonbuild: out/moonbuild |
@ -0,0 +1,24 @@ |
||||
build = { |
||||
install = { |
||||
bin = { |
||||
moonbuild = "out/moonbuild" |
||||
} |
||||
}, |
||||
type = "builtin" |
||||
} |
||||
dependencies = { |
||||
"lua >= 5.1", |
||||
"argparse >= 0.7.1-1", |
||||
"moonscript >= 0.5.0-1" |
||||
} |
||||
description = { |
||||
detailed = "moonbuild is a small build system that simplifies your build definitions by allowing you to use declarative as well as imperative rules. It represents the build as a DAG with explicit ordering, and doesn't give you any default confusing rules (unlike make). If you can, installing luaposix and/or luafilesystem will speed up builds and increase stability.\n", |
||||
summary = "Small build system in between make and a build.sh" |
||||
} |
||||
package = "moonbuild" |
||||
rockspec_format = "3.0" |
||||
source = { |
||||
tag = "v2.0.0", |
||||
url = "git://github.com/natnat-mc/moonbuild" |
||||
} |
||||
version = "2.0.0-1" |
@ -0,0 +1,168 @@ |
||||
-- project name |
||||
var 'NAME', 'raytrace' |
||||
|
||||
-- tools to use |
||||
public var 'CPP', 'g++' |
||||
public var 'LD', 'g++' |
||||
public var 'MOC', 'moc' |
||||
|
||||
-- compile flags |
||||
var 'CFLAGS', {'-fPIC', '-fopenmp', '-Wall', '-Wextra', '-Isrc', '--std=c++1', '-O3'} |
||||
var 'LDFLAGS', {'-fPIC', '-fopenmp'} |
||||
var 'PKGS', {'Qt5Widgets'} |
||||
|
||||
-- extra cli flags |
||||
public var 'XCFLAGS' |
||||
public var 'XLDFLAGS' |
||||
public var 'XPKGS' |
||||
public var 'XLIBS' |
||||
|
||||
-- find all files for project |
||||
var 'SOURCES', _.wildcard 'src/**.cpp' |
||||
var 'HEADERS', _.wildcard 'src/**.h' |
||||
var 'QT_HEADERS', _.wildcard 'src/**.hh' |
||||
|
||||
-- complete our flags |
||||
var 'PKGS', {PKGS, XPKGS} |
||||
var 'CFLAGS', {CFLAGS, XCFLAGS, _.pkgconfig.cflags PKGS} |
||||
var 'LDFLAGS', {LDFLAGS, LDCFLAGS} |
||||
var 'LIBS', {XLIBS, _.pkgconfig.libs PKGS} |
||||
|
||||
-- determine our subtargets |
||||
var 'BINARY', "out/#{NAME}" |
||||
var 'OBJECTS', _.patsubst SOURCES, 'src/%.cpp', 'build/%.o' |
||||
var 'MOC_SOURCES', _.patsubst QT_HEADERS, 'src/%.hh', 'build/%.moc.cpp' |
||||
var 'MOC_OBJECTS', _.patsubst MOC_SOURCES, '%.cpp', '%.o' |
||||
var 'OBJECTS', {OBJECTS, MOC_OBJECTS} |
||||
|
||||
|
||||
-- build everything |
||||
with public default target 'all' |
||||
\depends BINARY |
||||
|
||||
-- clean build objects |
||||
with public target 'clean' |
||||
\fn => _.cmd 'rm', '-f', ALL_OBJECTS, MOC_SOURCES |
||||
|
||||
-- clean everything |
||||
with public target 'mrproper' |
||||
\after 'clean' |
||||
\fn => _.cmd 'rm', '-f', BINARY |
||||
|
||||
-- build and run |
||||
with public target 'run' |
||||
\depends BINARY |
||||
\fn => _.cmd "./#{BINARY}" |
||||
|
||||
-- produce the binary from all objects |
||||
with target BINARY |
||||
\produces BINARY |
||||
\depends OBJECTS |
||||
\fn => _.cmd LD, LDFLAGS, '-o', @outfile, @infiles, LIBS |
||||
\mkdirs! |
||||
|
||||
-- produce the objects from the sources |
||||
with target OBJECTS, pattern: 'build/%.o' |
||||
\produces 'build/%.o' |
||||
\depends 'src/%.cpp' |
||||
\depends => _.cdeps[CPP] @infile, CFLAGS |
||||
\fn => _.cmd CPP, CFLAGS, '-o', @outfile, '-c', @infile |
||||
\mkdirs! |
||||
|
||||
-- produce the objects from the moc-generated sources |
||||
with target MOC_OBJECTS, pattern: 'build/%.moc.o' |
||||
\produces 'build/%.moc.o' |
||||
\depends 'build/%.moc.cpp' |
||||
\fn => _.cmd CPP, CFLAGS, '-o', @outfile, '-c', @infile |
||||
|
||||
-- generate moc sources from the qt headers |
||||
with target MOC_SOURCES, pattern: 'build/%.moc.cpp' |
||||
\produces 'build/%.moc.cpp' |
||||
\depends 'src/%.hh' |
||||
\fn => _.cmd MOC, '-o', @outfile, @infile |
||||
\mkdirs! |
||||
|
||||
[[ |
||||
var: string, Serializable -> Variable |
||||
creates a variable in the global shared state |
||||
|
||||
public: Variable -> Variable |
||||
makes a variable overwritable with a CLI flag or through environment variables |
||||
|
||||
target: string|array, TargetOptions? -> Target |
||||
creates a target matching the given name or names, with the given options |
||||
|
||||
public: Target -> Target |
||||
makes a target listable on the CLI |
||||
|
||||
default: Target -> Target |
||||
makes a target run automatically if no target is specified |
||||
|
||||
init: (nil -> nil) -> nil |
||||
adds a function to run in the init environment after the CLI options are processed |
||||
|
||||
typedef Serializable |
||||
| string |
||||
| boolean |
||||
| number |
||||
| nil |
||||
| array<Serializable> |
||||
| map<string|boolean|number, Serializable> |
||||
a value that can be flattened and passed to another environment |
||||
|
||||
typedef List |
||||
| nil |
||||
| string |
||||
| array<List> |
||||
a list of strings that can get flattened to array<string> unambiguously |
||||
|
||||
typedef TargetOptions: table |
||||
- pattern: string? [@name or '%'] |
||||
a pattern that is matched when trying the target, it is also used to fill in '%' in the target |
||||
- priority: int? [0] |
||||
higher values make moonbuild try the target before lower-priority targets |
||||
|
||||
class Target |
||||
- produces: List -> Target |
||||
adds objects to the list of productions |
||||
- depends: List -> Target |
||||
adds objects to the list of dependencies |
||||
- depends: (TargetContext -> List) -> Target |
||||
adds objects to the list of dependencies when the target is first tried |
||||
- after: List -> Target |
||||
adds targets to the ordering list |
||||
- fn: (TargetContext -> nil) -> Target |
||||
adds a function to run to build the target |
||||
- sync: nil -> Target |
||||
forces the target to run synchronously and sequentially |
||||
- mkdirs: nil -> Target |
||||
always ensures the parent directories of the productions exist, creating them if they don't |
||||
|
||||
class TargetContext |
||||
- name: string |
||||
the name the target is running as |
||||
- infiles: List |
||||
the list of input files |
||||
- infile: string? |
||||
the first input file |
||||
- outfiles: List |
||||
the list of output files |
||||
- outfile: string? |
||||
the first output file |
||||
|
||||
environment Global |
||||
- _ library |
||||
- VARIABLES |
||||
- standard Lua library |
||||
|
||||
environment Top: Global |
||||
- target |
||||
- var |
||||
- init |
||||
- public |
||||
- default |
||||
|
||||
environment Init: Global |
||||
- target |
||||
- var |
||||
]] |
Loading…
Reference in new issue