-
Notifications
You must be signed in to change notification settings - Fork 0
/
build
executable file
·93 lines (71 loc) · 1.69 KB
/
build
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
TARGET='leaf'
: ${SRCPREFIX:=src}
: ${BINPREFIX:=bin}
: ${OBJPREFIX:=${BINPREFIX}/obj}
: ${CC:=cc}
: ${LD:=$CC}
: ${VERSION:=$(git describe --always --dirty 2> /dev/null)}
: ${OPTFLAG:=-O3}
: ${CFLAGS:=$OPTFLAG -DVERSION=\"${VERSION}\" -D_XOPEN_SOURCE=600 $(pkg-config --cflags xft fontconfig)}
: ${LDFLAGS:=-lm -lrt -lutil -s $(pkg-config --libs x11-xcb xft fontconfig)}
: ${SRC:=$SRCPREFIX/*.c}
build() {
mkdir -p $OBJPREFIX
for cf in $SRC; {
objf="${cf//$SRCPREFIX/$OBJPREFIX}"
objf="${objf%.c}.o"
[[ -f $objf && $(stat -c %y $objf) == $(stat -c %y $cf) ]] && continue || {
change=true
}
compile "$objf" "$cf"
}
[[ -d $OBJPREFIX && $change ]] || {
echo -e "\e[32mINFO\e[0m :: no changes have been made to: $TARGET" >&10
return
}
mkdir -p $BINPREFIX
link "$TARGET" ${OBJPREFIX}/*.o
}
run() {
build
echo -e "\e[32mEX\e[0m :: $TARGET" >&10
$TARGET $@
errcode="$?"
(( errcode > 0 )) &&
echo -e "\e[32mERR\e[0m :: $TARGET exited with: '$errcode'" >&10
}
compile() {
local obj="$1" src="${@:2}"
echo -e "\e[32mCC\e[0m :: $obj" >&10
echo "$CC -o $obj $CFLAGS -c $src" >&11
$CC -o "$obj" $CFLAGS -c "$src"
touch -r "$src" "$obj"
}
link() {
local bin="$1" deps="${@:2}"
echo -e "\e[34mLD\e[0m :: $bin" >&10
echo "$LD -o $bin $deps $LDFLAGS" >&11
$LD -o "$bin" $deps $LDFLAGS
}
clean() {
rm -r $BINPREFIX
echo -e "\e[32mRM\e[0m :: $BINPREFIX"
}
[[ $1 != -* ]] && {
mode="$1"
shift
}
exec 2>/dev/null
exec 10<>/dev/stdout
while [[ $1 ]]; do
case "$1" in
-t|--target) TARGET="$2" && shift ;;
-v|--verbose) exec 2>/dev/stderr ;;
-s|--silent) exec 1>/dev/null ;;
-|--) shift; break ;;
esac
shift
done
TARGET="$BINPREFIX/${TARGET:-bin}"
${mode:-build} $@