aboutsummaryrefslogtreecommitdiff
path: root/ninja.m4
diff options
context:
space:
mode:
Diffstat (limited to 'ninja.m4')
-rw-r--r--ninja.m444
1 files changed, 44 insertions, 0 deletions
diff --git a/ninja.m4 b/ninja.m4
new file mode 100644
index 0000000..98824ff
--- /dev/null
+++ b/ninja.m4
@@ -0,0 +1,44 @@
+changequote([,])
+
+cflags = ifdef([PROD], [], [-std=c99 -Wall -Wextra -g -D_DEFAULT_SOURCE])
+bin = bin
+m4flags =
+
+rule cc
+ command = gcc -MD -MF $out.d $cflags -c $in -o $out
+ depfile = $out.d
+rule ar
+ command = ar rcs $out $in
+
+build $bin/msgpack.o: cc msgpack.c
+build $bin/msgpack.a: ar $bin/msgpack.o
+build $bin/msgpack.so: cc msgpack.c
+ cflags = $cflags -fPIC -shared
+
+rule elf
+ command = gcc $cflags $in -o $out
+rule run
+ command = valgrind -s --leak-check=full --show-leak-kinds=all $in
+
+build $bin/test.o: cc test.c
+build $bin/test: elf $bin/msgpack.o $bin/test.o
+
+build static: phony $bin/msgpack.a
+build shared: phony $bin/msgpack.so
+build header: phony # TODO write it
+build test: run $bin/test
+
+ifdef([PROD], [default test], [default header])
+
+rule gen
+ command = m4 $m4flags ninja.m4 > build.ninja
+ generator = 1
+
+build build.ninja: gen | ninja.m4
+
+ifdef([PROD], [dnl
+build dev: gen
+], [dnl
+build prod: gen
+ m4flags = -D [PROD]
+])