Skip to content

mix firmware fails on Nix due to hardcoded lib paths #136

Description

@d-ferenczi

Environment

  • Elixir version (elixir -v):
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Elixir 1.14.4 (compiled with Erlang/OTP 25)
  • Nerves environment: (mix nerves.env --info)
==> nerves
==> hello_nerves
|nerves_bootstrap| Environment Package List

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

  Pkg:         nerves_system_x86_64
  Vsn:         1.22.2
  Type:        system
  BuildRunner: {Nerves.Artifact.BuildRunners.Docker, [make_args: ["source", "all", "legal-info"]]}

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

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

|nerves_bootstrap| Loadpaths Start

|nerves_bootstrap| Precompile Start

==> nerves_toolchain_x86_64_nerves_linux_musl
|nerves_bootstrap| Compile.NervesPackage start

|nerves_bootstrap| Compile.NervesPackage end

==> nerves_system_x86_64
|nerves_bootstrap| Compile.NervesPackage start

|nerves_bootstrap| Compile.NervesPackage end

==> hello_nerves
|nerves_bootstrap| Precompile End


Nerves environment
  MIX_TARGET:   x86_64
  MIX_ENV:      dev

|nerves_bootstrap| Environment Variable List
  target:     x86_64
  toolchain:  /Users/d/.nerves/artifacts/nerves_toolchain_x86_64_nerves_linux_musl-darwin_x86_64-1.8.0
  system:     /Users/d/.nerves/artifacts/nerves_system_x86_64-portable-1.22.2
  app:        .

|nerves_bootstrap| Loadpaths End
  • Additional information about your host, target hardware or environment that
    may help
    macOS 11.7.7 using nix 2.13.3 for package management

Current behavior

CT_EXTRA_LDFLAGS_FOR_BUILD and CT_EXTRA_CFLAGS_FOR_BUILD are currently set to /usr/local/opt/... which might be incorrect, depending on user setup, e.g. on Nix. See

CT_EXTRA_LDFLAGS_FOR_BUILD="-L/usr/local/opt/gettext/lib -lintl"

Of course it could be hardcoded in other places as well.

This results in mix firmware being unable to compile dependencies, due to libraries being searched in an incorrect location

==> one_dhcpd
 CC arp_set.o
dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib

Expected behaviour

Buildscripts detect the correct location and firmware is built correctly.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions