# `mix mob.release.otp`
[🔗](https://github.com/genericjam/mob_dev/blob/master/lib/mix/tasks/mob.release.otp.ex#L1)

Drives `MobDev.Release.OTP.build/2` from the CLI. Replaces the
three `scripts/release/xcompile_*.sh` scripts plus the misplaced
`scripts/release/openssl/_build_otp_android_arm64.sh`.

    mix mob.release.otp android_arm64    # one target
    mix mob.release.otp android_arm32
    mix mob.release.otp ios_sim
    mix mob.release.otp ios_device
    mix mob.release.otp all              # all four, sequentially

## What runs

For each target:
  1. `make distclean` (tolerated — first-time builds have nothing)
  2. `./otp_build configure --xcomp-conf=<conf> <ssl-flags>`
  3. `./otp_build boot` (the long step — 5–10 minutes per target)
  4. `rm -rf <release_root>` then install:
     - Android: `./otp_build release -a <release_root>`
     - iOS: `make release RELEASE_ROOT=<release_root>`
  5. Verify per-target sanity (erts-<vsn> dir exists, Android also
     checks `lib/{crypto,public_key,ssl}-*` apps were produced).

## Options

  * `--otp-src PATH` — OTP source checkout. Default: `$OTP_SRC` env
    or `~/code/otp`.
  * `--openssl-prefix PATH` — pre-built OpenSSL install. Required
    for Android targets; ignored for iOS.
  * `--release-root PATH` — install destination. Default per-target.
  * `--ndk-root PATH` — Android NDK root override.

## Errors

All failures format via `MobDev.Release.Errors.format/1` and raise
through `Mix.raise/1`. Common cases:

  * `precondition failed — OTP_SRC missing` — clone erlang/otp
  * `precondition failed — openssl_prefix required` — run
    `mix mob.release.openssl <target>` first
  * `precondition failed — Android NDK not at …` — install NDK
  * `precondition failed — crypto / public_key / ssl apps missing` —
    this is the verify step catching a broken `--with-ssl` wiring;
    see the OTP source's `xcomp/erl-xcomp-<arch>-android.conf`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
