nerves icon indicating copy to clipboard operation
nerves copied to clipboard

The end-user project is always recompiled when MIX_TARGET is set

Open axelson opened this issue 3 years ago • 5 comments

Environment

  • Elixir version (elixir -v): Elixir 1.9.4 (compiled with Erlang/OTP 22)
  • Nerves environment:
mix nerves.env --info

==> nerves /usr/bin/make -C src all make[1]: Entering directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/src' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/src' if [ -f test/fixtures/port/Makefile ]; then /usr/bin/make -C test/fixtures/port; fi ==> blinky |nerves_bootstrap| Environment Package List

Pkg: nerves_system_br Vsn: 1.11.4 Type: system_platform BuildRunner: {nil, []}

Pkg: nerves_system_rpi3 Vsn: 1.11.2 Type: system BuildRunner: {Nerves.Artifact.BuildRunners.Local, []}

Pkg: nerves_toolchain_arm_unknown_linux_gnueabihf Vsn: 1.3.2 Type: toolchain BuildRunner: {Nerves.Artifact.BuildRunners.Local, []}

Pkg: nerves_toolchain_ctng Vsn: 1.7.2 Type: toolchain_platform BuildRunner: {nil, []}

|nerves_bootstrap| Loadpaths Start

Nerves environment MIX_TARGET: rpi3 MIX_ENV: dev

|nerves_bootstrap| Environment Variable List target: rpi3 toolchain: /home/jason/.local/share/nerves/artifacts/nerves_toolchain_arm_unknown_linux_gnueabihf-linux_x86_64-1.3.2 system: /home/jason/.local/share/nerves/artifacts/nerves_system_rpi3-portable-1.11.2 app: /home/jason/dev/forks/nerves_examples/blinky

|nerves_bootstrap| Loadpaths End

  • Additional information about your host, target hardware or environment that may help

Current behavior

Reproduction repo (includes steps) https://github.com/axelson/nerves_examples/tree/test-regression

Expected behavior

Project is only recompiled once when running mix compile (unless changes are made of course)

axelson avatar Jun 11 '21 15:06 axelson

I have confirmed that this regression was caused by: https://github.com/nerves-project/nerves/commit/40a77d8a9511fa9f14b0c5204ebda3c3ce0d3c76

axelson avatar Jun 11 '21 15:06 axelson

A weird thing is that if I use nerves as a :path dependency ec5ae3f2639ededd229ee159d5ec9aa8e23b5470 then the project still always gets recompiled, but without the make output.

MIX_DEBUG=true mix compile --verbose # with nerves :path dep pointing to good commit (does recompile but no make output)

** Running mix loadconfig (inside Blinky.MixProject) ** Running mix compile --verbose (inside Blinky.MixProject) ** Running mix loadpaths --verbose (inside Blinky.MixProject) ** Running mix archive.check --verbose (inside Blinky.MixProject) ** Running mix nerves.loadpaths (inside Blinky.MixProject) ** Running mix nerves.precompile (inside Blinky.MixProject) ** Running mix deps.precompile (inside Blinky.MixProject) ==> nerves ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ==> nerves_system_br ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ==> nerves_toolchain_ctng ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ==> nerves_system_linter ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ==> nerves_toolchain_arm_unknown_linux_gnueabihf ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ==> nerves_system_rpi3 ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ==> blinky ** Running mix will_recompile (inside Blinky.MixProject) ** Running mix nerves.loadpaths (inside Blinky.MixProject)

Nerves environment MIX_TARGET: rpi3 MIX_ENV: dev

** Running mix nerves.env (inside Blinky.MixProject) ** Running mix deps.loadpaths --verbose (inside Blinky.MixProject) ** Running mix compile.all --verbose (inside Blinky.MixProject) ** Running mix compile.yecc --verbose (inside Blinky.MixProject) ** Running mix compile.leex --verbose (inside Blinky.MixProject) ** Running mix compile.erlang --verbose (inside Blinky.MixProject) ** Running mix compile.elixir --verbose (inside Blinky.MixProject) Compiling 1 file (.ex) Compiled lib/blinky.ex ** Running mix compile.xref --verbose (inside Blinky.MixProject) ** Running mix compile (inside Blinky.MixProject) ** Running mix compile.app --verbose (inside Blinky.MixProject) Generated blinky app ** Running mix compile.protocols --verbose (inside Blinky.MixProject) Consolidated Socket.Datagram.Protocol Consolidated Socket.Stream.Protocol Consolidated List.Chars Consolidated Socket.Protocol Consolidated Collectable Consolidated String.Chars Consolidated Enumerable Consolidated IEx.Info Consolidated Inspect

MIX_DEBUG=true mix compile --verbose # on github dep 40a77d8a9511fa9f14b0c5204ebda3c3ce0d3c76 (does recompile, and shows make output)

** Running mix loadconfig (inside Blinky.MixProject) ** Running mix compile --verbose (inside Blinky.MixProject) ** Running mix loadpaths --verbose (inside Blinky.MixProject) ** Running mix archive.check --verbose (inside Blinky.MixProject) ** Running mix nerves.loadpaths (inside Blinky.MixProject) ** Running mix nerves.precompile (inside Blinky.MixProject) ** Running mix deps.precompile (inside Blinky.MixProject) ==> elixir_make ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside ElixirMake.Mixfile) ==> nerves ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.elixir_make --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) /usr/bin/make -C src all make[1]: Entering directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/src' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/src' if [ -f test/fixtures/port/Makefile ]; then /usr/bin/make -C test/fixtures/port; fi make[1]: Entering directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/test/fixtures/port' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/jason/dev/forks/nerves_examples/blinky/deps/nerves/test/fixtures/port' ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ==> blinky ** Running mix will_recompile (inside Blinky.MixProject) ==> nerves_system_br ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ==> nerves_system_linter ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ==> nerves_toolchain_ctng ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ==> nerves_toolchain_arm_unknown_linux_gnueabihf ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ==> nerves_system_rpi3 ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ==> blinky ** Running mix nerves.loadpaths (inside Blinky.MixProject)

Nerves environment MIX_TARGET: rpi3 MIX_ENV: dev

** Running mix nerves.env (inside Blinky.MixProject) ** Running mix deps.loadpaths --verbose (inside Blinky.MixProject) ** Running mix compile.all --verbose (inside Blinky.MixProject) ** Running mix compile.yecc --verbose (inside Blinky.MixProject) ** Running mix compile.leex --verbose (inside Blinky.MixProject) ** Running mix compile.erlang --verbose (inside Blinky.MixProject) ** Running mix compile.elixir --verbose (inside Blinky.MixProject) Compiling 1 file (.ex) Compiled lib/blinky.ex ** Running mix compile.xref --verbose (inside Blinky.MixProject) ** Running mix compile (inside Blinky.MixProject) ** Running mix compile.app --verbose (inside Blinky.MixProject) Generated blinky app ** Running mix compile.protocols --verbose (inside Blinky.MixProject) Consolidated Socket.Datagram.Protocol Consolidated Socket.Stream.Protocol Consolidated Socket.Protocol Consolidated List.Chars Consolidated Collectable Consolidated String.Chars Consolidated Enumerable Consolidated IEx.Info Consolidated Inspect

MIX_DEBUG=true mix compile --verbose # with github dep on ec5ae3f2639ededd229ee159d5ec9aa8e23b5470 (does not recompile)

** Running mix loadconfig (inside Blinky.MixProject) ** Running mix compile --verbose (inside Blinky.MixProject) ** Running mix loadpaths --verbose (inside Blinky.MixProject) ** Running mix archive.check --verbose (inside Blinky.MixProject) ** Running mix nerves.loadpaths (inside Blinky.MixProject) ** Running mix nerves.precompile (inside Blinky.MixProject) ** Running mix deps.precompile (inside Blinky.MixProject) ==> nerves ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.MixProject) ==> nerves_system_br ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.BR.Mixfile) ==> nerves_toolchain_ctng ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.Toolchain.Ctng.MixProject) ==> nerves_system_linter ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside Nerves.System.Linter.Mixfile) ==> nerves_toolchain_arm_unknown_linux_gnueabihf ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesToolchainArmUnknownLinuxGnueabihf.MixProject) ==> nerves_system_rpi3 ** Running mix compile --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix loadpaths --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.all --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.yecc --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.leex --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.erlang --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.elixir --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.xref --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.app --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ** Running mix compile.nerves_package --no-deps --no-archives-check --no-elixir-version-check --no-warnings-as-errors (inside NervesSystemRpi3.MixProject) ==> blinky ** Running mix nerves.loadpaths (inside Blinky.MixProject)

Nerves environment MIX_TARGET: rpi3 MIX_ENV: dev

** Running mix nerves.env (inside Blinky.MixProject) ** Running mix deps.loadpaths --verbose (inside Blinky.MixProject) ** Running mix compile.all --verbose (inside Blinky.MixProject) ** Running mix compile.yecc --verbose (inside Blinky.MixProject) ** Running mix compile.leex --verbose (inside Blinky.MixProject) ** Running mix compile.erlang --verbose (inside Blinky.MixProject) ** Running mix compile.elixir --verbose (inside Blinky.MixProject) ** Running mix compile.xref --verbose (inside Blinky.MixProject) ** Running mix compile (inside Blinky.MixProject) ** Running mix compile.app --verbose (inside Blinky.MixProject)

axelson avatar Jun 11 '21 16:06 axelson

So it looks like the main issue is that elixir_make always returns {:ok, []} (source link), which is indicating that nerves was "recompiled", which means mix will_recompile is run on the user's application which forces recompilation of all modules.

So it seems that we would need to teach elixir_make how to detect if anything was actually compiled or not. Which in the general case is most likely not determinable. But I believe it might be possible by creating a specification for the makefile, or perhaps nerves could detect that no files are changed and skip running the elixir_make compiler.

axelson avatar Jun 11 '21 17:06 axelson

Okay, the above info is correct, but I was thrown off for a bit because :path dependencies are treated rather differently when it comes to detecting if recompilation is needed.

Here is a Proof of Concept workaround for this issue: https://github.com/axelson/elixir_make/commit/3c618a799885568fd51562cddbd3ee1c043fd640

But since all it does is always return :noop, it is not a solution

But here is a potential working approach :tada:: https://github.com/axelson/elixir_make/commit/fc5b0bf6a520e2eedae2b25143ab530df43ae348

There's some relevant comments and questions inline and I would appreciate any feedback before submitting it as a PR to elixir_make

Here is the commit that uses the patched version of elixir_make that I used to verify that the PoC fix works https://github.com/axelson/nerves_examples/commit/45b1d63cf5c50da3b95a43b637561ecb3b751f23

Here is the commit that uses the potential working fix in blinky: https://github.com/axelson/nerves_examples/commit/b793671c8ee8dc39ee61b047507af481c7c452ae

That's a lot of links! Hopefully I didn't mess up any of them :smiley:

axelson avatar Jun 12 '21 18:06 axelson

Thanks for all of the debug. My only idea so for is to add an option to :elixir_make to specify an output file to check. :elixir_make would check the file before calling make and afterwards. If :make returns success AND the file has the same timestamp before and afterwards, then return :noop.

fhunleth avatar Jun 12 '21 19:06 fhunleth