ref: c47b6e3c88489ec81f3695c7613b1f5194204906
parent: 9ae1c0c9da4739064ef2da5cb2c95dd430e5b013
author: cancel <cancel@cancel.fm>
date: Sat Jan 4 17:05:49 EST 2020
Update and simplify build tool script
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,15 @@
-all: debug
+all: release
.PHONY: debug
debug:
- @./tool build debug orca
+ @./tool build -d --portmidi orca
.PHONY: release
release:
- @./tool build release orca
+ @./tool build --portmidi orca
+ @echo "Executable program saved as: build/orca" >&2
+ @echo "To run it, simply execute it:" >&2
+ @echo "$$ build/orca" >&2
.PHONY: clean
clean:
--- a/tool
+++ b/tool
@@ -3,38 +3,50 @@
print_usage() {
cat <<EOF
-Usage: tool [options] command [args]
+Usage: tool <command> [options] [arguments]
+Example:
+ tool build --portmidi orca
Commands:
- build <config> <target>
- Compile orca.
- Configs: debug, release
+ build <target>
+ Compiles the livecoding environment or the CLI tool.
Targets: orca, cli
- Output: build/<config>/<target>
+ Output: build/<target>
clean
Removes build/
info
Prints information about the detected build environment.
Options:
- -v Print important commands as they're executed.
- -c <name> Use a specific compiler binary.
- Default: \$CC, or cc
- -d Enable compiler safeguards like -fstack-protector.
- You should probably do this if you plan to give the
- compiled binary to other people.
- --static Build static binary.
- --pie Enable PIE (ASLR).
- Note: --pie and --static cannot be mixed.
- -s Print statistics about compile time and binary size.
- -h or --help Print this message and exit.
+ -c <name> Use a specific compiler binary. Default: \$CC, or cc
+ -d Build with debug features. Output changed to:
+ build/debug/<target>
+ --harden Enable compiler safeguards like -fstack-protector.
+ You should probably do this if you plan to give the
+ compiled binary to other people.
+ --static Build static binary.
+ --pie Enable PIE (ASLR).
+ Note: --pie and --static cannot be mixed.
+ -s Print statistics about compile time and binary size.
+ -v Print important commands as they're executed.
+ -h or --help Print this message and exit.
Optional Features:
- --portmidi Enable hardware MIDI output support with PortMIDI.
- Default: not enabled
- Note: PortMIDI has memory leaks and bugs.
- --nomouse Disables mouse clicks.
- Default: not enabled (mouse enabled).
+ --portmidi Enable or disable hardware MIDI output support with
+ --no-portmidi PortMIDI. Note: PortMIDI has memory leaks and bugs.
+ Default: disabled.
+ --mouse Enable or disable mouse features in the livecoding
+ --no-mouse environment.
+ Default: enabled.
EOF
}
+if [[ -z "${1:-}" ]]; then
+ echo "Error: Command required" >&2
+ print_usage >&2
+ exit 1
+fi
+
+cmd=$1
+shift
+
os=
case $(uname -s | awk '{print tolower($0)}') in
linux*) os=linux;;
@@ -53,16 +65,20 @@
static_enabled=0
portmidi_enabled=0
mouse_disabled=0
+config_mode=release
while getopts c:dhsv-: opt_val; do
case "$opt_val" in
-)
case "$OPTARG" in
+ harden) protections_enabled=1;;
help) print_usage; exit 0;;
static) static_enabled=1;;
pie) pie_enabled=1;;
portmidi) portmidi_enabled=1;;
- nomouse) mouse_disabled=1;;
+ no-portmidi|noportmidi) portmidi_enabled=0;;
+ mouse) mouse_disabled=0;;
+ no-mouse|nomouse) mouse_disabled=1;;
*)
echo "Unknown long option --$OPTARG" >&2
print_usage >&2
@@ -71,7 +87,7 @@
esac
;;
c) cc_exe="$OPTARG";;
- d) protections_enabled=1;;
+ d) config_mode=debug;;
h) print_usage; exit 0;;
s) stats_enabled=1;;
v) verbose=1;;
@@ -202,7 +218,6 @@
build_dir=build
build_target() {
- local build_subdir
local cc_flags=()
local libraries=()
local source_files=()
@@ -228,9 +243,8 @@
if [[ $static_enabled = 1 ]]; then
add cc_flags -static
fi
- case "$1" in
+ case $config_mode in
debug)
- build_subdir=debug
add cc_flags -DDEBUG -ggdb
# cygwin gcc doesn't seem to have this stuff, just elide for now
if [[ $os != cygwin ]]; then
@@ -249,7 +263,6 @@
fi
;;
release)
- build_subdir=release
add cc_flags -DNDEBUG -O2 -g0
if [[ $protections_enabled != 1 ]]; then
add cc_flags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -fno-stack-protector
@@ -262,7 +275,7 @@
add cc_flags -flto -s
fi
;;
- *) fatal "Unknown build config \"$1\"";;
+ *) fatal "Unknown build config \"$config_mode\"";;
esac
case $arch in
@@ -287,7 +300,7 @@
esac
add source_files gbuffer.c field.c bank.c sim.c
- case "$2" in
+ case $1 in
cli)
add source_files cli_main.c
out_exe=cli
@@ -339,7 +352,7 @@
if [[ $portmidi_enabled = 1 ]]; then
add libraries -lportmidi
add cc_flags -DFEAT_PORTMIDI
- if [[ $1 = debug ]]; then
+ if [[ $config_mode = debug ]]; then
echo -e "Warning: The PortMIDI library contains bugs.\\nIt may trigger address sanitizer in debug builds.\\nThese are not bugs in orca." >&2
fi
fi
@@ -347,10 +360,17 @@
add cc_flags -DFEAT_NOMOUSE
fi
;;
+ *)
+ echo -e "Unknown build target '$1'\\nValid targets: orca, cli" >&2
+ exit 1
+ ;;
esac
try_make_dir "$build_dir"
- try_make_dir "$build_dir/$build_subdir"
- local out_path=$build_dir/$build_subdir/$out_exe
+ if [[ $config_mode = debug ]]; then
+ build_dir=$build_dir/debug
+ try_make_dir "$build_dir"
+ fi
+ local out_path=$build_dir/$out_exe
# bash versions quirk: empty arrays might give error on expansion, use +
# trick to avoid expanding second operand
verbose_echo timed_stats "$cc_exe" "${cc_flags[@]}" -o "$out_path" "${source_files[@]}" ${libraries[@]+"${libraries[@]}"}
@@ -379,28 +399,24 @@
shift $((OPTIND - 1))
-if [[ -z "${1:-}" ]]; then
- echo "Error: Command required" >&2
- print_usage >&2
- exit 1
-fi
-
-case "$1" in
+case $cmd in
info)
if [[ "$#" -gt 1 ]]; then
fatal "Too many arguments for 'info'"
fi
- print_info
- exit 0
- ;;
+ print_info; exit 0;;
build)
- if [[ "$#" -lt 3 ]]; then
+ if [[ "$#" -lt 1 ]]; then
fatal "Too few arguments for 'build'"
fi
- if [[ "$#" -gt 3 ]]; then
- fatal "Too many arguments for 'build'"
+ if [[ "$#" -gt 1 ]]; then
+ echo "Too many arguments for 'build'" >&2
+ echo "The syntax has changed. Updated usage examples:" >&2
+ echo "./tool build --portmidi orca (release)" >&2
+ echo "./tool build -d orca (debug)" >&2
+ exit 1
fi
- build_target "$2" "$3"
+ build_target "$1"
;;
clean)
if [[ -d "$build_dir" ]]; then
@@ -407,6 +423,7 @@
verbose_echo rm -rf "$build_dir"
fi
;;
- *) fatal "Unrecognized command $1";;
+ help) print_usage; exit 0;;
+ *) fatal "Unrecognized command $cmd";;
esac