-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshbuild
executable file
·69 lines (53 loc) · 1.19 KB
/
shbuild
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
#!/bin/sh
SRCDIR="src"
BUILDDIR="build"
TESTDIR="tests"
CC="${CC:-gcc}"
LD="${LD:-ld}"
BUILDFLAGS="$CFLAGS $(tr '\n' ' ' < compile_flags.txt)"
get_files() {
find $1 -type f -exec basename {} \;
}
build_f() {
src=$1 obj=$2 opts=$3
src_time=$(stat -c "%Y" "$src")
obj_time=$(stat -c "%Y" "$obj" 2> /dev/null || echo 0)
[ -f "$obj" ] && [ $obj_time -ge $src_time ] && return 69 || {
cmd="$CC $BUILDFLAGS $opts -o $obj $src"
echo $cmd; $cmd
}
}
build_dir() {
dir=$1 opts=$2 objext=$3
objdir="$BUILDDIR/$dir"
changed=1
mkdir -p $objdir
for src in $(get_files $dir); do
build_f "$dir/$src" "$objdir/${src%.*}$objext" "$opts"
[ $? -ne 69 ] && { [ $? -eq 0 ] && changed=0 || exit $?; }
done
return $changed
}
case $1 in
"clean") rm -r $BUILDDIR ;;
"test")
for t in build/tests/*; do
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build $t
done
;;
"tests")
build_dir $TESTDIR "-Lbuild -lprism" ""
;;
"lib")
build_dir $SRCDIR "-c" ".o"
changed=$?
[ $changed -ne 0 ] && [ -f "$BUILDDIR/main" ] || {
objs=$(get_files $SRCDIR | sed "s|\(.*\)\.[^.]*|$BUILDDIR/$SRCDIR/\1.o|")
cmd="$LD -shared -o $BUILDDIR/libprism.so $objs"
echo $cmd; $cmd
}
;;
*)
$0 lib
$0 tests
esac