Resolving Hex dependencies... Resolution completed in 0.072s Unchanged: axon 0.7.0 bumblebee 0.6.3 castore 1.0.18 cc_precompiler 0.1.11 circular_buffer 1.0.0 complex 0.6.0 decimal 2.3.0 elixir_make 0.9.0 hnswlib 0.1.7 interactive_cmd 0.1.4 jason 1.4.4 nerves 1.14.1 nerves_discovery 0.1.2 nerves_logging 0.2.4 nerves_runtime 0.13.12 nerves_system_bbb 2.29.3 nerves_system_br 1.33.5 nerves_system_grisp2 0.17.3 nerves_system_mangopi_mq_pro 0.15.3 nerves_system_osd32mp1 0.24.3 nerves_system_qemu_aarch64 0.3.3 nerves_system_rpi 2.0.2 nerves_system_rpi0 2.0.2 nerves_system_rpi0_2 2.0.2 nerves_system_rpi2 2.0.2 nerves_system_rpi3 2.0.2 nerves_system_rpi4 2.0.2 nerves_system_rpi5 2.0.2 nerves_system_x86_64 1.33.3 nerves_toolchain_aarch64_nerves_linux_gnu 13.2.0 nerves_toolchain_armv6_nerves_linux_gnueabihf 13.2.0 nerves_toolchain_armv7_nerves_linux_gnueabihf 13.2.0 nerves_toolchain_ctng 1.10.0 nerves_toolchain_riscv64_nerves_linux_gnu 13.2.0 nerves_toolchain_x86_64_nerves_linux_musl 13.2.0 nerves_uevent 0.1.5 nimble_options 1.1.1 nx 0.10.0 nx_image 0.1.2 nx_signal 0.2.0 polaris 0.1.0 progress_bar 3.0.0 property_table 0.3.3 ring_logger 0.11.5 rustler_precompiled 0.9.0 safetensors 0.1.3 scholar 0.4.1 shoehorn 0.9.3 stephen 1.0.0 tablet 0.3.2 telemetry 1.4.1 text_chunker 0.6.1 tokenizers 0.5.1 toolshed 0.4.2 uboot_env 1.0.2 unpickler 0.1.0 unzip 0.12.0 All dependencies have been fetched ==> tablet Compiling 2 files (.ex) Generated tablet app ==> elixir_make Compiling 8 files (.ex) Generated elixir_make app ==> nerves_discovery Compiling 5 files (.ex) Generated nerves_discovery app ==> decimal Compiling 4 files (.ex) Generated decimal app ==> jason Compiling 10 files (.ex) Generated jason app ==> interactive_cmd Compiling 1 file (.ex) Generated interactive_cmd app ==> nerves HOST_CC port.o HOST_LD port Compiling 50 files (.ex) Generated nerves app ==> nerves_compatibility_test Nerves environment MIX_TARGET: mangopi_mq_pro MIX_ENV: prod Checking for prebuilt Nerves artifacts... Found nerves_system_mangopi_mq_pro in cache /home/nerves/.nerves/artifacts/nerves_system_mangopi_mq_pro-portable-0.15.3 Found nerves_toolchain_riscv64_nerves_linux_gnu in cache /home/nerves/.nerves/artifacts/nerves_toolchain_riscv64_nerves_linux_gnu-linux_aarch64-13.2.0 ==> nerves ==> nerves_toolchain_ctng Compiling 1 file (.ex) Generated nerves_toolchain_ctng app ==> nerves_toolchain_riscv64_nerves_linux_gnu Generated nerves_toolchain_riscv64_nerves_linux_gnu app ==> nerves_system_br Generated nerves_system_br app ==> nerves_system_mangopi_mq_pro Generated nerves_system_mangopi_mq_pro app ==> nerves_compatibility_test Nerves environment MIX_TARGET: mangopi_mq_pro MIX_ENV: prod ==> circular_buffer Compiling 1 file (.ex) Generated circular_buffer app ==> nimble_options Compiling 3 files (.ex) Generated nimble_options app ==> unpickler Compiling 3 files (.ex) Generated unpickler app ==> complex Compiling 2 files (.ex) Generated complex app ==> nerves_logging CC kmsg_tailer.o LD kmsg_tailer Compiling 5 files (.ex) Generated nerves_logging app ==> castore Compiling 1 file (.ex) Generated castore app ==> unzip Compiling 6 files (.ex) warning: a struct for Unzip.FileBuffer is expected on struct update: %Unzip.FileBuffer{ buffer | buffer: <>, buffer_position: new_buffer_pos } but got type: dynamic() where "buffer" was given the type: # type: dynamic() # from: lib/unzip/file_buffer.ex:59:18 buffer when defining the variable "buffer", you must also pattern match on "%Unzip.FileBuffer{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 70 │ buffer = %FileBuffer{ │ ~ │ └─ lib/unzip/file_buffer.ex:70:18: Unzip.FileBuffer.next_chunk/2 warning: a struct for Unzip.FileBuffer is expected on struct update: %Unzip.FileBuffer{ buffer | buffer: binary_part(buffer.buffer, 0, byte_size(buffer.buffer) - count) } but got type: dynamic() where "buffer" was given the type: # type: dynamic() # from: lib/unzip/file_buffer.ex:87:24 buffer when defining the variable "buffer", you must also pattern match on "%Unzip.FileBuffer{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 89 │ %FileBuffer{ │ ~ │ └─ lib/unzip/file_buffer.ex:89:6: Unzip.FileBuffer.move_backward_by/2 warning: a struct for Unzip.FileBuffer is expected on struct update: %Unzip.FileBuffer{ buffer | buffer: binary_part(buffer.buffer, count, byte_size(buffer.buffer) - count), buffer_position: min(buffer.buffer_position + count, buffer.limit) } but got type: dynamic() where "buffer" was given the type: # type: dynamic() # from: lib/unzip/file_buffer.ex:98:23 buffer when defining the variable "buffer", you must also pattern match on "%Unzip.FileBuffer{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 100 │ %FileBuffer{ │ ~ │ └─ lib/unzip/file_buffer.ex:100:6: Unzip.FileBuffer.move_forward_by/2 Generated unzip app ==> ring_logger Compiling 7 files (.ex) Generated ring_logger app ==> progress_bar Compiling 10 files (.ex) Generated progress_bar app ==> shoehorn Compiling 8 files (.ex) Generated shoehorn app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling telemetry ==> nx Compiling 38 files (.ex) warning: ~~~ is deprecated. Use Bitwise.bnot/1 instead for clarity │ 655 │ def ~~~tensor when is_number(tensor), do: Bitwise.~~~(tensor) │ ~ │ └─ lib/nx/defn/kernel.ex:655:7 warning: ~~~ is deprecated. Use Bitwise.bnot/1 instead for clarity │ 656 │ def ~~~tensor, do: Nx.bitwise_not(tensor) │ ~ │ └─ lib/nx/defn/kernel.ex:656:7 Generated nx app ==> nx_image Compiling 1 file (.ex) Generated nx_image app ==> safetensors Compiling 3 files (.ex) Generated safetensors app ==> polaris Compiling 5 files (.ex) Generated polaris app ==> axon Compiling 27 files (.ex) warning: incompatible types given to Kernel.apply/2: apply(Axon.Initializers, []) given types: -Axon.Initializers-, empty_list() but expected one of: fun(), list(term()) typing violation found at: │ 135 │ apply(Axon.Initializers, []) │ ~ │ └─ lib/axon/quantization.ex:135:17: Axon.Quantization.weight_only_quantized_dense/3 warning: a struct for Axon.Loop.State is expected on struct update: %Axon.Loop.State{ state | epoch: epoch + 1, metrics: zero_metrics, iteration: 0, max_iteration: state.max_iteration } but got type: dynamic() where "state" was given the type: # type: dynamic() # from: lib/axon/loop.ex {:continue, state} when defining the variable "state", you must also pattern match on "%Axon.Loop.State{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 1695 │ ... %State{ │ ~ │ └─ lib/axon/loop.ex:1695:29: Axon.Loop.run/4 warning: a struct for Axon.Loop.State is expected on struct update: %Axon.Loop.State{state | epoch: epoch + 1, iteration: 0} but got type: dynamic(%{..., epoch: term(), metrics: term()}) where "state" was given the type: # type: dynamic(%{..., epoch: term(), metrics: term()}) # from: lib/axon/loop.ex {:halt_epoch, %{epoch: epoch, metrics: metrics} = state} when defining the variable "state", you must also pattern match on "%Axon.Loop.State{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 1927 │ {:cont, {batch_fn, final_metrics_map, %State{state | epoch: epoch + 1, iteration: 0}}} │ ~ │ └─ lib/axon/loop.ex:1927:47: Axon.Loop.halt_epoch/5 warning: Tuple.append/2 is deprecated. Use insert_at instead │ 49 │ Nx.reshape(scales, Tuple.append(ones, :auto)) │ ~ │ └─ lib/axon/quantization/layers.ex:49:30: Axon.Quantization.Layers.reshape_scales/2 └─ lib/axon/quantization/layers.ex:54:23: Axon.Quantization.Layers.reshape_output/2 warning: got "@impl true" for function __stream__/7 but no behaviour specifies such callback. The known callbacks are: * Nx.Defn.Compiler.__compile__/4 (function) * Nx.Defn.Compiler.__jit__/5 (function) * Nx.Defn.Compiler.__partitions_options__/1 (function) * Nx.Defn.Compiler.__to_backend__/1 (function) │ 18 │ def __stream__(_, _, _, _, _, _, _), do: raise("not implemented") │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ │ └─ lib/axon/defn.ex:18: Axon.Defn (module) Generated axon app ==> scholar Compiling 68 files (.ex) Generated scholar app ==> rustler_precompiled Compiling 4 files (.ex) Generated rustler_precompiled app ==> tokenizers Compiling 18 files (.ex) 15:08:06.725 [debug] Downloading NIF from https://github.com/elixir-nx/tokenizers/releases/download/v0.5.1/libex_tokenizers-v0.5.1-nif-2.15-riscv64gc-unknown-linux-gnu.so.tar.gz 15:08:08.145 [debug] NIF cached at /home/nerves/.cache/rustler_precompiled/precompiled_nifs/libex_tokenizers-v0.5.1-nif-2.15-riscv64gc-unknown-linux-gnu.so.tar.gz and extracted to /work/proj/_build/mangopi_mq_pro/lib/tokenizers/priv/native/libex_tokenizers-v0.5.1-nif-2.15-riscv64gc-unknown-linux-gnu.so.tar.gz Generated tokenizers app ==> text_chunker Compiling 5 files (.ex) Generated text_chunker app ==> nx_signal Compiling 5 files (.ex) warning: Tuple.append/2 is deprecated. Use insert_at instead │ 739 │ |> Tuple.append(out_len) │ ~ │ └─ lib/nx_signal.ex:739:14: NxSignal.overlap_and_add_output_shape/2 Generated nx_signal app ==> bumblebee Compiling 95 files (.ex) Generated bumblebee app ==> uboot_env Compiling 5 files (.ex) Generated uboot_env app ==> cc_precompiler Compiling 3 files (.ex) Generated cc_precompiler app ==> hnswlib Downloading precompiled NIF to /home/nerves/.cache/elixir_make/hnswlib-nif-2.17-riscv64-linux-gnu-0.1.7.tar.gz Compiling 4 files (.ex) Generated hnswlib app ==> stephen Compiling 10 files (.ex) Generated stephen app ==> property_table Compiling 8 files (.ex) Generated property_table app ==> nerves_uevent CC uevent.o LD uevent Compiling 5 files (.ex) Generated nerves_uevent app ==> nerves_runtime Compiling 14 files (.ex) Generated nerves_runtime app ==> toolshed Compiling 5 files (.ex) Generated toolshed app ==> nerves_compatibility_test Compiling 2 files (.ex) Generated nerves_compatibility_test app |nerves| Building OTP Release... * [Nerves] validating vm.args * skipping runtime configuration (config/runtime.exs not found) * creating _build/mangopi_mq_pro/rel/nerves_compatibility_test/releases/0.1.0/vm.args Updating base firmware image with Erlang release... /home/nerves/.nerves/artifacts/nerves_toolchain_riscv64_nerves_linux_gnu-linux_aarch64-13.2.0/bin/riscv64-nerves-linux-gnu-strip: /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/stcNXSlL: not enough room for program headers, try linking with -N /home/nerves/.nerves/artifacts/nerves_toolchain_riscv64_nerves_linux_gnu-linux_aarch64-13.2.0/bin/riscv64-nerves-linux-gnu-strip: /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/stcNXSlL[.note.gnu.build-id]: bad value WARNING: Can't remove debug symbols from /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/libex_tokenizers-v0.5.1-nif-2.15-riscv64gc-unknown-linux-gnu.so. This is expected for precompiled Rust. Copying rootfs_overlay: /work/proj/_build/mangopi_mq_pro/nerves/rootfs_overlay Copying rootfs_overlay: /work/proj/rootfs_overlay Building /work/proj/_build/mangopi_mq_pro/nerves/images/nerves_compatibility_test.fw... Firmware UUID: wasp-craft (f1394116-0460-572b-db74-7d0b2ac7ba0c) Firmware built successfully! 🎉 Now you may install it to a MicroSD card using `mix burn` or upload it to a device with `mix upload` or `mix firmware.gen.script`+`./upload.sh`. * Cleaning stephen ==> nerves ==> nerves_compatibility_test Nerves environment MIX_TARGET: mangopi_mq_pro MIX_ENV: prod ==> stephen Compiling 10 files (.ex) Generated stephen app ==> nerves_compatibility_test Generated nerves_compatibility_test app |nerves| Building OTP Release... * [Nerves] validating vm.args * skipping runtime configuration (config/runtime.exs not found) * creating _build/mangopi_mq_pro/rel/nerves_compatibility_test/releases/0.1.0/vm.args Updating base firmware image with Erlang release... /home/nerves/.nerves/artifacts/nerves_toolchain_riscv64_nerves_linux_gnu-linux_aarch64-13.2.0/bin/riscv64-nerves-linux-gnu-strip: /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/stnJtv1O: not enough room for program headers, try linking with -N /home/nerves/.nerves/artifacts/nerves_toolchain_riscv64_nerves_linux_gnu-linux_aarch64-13.2.0/bin/riscv64-nerves-linux-gnu-strip: /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/stnJtv1O[.note.gnu.build-id]: bad value WARNING: Can't remove debug symbols from /work/proj/_build/mangopi_mq_pro/_nerves-tmp/rootfs_overlay/srv/erlang/lib/tokenizers-0.5.1/priv/native/libex_tokenizers-v0.5.1-nif-2.15-riscv64gc-unknown-linux-gnu.so. This is expected for precompiled Rust. Copying rootfs_overlay: /work/proj/_build/mangopi_mq_pro/nerves/rootfs_overlay Copying rootfs_overlay: /work/proj/rootfs_overlay Building /work/proj/_build/mangopi_mq_pro/nerves/images/nerves_compatibility_test.fw... Firmware UUID: average-pen (18b441d2-6d46-574d-b1cc-bee010e869a6) Firmware built successfully! 🎉 Now you may install it to a MicroSD card using `mix burn` or upload it to a device with `mix upload` or `mix firmware.gen.script`+`./upload.sh`.