55
66# we want bash as shell
77SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
8- else if [ -x BASH_PATH="$(command -v bash ) " ]; then echo $$BASH_PATH; \
8+ else if [ -x BASH_PATH="$$ (command -v bash ) " ]; then echo $$BASH_PATH; \
99 else echo sh; fi; fi)
1010
1111# Set O variable if not already done on the command line;
@@ -27,24 +27,33 @@ CANONICAL_CURDIR = $(realpath $(CURDIR))
2727
2828PROTO_DIR = $(CANONICAL_CURDIR ) /proto
2929RUST_LANG_DIR = $(CANONICAL_CURDIR ) /rust
30+ ELIXIR_LANG_DIR = $(CANONICAL_CURDIR ) /elixir
31+ ELIXIR_LANG_LIB =$(ELIXIR_LANG_DIR ) /edgehog_device_forwarder_proto/lib/edgehog_device_forwarder_proto
3032
3133BASE_DIR := $(CANONICAL_O )
3234$(if $(BASE_DIR),, $(error output directory "$(O)" does not exist))
3335
3436BUILD_DIR := $(BASE_DIR ) /build
3537RUST_BUILD_DIR := $(BUILD_DIR ) /rust
38+ ELIXIR_BUILD_DIR := $(BUILD_DIR ) /elixir
3639
37- FILES =$(wildcard proto /edgehog/device/forwarder/* .proto)
40+ FILES =$(wildcard $( PROTO_DIR ) /edgehog/device/forwarder/* .proto)
3841
3942PROTOC_CHECK_SCRIPT =$(CANONICAL_CURDIR ) /scripts/protoc_check.sh
43+ ELIXIR_DEPS_CHECK_SCRIPT =$(CANONICAL_CURDIR ) /scripts/elixir_deps_check.sh
4044
4145RUST_LANG =$(RUST_BUILD_DIR ) /proto.rs
4246RUST_FILES =$(shell find "$(RUST_LANG_DIR ) /rust-codegen" -type f -regex '.* (rs|Cargo.toml|Cargo.lock) $$') \
4347 $(RUST_LANG_DIR ) /Cargo.toml $(RUST_LANG_DIR ) /Cargo.lock
4448
49+ ELIXIR_LANG =$(ELIXIR_BUILD_DIR ) /edgehog/device/forwarder/http.pb.ex \
50+ $(ELIXIR_BUILD_DIR ) /edgehog/device/forwarder/ws.pb.ex \
51+ $(ELIXIR_BUILD_DIR ) /edgehog/device/forwarder/message.pb.ex
52+ ELIXIR_FILES ="$(ELIXIR_LANG_LIB ) /edgehog/device/forwarder/"{http,ws,message}.pb.ex
53+
4554# This is our default rule, so must come first
4655.PHONY : all
47- all : rust
56+ all : protoc-check $( RUST_LANG ) $( ELIXIR_LANG )
4857
4958.PHONY : install
5059install : rust-install
@@ -71,6 +80,29 @@ rust-install: rust
7180rust-dirclean :
7281 rm -rf $(RUST_BUILD_DIR )
7382
83+ $(ELIXIR_LANG ) & : $(FILES )
84+ mkdir -p $(ELIXIR_BUILD_DIR )
85+ protoc \
86+ --elixir_out=$(ELIXIR_BUILD_DIR ) \
87+ --elixir_opt=package_prefix=EdgehogDeviceForwarderProto \
88+ --proto_path=$(PROTO_DIR ) \
89+ $(FILES )
90+
91+ elixir-dependencies-check : $(ELIXIR_DEPS_CHECK_SCRIPT )
92+ $(SHELL ) $(ELIXIR_DEPS_CHECK_SCRIPT )
93+
94+ .PHONY : elixir
95+ elixir : protoc-check elixir-dependencies-check $(ELIXIR_LANG )
96+
97+ .PHONY : elixir-install
98+ elixir-install : elixir
99+ mkdir -p " $( ELIXIR_LANG_LIB) /edgehog/device/forwarder/"
100+ install -m 644 " $( ELIXIR_BUILD_DIR) /edgehog/device/forwarder/" {http,ws,message}.pb.ex " $( ELIXIR_LANG_LIB) /edgehog/device/forwarder/"
101+
102+ .PHONY : elixir-dirclean
103+ elixir-dirclean :
104+ rm -rf $(ELIXIR_BUILD_DIR )
105+
74106.PHONY : help
75107help :
76108 @echo ' Cleaning:'
0 commit comments