blob: 74dd042b4b9606fb55429f807509f09e9269cfbe (
plain) (
blame)
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
|
#!/usr/bin/env bash
# Author: cirakg & claude ai
# Summary: Compile the watch app for one device: debug, release or unit-test build.
#
# Usage: build-app.sh debug|release|test DEVICE
# Output: build/<mode>/<DEVICE>.prg, and the compiler log next to it.
#
# Policy (README section 17.7): strict type checking (-l 3), and any compiler
# warning fails the build. Test builds add test.jungle, so test code never
# reaches debug or release builds; release builds (-r) also drop every
# (:debug) declaration, such as the diagnostics in source/util/Diag.mc.
set -euo pipefail
# shellcheck source=ciq-env.sh
source "$(dirname "${BASH_SOURCE[0]}")/ciq-env.sh"
mode="${1:?usage: build-app.sh debug|release|test DEVICE}"
device="${2:?usage: build-app.sh debug|release|test DEVICE}"
ciq_require_sdk
ciq_require_key
ciq_require_device "${device}"
# icons.jungle (generated by tools/make_icon.py --all) gives every device a
# launcher icon of exactly its size.
jungles="/work/monkey.jungle;/work/icons.jungle"
args=(-d "${device}" -y "${DEV_KEY}" -l 3 -w)
case "${mode}" in
debug) ;;
release) args+=(-r) ;;
test)
jungles="${jungles};/work/test.jungle"
args+=(-t)
;;
*) die "unknown build mode '${mode}' (use debug, release or test)" ;;
esac
out_dir="${BUILD_DIR}/${mode}"
mkdir -p "${out_dir}"
compile_log="${out_dir}/${device}.log"
if ! monkeyc -f "${jungles}" -o "${out_dir}/${device}.prg" "${args[@]}" >"${compile_log}" 2>&1; then
cat "${compile_log}" >&2
die "compile failed for ${device} (${mode} build)"
fi
if grep -q "^WARNING" "${compile_log}"; then
grep "^WARNING" "${compile_log}" >&2
die "compiler warnings for ${device} (${mode} build); warnings count as errors"
fi
log "built build/${mode}/${device}.prg"
|