summaryrefslogtreecommitdiff
path: root/c/build
blob: f452e5a024db6b5bd5863135d91aa3e3cb0db70e (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
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
#!/usr/bin/env sh
set -e
#set -x #trace

CC=gcc
CFLAGS="                                                          \
    -pipe                                                         \
    -Wall -Wextra -Wshadow -Wpedantic -Wformat=2                  \
    -std=c99"


CFASTF="-O2 -flto"
CDBGF="-g3 -Og -D _DEBUG"


# avoid "bin" just in case something goes wrong and we wipe /bin
# #paranoia
LIBDIR="libraries"
SRCDIR="sources"
BUILDDIR="binaries"

main()
{
    case "$1" in
        "")         build_debug ;;
        "debug")    build_debug ;;
        "release")  build_release ;;
        "clean")    clean ;;
        "help")     help ;;
        *)
            echo "Error: Unknown argument '$1'"
            help
            ;;
    esac
}

help()
{
    echo "Build script for Linux OSes"
    echo "Usage: $0 [debug|release|clean|help]"
    echo "       debug   - build debug mode (default)"
    echo "       release - build in release mode, aka optimized"
    echo "       clean   - delete the build artifacts"
    echo "       help    - print this message"
    exit
}

build_unity()
{
    "$CC" -D _UNITY_BUILD $CFLAGS -fwhole-program -I $(realpath "$SRCDIR") \
        -I $(realpath "$LIBDIR") $1 "$SRCDIR"/server.c \
        -o "$BUILDDIR"/server

    "$CC" -D _UNITY_BUILD $CFLAGS -fwhole-program -I $(realpath "$SRCDIR") \
        -I $(realpath "$LIBDIR") $1 "$SRCDIR"/client.c \
        -o "$BUILDDIR"/client
}

build()
{
    mkdir -p "$BUILDDIR"

    build_unity "$1"
}

build_debug()
{
    build "$CDBGF"
}

build_release()
{
    build "$CFASTF"
}

clean()
{
     rm -rf $(realpath ${BUILDDIR:?})
}


main "$@"