#!/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//.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"