Browse Source

Add protobuffs plugin to compile *.proto files

Loïc Hoguin 10 years ago
parent
commit
245fa2c0b8
2 changed files with 41 additions and 5 deletions
  1. 10 5
      build.config
  2. 31 0
      plugins/protobuffs.mk

+ 10 - 5
build.config

@@ -1,16 +1,21 @@
-# Core modules.
+# Do *not* comment or remove core modules
+# unless you know what you are doing.
 #
-# Do *not* comment or remove them
-# unless you know what you are doing!
+# Feel free to comment plugins out however.
+
+# Core modules.
 core/core
 core/deps
+
+# Plugins that must run before Erlang code gets compiled.
+plugins/protobuffs
+
+# Core modules, continued.
 core/erlc
 core/docs
 core/test
 
 # Plugins.
-#
-# Comment to disable, uncomment to enable.
 plugins/asciidoc
 plugins/bootstrap
 plugins/c_src

+ 31 - 0
plugins/protobuffs.mk

@@ -0,0 +1,31 @@
+# Copyright (c) 2015, Loïc Hoguin <essen@ninenines.eu>
+# This file is part of erlang.mk and subject to the terms of the ISC License.
+
+# Verbosity.
+
+proto_verbose_0 = @echo " PROTO " $(filter %.proto,$(?F));
+proto_verbose = $(proto_verbose_$(V))
+
+# Core targets.
+
+define compile_proto
+	@mkdir -p ebin/ include/
+	$(proto_verbose) $(call erlang,$(call compile_proto.erl,$(1)))
+	$(proto_verbose) erlc $(ERLC_OPTS) -o ebin/ ebin/*.erl
+	@rm ebin/*.erl
+endef
+
+define compile_proto.erl
+	[begin
+		Dir = filename:dirname(filename:dirname(F)),
+		protobuffs_compile:generate_source(F,
+			[{output_include_dir, Dir ++ "/include"},
+				{output_src_dir, Dir ++ "/ebin"}])
+	end || F <- string:tokens("$(1)", " ")],
+	halt().
+endef
+
+ifneq ($(wildcard src/),)
+ebin/$(PROJECT).app:: $(shell find src -type f -name \*.proto 2>/dev/null)
+	$(if $(strip $?),$(call compile_proto,$?))
+endif