Packages

nerves_system_br

0.7.0
1.34.0 1.33.9 1.33.8 1.33.7 1.33.6 1.33.5 1.33.4 1.33.3 1.33.2 1.33.1 1.33.0 1.32.5 1.32.4 1.32.3 1.32.2 1.32.1 1.32.0 1.31.7 1.31.6 1.31.5 1.31.4 1.31.3 1.31.2 1.31.1 1.31.0 1.30.1 1.30.0 1.29.3 1.29.2 1.29.1 1.29.0 1.28.3 1.28.2 1.28.1 1.28.0 1.27.3 1.27.2 1.27.1 1.27.0 1.26.1 1.26.0 1.25.3 1.25.2 1.25.1 1.25.0 1.24.1 1.24.0 1.23.3 1.23.2 1.23.1 1.23.0 1.22.8 1.22.7 1.22.6 1.22.5 1.22.4 1.22.3 1.22.2 1.22.1 1.22.0 1.21.6 1.21.5 1.21.4 1.21.3 1.21.2 1.21.1 1.21.0 1.20.6 1.20.5 1.20.4 1.20.3 1.20.2 1.20.1 1.20.0 1.19.1 1.19.0 1.18.6 1.18.5 1.18.4 1.18.3 1.18.2 1.18.1 1.18.0 1.17.4 1.17.3 1.17.2 1.17.1 1.17.0 1.16.5 1.16.4 1.16.3 1.16.2 1.16.1 1.16.0 1.15.2 1.15.1 1.15.0 1.14.5 1.14.4 1.14.3 1.14.2 1.14.1 1.14.0 1.13.8 1.13.7 1.13.6 1.13.5 1.13.4 1.13.3 1.13.2 1.13.1 1.13.0 1.12.4 1.12.3 1.12.2 1.12.1 1.12.0 1.12.0-rc.0 1.11.4 1.11.3 1.11.2 1.11.1 1.11.0 1.10.3 1.10.2 1.10.1 1.10.0 1.9.5 1.9.4 1.9.3 1.9.2 1.9.1 1.9.0 1.8.6 1.8.5 1.8.4 1.8.3 1.8.2 1.8.1 1.8.0 1.7.3 1.7.2 1.7.1 1.7.0 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.6 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.2 1.2.1 1.2.0 1.1.0 1.0.1 1.0.0 1.0.0-rc.4 1.0.0-rc.3 1.0.0-rc.2 1.0.0-rc.1 1.0.0-rc.0 0.17.0 0.16.4 0.16.3 0.16.2 0.16.1-2017-11 0.16.0-2017-11 0.15.1 0.15.0 0.14.1 0.14.0 0.13.9 0.13.8 0.13.7 0.13.6 0.13.5 0.13.4 retired 0.13.3 0.13.2 0.13.0 0.12.1 0.12.0 0.11.1 0.11.0 0.10.1 0.10.0 0.9.4 0.9.3 0.9.2 0.9.1 0.9.0 0.8.2 0.8.1 0.8.0 0.7.0 0.6.1 0.6.0 0.5.2 0.5.1 0.5.0 0.4.2 0.4.1

Nerves System BR - Buildroot based build platform for Nerves Systems

Current section

Files

Jump to
nerves_system_br nerves_env.exs
Raw

nerves_env.exs

defmodule System.Env do
@path "PATH"
@ld_library_path "LD_LIBRARY_PATH"
def path_add(p) do
System.put_env(@path, "#{path}:#{p}")
end
def ld_library_path_add(p) do
System.put_env(@ld_library_path, "#{ld_library_path}:#{p}")
end
def path do
System.get_env(@path)
end
def ld_library_path do
System.get_env(@ld_library_path)
end
end
system_path = System.get_env("NERVES_SYSTEM") ||
raise Nerves.Env.Exception, message: "You must set NERVES_SYSTEM to the system dir prior to requiring this file"
{_toolchain_path, crosscompile} =
if File.dir?(Path.join(system_path, "host")) do
toolchain_path =
system_path
|> Path.join("host")
crosscompile =
toolchain_path
|> Path.join("usr/bin/*gcc")
|> Path.wildcard
|> List.first
|> String.replace_suffix("-gcc", "")
System.put_env("PKG_CONFIG", Path.join(toolchain_path, "usr/bin/pkg-config"))
System.put_env("PKG_CONFIG_SYSROOT_DIR", "/")
System.put_env("PKG_CONFIG_LIBDIR", Path.join(toolchain_path, "usr/lib/pkgconfig"))
System.put_env("PERLLIB", Path.join(toolchain_path, "usr/lib/perl"))
Path.join(toolchain_path, "usr/bin")
|> System.Env.path_add
Path.join(toolchain_path, "usr/sbin")
|> System.Env.path_add
Path.join(toolchain_path, "bin")
|> System.Env.path_add
Path.join(toolchain_path, "usr/lib")
|> System.Env.ld_library_path_add
{toolchain_path, crosscompile}
else
# Not a BR Local Provider build
toolchain_path = System.get_env("NERVES_TOOLCHAIN")
# Find the crosscompilers
crosscompile =
toolchain_path
|> Path.join("bin/*gcc")
|> Path.wildcard
|> List.first
|> String.replace_suffix("-gcc", "")
# Add toolchain bin to path
Path.join(toolchain_path, "bin")
|> System.Env.path_add
{toolchain_path, crosscompile}
end
if crosscompile == "" do
raise Nerves.Env.Exception, message: "Cannot find a cross compiler"
end
sdk_sysroot = Path.join(system_path, "staging")
System.put_env("NERVES_SDK_IMAGES", Path.join(system_path, "images"))
System.put_env("NERVES_SDK_SYSROOT", sdk_sysroot)
system_include_path =
system_path
|> Path.join("staging/usr/include")
unless File.dir?(Path.join(system_path, "staging")) do
raise Nerves.Env.Exception, message: "ERROR: It looks like the system hasn't been built!"
end
System.put_env("CROSSCOMPILE", crosscompile)
erts_dir =
Path.join(sdk_sysroot, "usr/lib/erlang/erts-*")
|> Path.wildcard
|> List.first
System.put_env("ERTS_DIR", erts_dir)
erl_interface_dir =
Path.join(sdk_sysroot, "/usr/lib/erlang/lib/erl_interface-*")
|> Path.wildcard
|> List.first
System.put_env("ERL_INTERFACE_DIR", erl_interface_dir)
rebar_plt_dir =
Path.join(sdk_sysroot, "/usr/lib/erlang")
System.put_env("REBAR_PLT_DIR", rebar_plt_dir)
System.put_env("CC", "#{crosscompile}-gcc")
System.put_env("CXX", "#{crosscompile}-g++")
System.put_env("CFLAGS", "-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -Os -I#{system_include_path}")
System.put_env("CXXFLAGS", "-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -Os -I#{system_include_path}")
System.put_env("LDFLAGS", "--sysroot=#{sdk_sysroot}")
System.put_env("STRIP", "#{crosscompile}-strip")
System.put_env("ERL_CFLAGS", "-I#{erts_dir}/include -I#{erl_interface_dir}/include")
System.put_env("ERL_LDFLAGS", "-L#{erts_dir}/lib -L#{erl_interface_dir}/lib -lerts -lerl_interface -lei")
System.put_env("REBAR_TARGET_ARCH", Path.basename(crosscompile))
# Rebar naming
System.put_env("ERL_EI_LIBDIR", Path.join(erl_interface_dir, "lib"))
System.put_env("ERL_EI_INCLUDE_DIR", Path.join(erl_interface_dir, "include"))
# erlang.mk naming
System.put_env("ERTS_INCLUDE_DIR", "#{erts_dir}/include")
System.put_env("ERL_INTERFACE_LIB_DIR", Path.join(erl_interface_dir, "lib"))
System.put_env("ERL_INTERFACE_INCLUDE_DIR", Path.join(erl_interface_dir, "include"))
host_erl_major_ver = :erlang.system_info(:otp_release) |> to_string
[target_erl_major_version | _] =
sdk_sysroot
|> Path.join("/usr/lib/erlang/releases/*/OTP_VERSION")
|> Path.wildcard
|> List.first
|> File.read!
|> String.strip
|> String.split(".")
# Check to see if the system major version of ERL and the target major version match
if host_erl_major_ver != target_erl_major_version do
raise Nerves.Env.Exception, message: """
Major version mismatch between host and target Erlang/OTP versions
Host version: #{host_erl_major_ver}
Target version: #{target_erl_major_version}
This will likely cause Erlang code compiled for the target to fail in
unexpected ways. Install an Erlang OTP release that matches the target
version before continuing.
"""
end