Backport elixir 1.8 + elixir_make 0.5 hacks from `staging`

pull/974/head
Connor Rigby 2019-03-25 10:30:53 -07:00
parent 16c9f8d62f
commit 13ae06cf17
No known key found for this signature in database
GPG Key ID: 29A88B24B70456E0
11 changed files with 96 additions and 82 deletions

View File

@ -1,41 +1,48 @@
ALL :=
CLEAN :=
PREFIX = $(MIX_COMPILE_PATH)/../priv
BUILD = $(MIX_COMPILE_PATH)/../obj
ifeq ($(MIX_COMPILE_PATH),)
$(error Something is wrong with mix. Pls fix)
endif
# Set Erlang-specific compile and linker flags
ERL_CFLAGS ?= -I$(ERL_EI_INCLUDE_DIR)
ERL_LDFLAGS ?= -L$(ERL_EI_LIBDIR) -lei
CFLAGS += -fPIC --std=c11
LDFLAGS += -fPIC -shared
ifeq ($(MIX_TARGET),host)
else
# oof
$(shell $(RM) $(PREFIX)/*.so $(BUILD)/*.o)
endif
ifeq ($(ERL_EI_INCLUDE_DIR),)
$(warning ERL_EI_INCLUDE_DIR not set. Invoke via mix)
else
ALL += fbos_build_calendar_nif
CLEAN += fbos_clean_build_calendar_nif
endif
ifeq ($(ARDUINO_BUILD),)
.PHONY: all clean
$(info ARDUINO_BUILD is set. Arduino assets will be built.)
all: $(PREFIX) \
$(BUILD) \
$(PREFIX)/build_calendar.so
else
clean:
$(RM) $(PREFIX)/*.so
ALL += fbos_arduino_firmware
CLEAN += fbos_clean_arduino_firmware
## BUILD CALENDAR NIF
endif
$(PREFIX)/build_calendar.so: $(BUILD)/build_calendar.o
$(CC) -o $@ $(ERL_LDFLAGS) $(LDFLAGS) $^
.PHONY: $(ALL) $(CLEAN) all clean
$(BUILD)/build_calendar.o: c_src/build_calendar/build_calendar.c
$(CC) -c $(ERL_CFLAGS) $(CFLAGS) -o $@ $<
all: $(ALL)
## DIRECTORIES
clean: $(CLEAN)
$(PREFIX):
mkdir -p $(PREFIX)
fbos_arduino_firmware:
cd c_src/farmbot-arduino-firmware && make all BUILD_DIR=$(MAKE_CWD)/_build FBARDUINO_FIRMWARE_SRC_DIR=$(MAKE_CWD)/c_src/farmbot-arduino-firmware/src BIN_DIR=$(MAKE_CWD)/priv
fbos_clean_arduino_firmware:
cd c_src/farmbot-arduino-firmware && make clean BUILD_DIR=$(MAKE_CWD)/_build FBARDUINO_FIRMWARE_SRC_DIR=$(MAKE_CWD)/c_src/farmbot-arduino-firmware/src BIN_DIR=$(MAKE_CWD)/priv
fbos_build_calendar_nif:
make -f c_src/build_calendar/Makefile all ERL_EI_INCLUDE_DIR=$(ERL_EI_INCLUDE_DIR) ERL_EI_LIBDIR=$(ERL_EI_LIBDIR)
fbos_clean_build_calendar_nif:
make -f c_src/build_calendar/Makefile clean ERL_EI_INCLUDE_DIR=$(ERL_EI_INCLUDE_DIR) ERL_EI_LIBDIR=$(ERL_EI_LIBDIR)
$(BUILD):
mkdir -p $(BUILD)

View File

@ -1,28 +0,0 @@
ifeq ($(ERL_EI_INCLUDE_DIR),)
$(error ERL_EI_INCLUDE_DIR not set. Invoke via mix)
endif
# Set Erlang-specific compile and linker flags
ERL_CFLAGS ?= -I$(ERL_EI_INCLUDE_DIR)
ERL_LDFLAGS ?= -L$(ERL_EI_LIBDIR)
NIF_LDFLAGS += -fPIC -shared
NIF_CFLAGS ?= -fPIC -O2 -Wall
NIF=priv/build_calendar.so
ifeq ($(CROSSCOMPILE),)
ifeq ($(shell uname),Darwin)
NIF_LDFLAGS += -undefined dynamic_lookup
endif
endif
.PHONY: all clean
all: $(NIF)
$(NIF): c_src/build_calendar/build_calendar.c
$(CC) $(ERL_CFLAGS) $(NIF_CFLAGS) $(ERL_LDFLAGS) $(NIF_LDFLAGS) -o $@ $<
clean:
$(RM) $(NIF)

View File

@ -23,7 +23,6 @@ defmodule FarmbotCore.MixProject do
description: "The Brains of the Farmbot Project",
elixir: @elixir_version,
make_clean: ["clean"],
make_env: make_env(),
make_cwd: __DIR__,
compilers: [:elixir_make] ++ Mix.compilers(),
elixirc_paths: elixirc_paths(Mix.env()),
@ -32,7 +31,7 @@ defmodule FarmbotCore.MixProject do
branch: @branch,
commit: commit(),
arduino_commit: arduino_commit(),
build_embedded: Mix.env() == :prod,
build_embedded: false,
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
@ -66,7 +65,7 @@ defmodule FarmbotCore.MixProject do
[
{:farmbot_celery_script, path: "../farmbot_celery_script", env: Mix.env()},
{:farmbot_firmware, path: "../farmbot_firmware", env: Mix.env()},
{:elixir_make, "~> 0.4", runtime: false},
{:elixir_make, "~> 0.5", runtime: false},
{:sqlite_ecto2, "~> 2.3"},
{:timex, "~> 3.4"},
{:jason, "~> 1.1"},
@ -77,21 +76,6 @@ defmodule FarmbotCore.MixProject do
]
end
defp make_env do
case System.get_env("ERL_EI_INCLUDE_DIR") do
nil ->
%{
"MAKE_CWD" => __DIR__,
"ERL_EI_INCLUDE_DIR" => Path.join([:code.root_dir(), "usr", "include"]),
"ERL_EI_LIBDIR" => Path.join([:code.root_dir(), "usr", "lib"]),
"MIX_TARGET" => @target
}
_ ->
%{"MAKE_CWD" => __DIR__}
end
end
defp elixirc_paths(:test) do
["lib", "../test/support"]
end

View File

@ -10,7 +10,7 @@
"dialyxir": {:hex, :dialyxir, "1.0.0-rc.3", "774306f84973fc3f1e2e8743eeaa5f5d29b117f3916e5de74c075c02f1b8ef55", [:mix], [], "hexpm"},
"earmark": {:hex, :earmark, "1.2.6", "b6da42b3831458d3ecc57314dff3051b080b9b2be88c2e5aa41cd642a5b044ed", [:mix], [], "hexpm"},
"ecto": {:hex, :ecto, "2.2.9", "031d55df9bb430cb118e6f3026a87408d9ce9638737bda3871e5d727a3594aae", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
"elixir_make": {:hex, :elixir_make, "0.4.2", "332c649d08c18bc1ecc73b1befc68c647136de4f340b548844efc796405743bf", [:mix], [], "hexpm"},
"elixir_make": {:hex, :elixir_make, "0.5.2", "96a28c79f5b8d34879cd95ebc04d2a0d678cfbbd3e74c43cb63a76adf0ee8054", [:mix], [], "hexpm"},
"esqlite": {:hex, :esqlite, "0.2.4", "3a8a352c190afe2d6b828b252a6fbff65b5cc1124647f38b15bdab3bf6fd4b3e", [:rebar3], [], "hexpm"},
"ex_doc": {:hex, :ex_doc, "0.19.1", "519bb9c19526ca51d326c060cb1778d4a9056b190086a8c6c115828eaccea6cf", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.7", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
"excoveralls": {:hex, :excoveralls, "0.10.1", "407d50ac8fc63dfee9175ccb4548e6c5512b5052afa63eedb9cd452a32a91495", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},

View File

@ -0,0 +1,50 @@
# Set Erlang-specific compile and linker flags
ERL_CFLAGS ?= -I$(ERL_EI_INCLUDE_DIR)
ERL_LDFLAGS ?= -L$(ERL_EI_LIBDIR) -lei
CFLAGS += -fPIC --std=c11
LDFLAGS += -fPIC -shared
ifeq ($(ERL_EI_INCLUDE_DIR),)
$(warning ERL_EI_INCLUDE_DIR not set. Invoke via mix)
endif
ESQLITE_SRC = $(MIX_DEPS_PATH)/esqlite/c_src
ESQLITE_BUILD = $(MIX_BUILD_PATH)/lib/esqlite/obj
ESQLITE_PREFIX = $(MIX_BUILD_PATH)/lib/esqlite/priv
.PHONY: all clean
SQLITE_CFLAGS := -DSQLITE_THREADSAFE=1 \
-DSQLITE_USE_URI \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS
all: $(ESQLITE_BUILD) \
$(ESQLITE_PREFIX) \
$(ESQLITE_PREFIX)/esqlite3_nif.so
clean:
$(RM) $(ESQLITE_PREFIX)/*.so
## ESQLITE NIF HACK
$(ESQLITE_PREFIX)/esqlite3_nif.so: $(ESQLITE_BUILD)/sqlite3.o $(ESQLITE_BUILD)/queue.o $(ESQLITE_BUILD)/esqlite3_nif.o
$(CC) -o $@ $(ERL_LDFLAGS) $(LDFLAGS) $^
$(ESQLITE_BUILD)/esqlite3_nif.o: $(ESQLITE_SRC)/esqlite3_nif.c
$(CC) -c $(ERL_CFLAGS) $(CFLAGS) $(SQLITE_CFLAGS) -o $@ $<
$(ESQLITE_BUILD)/queue.o: $(ESQLITE_SRC)/queue.c
$(CC) -c $(ERL_CFLAGS) $(CFLAGS) $(SQLITE_CFLAGS) -o $@ $<
$(ESQLITE_BUILD)/sqlite3.o: $(ESQLITE_SRC)/sqlite3.c
$(CC) -c $(CFLAGS) $(SQLITE_CFLAGS) -o $@ $<
## DIRECTORIES
$(ESQLITE_BUILD):
mkdir -p $(ESQLITE_BUILD)
$(ESQLITE_PREFIX):
mkdir -p $(ESQLITE_PREFIX)

View File

@ -64,8 +64,7 @@ config :farmbot, FarmbotOS.Platform.Supervisor,
FarmbotOS.Platform.Target.Configurator.Supervisor,
FarmbotOS.Platform.Target.SSHConsole,
FarmbotOS.Platform.Target.Uevent.Supervisor,
FarmbotOS.Platform.Target.InfoWorker.Supervisor,
FarmbotOS.TTYDetector
FarmbotOS.Platform.Target.InfoWorker.Supervisor
]
config :farmbot_ext, FarmbotExt.AMQP.NervesHubTransport,

View File

@ -1,3 +1,3 @@
use Mix.Config
config :farmbot, FarmbotOS.TTYDetector, expected_names: ["ttyUSB0", "ttyACM0", "ttyS0"]
config :farmbot, FarmbotOS.FirmwareTTYDetector, expected_names: ["ttyUSB0", "ttyACM0", "ttyS0"]

View File

@ -1,2 +1,2 @@
use Mix.Config
config :farmbot, FarmbotOS.TTYDetector, expected_names: ["ttyUSB0", "ttyACM0"]
config :farmbot, FarmbotOS.FirmwareTTYDetector, expected_names: ["ttyUSB0", "ttyACM0"]

View File

@ -1,4 +1,4 @@
use Mix.Config
config :farmbot, :captive_portal_address, "192.168.24.1"
config :farmbot, FarmbotOS.TTYDetector, expected_names: ["ttyUSB0", "ttyACM0"]
config :farmbot, FarmbotOS.FirmwareTTYDetector, expected_names: ["ttyUSB0", "ttyACM0"]

View File

@ -20,7 +20,8 @@ defmodule FarmbotOS.MixProject do
commit: @commit,
archives: [nerves_bootstrap: "~> 1.4"],
start_permanent: Mix.env() == :prod,
build_embedded: Mix.target() != :host,
build_embedded: false,
compilers: [:elixir_make | Mix.compilers()],
aliases: [loadconfig: [&bootstrap/1]],
elixirc_paths: elixirc_paths(Mix.env(), Mix.target()),
deps: deps()
@ -59,6 +60,7 @@ defmodule FarmbotOS.MixProject do
{:excoveralls, "~> 0.10", only: [:test], targets: [:host]},
{:dialyxir, "~> 1.0.0-rc.3", only: [:dev], targets: [:host], runtime: false},
{:ex_doc, "~> 0.19", only: [:dev], targets: [:host], runtime: false},
{:elixir_make, "~> 0.5", runtime: false},
# Target only deps
{:cors_plug, "~> 2.0", targets: @all_targets},

View File

@ -16,7 +16,7 @@
"dns": {:hex, :dns, "2.1.2", "81c46d39f7934f0e73368355126e4266762cf227ba61d5889635d83b2d64a493", [:mix], [{:socket, "~> 0.3.13", [hex: :socket, repo: "hexpm", optional: false]}], "hexpm"},
"earmark": {:hex, :earmark, "1.3.1", "73812f447f7a42358d3ba79283cfa3075a7580a3a2ed457616d6517ac3738cb9", [:mix], [], "hexpm"},
"ecto": {:hex, :ecto, "2.2.9", "031d55df9bb430cb118e6f3026a87408d9ce9638737bda3871e5d727a3594aae", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
"elixir_make": {:hex, :elixir_make, "0.4.2", "332c649d08c18bc1ecc73b1befc68c647136de4f340b548844efc796405743bf", [:mix], [], "hexpm"},
"elixir_make": {:hex, :elixir_make, "0.5.2", "96a28c79f5b8d34879cd95ebc04d2a0d678cfbbd3e74c43cb63a76adf0ee8054", [:mix], [], "hexpm"},
"erlex": {:hex, :erlex, "0.1.6", "c01c889363168d3fdd23f4211647d8a34c0f9a21ec726762312e08e083f3d47e", [:mix], [], "hexpm"},
"esqlite": {:hex, :esqlite, "0.2.5", "cab6d87aeb5f33d848b9bb8a21129e9512ea608f930d4c63576942d8f7d72218", [:rebar3], [], "hexpm"},
"ex_doc": {:hex, :ex_doc, "0.19.3", "3c7b0f02851f5fc13b040e8e925051452e41248f685e40250d7e40b07b9f8c10", [:mix], [{:earmark, "~> 1.2", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},