Skip to content

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

@d-ferenczi

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.

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