blob: 3e420f13aca2809b6490b2f72ef166c6cb076beb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/bin/bash
bin="snag"
libs=""
builddir="objs"
PREFIX="/usr"
while [ "$1" ]; do
case "$1" in
-*) exit 1 ;;
esac
shift
done
CFLAGS=${CFLAGS:-""}
CFLAGS_RELEASE="$CFLAGS -O2"
CFLAGS_DEBUG="$CFLAGS -Wall -g -DDEBUG=1"
write() {
echo "$@" >> build.ninja
}
echo "$CFLAGS_DEBUG $(pkg-config --cflags $libs 2>/dev/null)" | tr ' ' '\n' > compile_flags.txt
rm -f build.ninja
write "builddir = $builddir"
write "libs = $(pkg-config --libs $libs 2>/dev/null)"
write 'rule link'
write ' description = LD $out'
write ' command = gcc $libs $in -o $out'
for target in $(echo "debug release"); do
eval write "cflags_$target = \$CFLAGS_${target^^} $(pkg-config --cflags $libs 2>/dev/null)"
write "rule cc-$target"
write ' deps = gcc'
write ' depfile = $out.d'
write ' description = CC $out'
write " command = gcc -MD -MF \$out.d \$cflags_$target -c \$in -o \$out"
files="$(find . -name '*.c')"
sedstr=$(printf 's,^\./\(.*\)\.c$,%s\/%s\/\\1.o,g' ${builddir} ${target})
ofiles=$(echo "$files" | sed ${sedstr})
for f in $files; do
of=$(echo $f | sed ${sedstr})
write "build $of: cc-$target $f"
done
write "build $builddir/$target/$bin: link $(echo $ofiles)"
write "build $target: phony $builddir/$target/$bin"
done
write "default release"
echo "Wrote ./build.ninja file"
|