nerves-project/nerves

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

axelson opened this issue · 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)

I have confirmed that this regression was caused by: 40a77d8

A weird thing is that if I use nerves as a :path dependency ec5ae3f 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 40a77d8 (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 ec5ae3f (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)

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.

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:
axelson/elixir_make@3c618a7

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

But here is a potential working approach 🎉:
axelson/elixir_make@fc5b0bf

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
axelson/nerves_examples@45b1d63

Here is the commit that uses the potential working fix in blinky:
axelson/nerves_examples@b793671

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

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.