Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 72 additions & 22 deletions src/build.sh
Original file line number Diff line number Diff line change
@@ -1,30 +1,80 @@
#!/bin/bash
#!/bin/sh
set -euf

# Lint
if command -v clang-format &> /dev/null
then
clang-format -i main.c
fi
usage() {
cat <<EOF
Usage:
./build.sh [options]

Options:
-b Fast build.
-d Debug build (default).
-n Plan 9 build.
-r Raspberry Pi build.
-h This message.
EOF
}

lint() {
if command -v clang-format &>/dev/null; then
clang-format -i main.c
fi
}

# Cleanup
rm -f ./main
rm -rf ../site
mkdir ../site
cleanup() {
rm -f ./main
rm -rf ../site
mkdir ../site
}

# Linux(debug)
cc -std=c99 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wuninitialized -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined main.c -o main
quickrun() {
./main
rm -f ./main
}

# Linux(fast)
# cc main.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o main
debug_build() {
lint
cleanup
cc -std=c99 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wuninitialized -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined main.c -o main
quickrun
}

# RPi
# tcc -Wall main.c -o main
fast_build() {
lint
cleanup
cc main.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o main
quickrun
run
}

# Plan9
# pcc main.c -o main
nine_build() {
cleanup
pcc main.c -o main
quickrun
run
}

# Run
./main
rpi_build() {
lint
cleanup
tcc -Wall main.c -o main
quickrun
run
}

# Cleanup
rm -f ./main
shift $((OPTIND - 1))

while getopts :bdnrh opts; do
case "${opts}" in
b) fast_build ;;
d) debug_build ;;
n) nine_build ;;
r) rpi_build ;;
h) usage ;;
\?) usage ;;
esac
done

if [ -z "${1:-}" ]; then
debug_build
fi