aboutsummaryrefslogtreecommitdiff
path: root/docker/scripts/build-app.sh
blob: 5ead272a2ad525cc0cfa717d89b11003f66b4607 (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
50
51
52
53
#!/usr/bin/env bash
# Author:  cirakg & claude ai
# Summary: Compile the watch app for one device: debug, release, unit-test, UI-test or watchdog stress build.
#
# Usage:   build-app.sh debug|release|test|uitest|stress 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. UI-test builds add uitest.jungle (fixed clock,
# fake entries; see source/util/TestMode.mc), stress builds stress.jungle (the
# watchdog stress test, source/util/StressTest.mc). 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|uitest|stress DEVICE}"
device="${2:?usage: build-app.sh debug|release|test|uitest|stress 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) ;;
  uitest) jungles="${jungles};/work/uitest.jungle" ;;
  stress) jungles="${jungles};/work/stress.jungle" ;;
  test)
    jungles="${jungles};/work/test.jungle"
    args+=(-t)
    ;;
  *) die "unknown build mode '${mode}' (use debug, release, test, uitest or stress)" ;;
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"