aboutsummaryrefslogtreecommitdiff
path: root/snag/configure
blob: bf453732fdea0862710ee6ded80e593abd02dbf5 (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
#!/bin/sh

# temp for testing
mkdir -p ./var/snag/{sources,installs,builds}
[ ! -e ./var/snag/packages ] && ln -s ../../../packages/ ./var/snag/packages

bin="snag"
libs="libcurl libcrypto"
builddir="build"

CFLAGS="$CFLAGS $(pkg-config --cflags $libs)"${CFLAGS:-""}

CFLAGS_RELEASE="$CFLAGS -O2"
CFLAGS_DEBUG="$CFLAGS -Wall -g -DDEBUG=1"

write() { echo "$@" >> build.ninja; }

echo "$CFLAGS_DEBUG" | tr ' ' '\n' > compile_flags.txt
rm -f build.ninja

write "builddir = $builddir"
write "linkflags = $(pkg-config --libs $libs)"

write 'rule link'
write '  description = LD $out'
write '  command = gcc $linkflags $in -o $out'
for target in $(echo "debug release"); do
    eval write "cflags_$target = \$CFLAGS_$(echo $target | tr 'a-z' 'A-Z')"

    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' -not -path "./var/*")"
    sedstr=$(printf 's,^\./src/\(.*\)\.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"