100 lines
2.3 KiB
Makefile
100 lines
2.3 KiB
Makefile
#
|
|
# Makefile to build the Polo library
|
|
#
|
|
|
|
# Main target
|
|
# polo: creates a jar containing the protocol (default)
|
|
# poloJava: compiles the java sources
|
|
# proto: compiles the protocol buffers
|
|
|
|
.PHONY: proto polo poloJava clean cleanProto default
|
|
|
|
default: polo
|
|
|
|
###############
|
|
# DEFINITIONS #
|
|
###############
|
|
# Sources top directory
|
|
JAVA_SRC_TOP := src
|
|
|
|
# Package name
|
|
PACKAGE_NAME := com/google/polo
|
|
|
|
# Complete path to sources
|
|
JAVA_SRC_DIR := $(JAVA_SRC_TOP)/$(PACKAGE_NAME)
|
|
|
|
JAVA_SRC := $(shell find $(JAVA_SRC_DIR) -name '*.java')
|
|
|
|
# .class targets
|
|
JAVA_SRC_CLASSES = $(patsubst %.java,%.class,$(JAVA_SRC))
|
|
|
|
# Classpath
|
|
JAVA_CLASSPATH := $(subst jar ,jar:,$(strip "bin:$(wildcard jar/*.jar)"))
|
|
|
|
# Location to put the generated .class
|
|
JAVA_OUT := bin
|
|
|
|
# Name for the jar that will be created
|
|
JAR_NAME := polo.jar
|
|
|
|
####################
|
|
# PROTOCOL BUFFERS #
|
|
####################
|
|
# Sources directory for protocols buffers
|
|
PROTO_SRC_DIR := ../proto
|
|
|
|
# Location for the java files generated by the proto compiler
|
|
PROTO_JAVA_OUT := proto_out
|
|
|
|
# Creates the needed directories
|
|
$(PROTO_JAVA_OUT) $(JAVA_OUT):
|
|
-mkdir -p $@
|
|
|
|
# Definition of the .proto and the corresponding java generated files.
|
|
$(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java: $(PROTO_SRC_DIR)/polo.proto
|
|
$(genproto)
|
|
|
|
# All java files generated from proto.
|
|
ALL_GENPROTOS := \
|
|
$(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java
|
|
|
|
# Rule to build a .proto in the proto/ directory
|
|
define genproto
|
|
protoc \
|
|
--java_out=$(PROTO_JAVA_OUT) \
|
|
-I $(PROTO_SRC_DIR) \
|
|
$<
|
|
endef
|
|
|
|
# Compiles the proto
|
|
proto: $(PROTO_JAVA_OUT) $(ALL_GENPROTOS)
|
|
|
|
#################
|
|
# JAVA COMPILER #
|
|
#################
|
|
# compiles a java source
|
|
%.class: %.java
|
|
javac \
|
|
-sourcepath "$(JAVA_SRC_TOP):$(PROTO_JAVA_OUT)" \
|
|
-classpath $(JAVA_CLASSPATH) \
|
|
-d $(JAVA_OUT)/ \
|
|
$?
|
|
|
|
#################
|
|
# PROJECT RULES #
|
|
#################
|
|
# Compiles the java sources for the project
|
|
poloJava: $(JAVA_OUT) proto $(JAVA_SRC_CLASSES)
|
|
|
|
# Cleans the generated protocol buffers
|
|
cleanProto:
|
|
-rm -rf $(PROTO_JAVA_OUT)
|
|
|
|
# Cleans the project
|
|
clean: cleanProto
|
|
-rm -rf $(JAVA_OUT)
|
|
-rm $(JAR_NAME)
|
|
|
|
# Complete and clean build of the project returns a jar.
|
|
polo: clean poloJava
|
|
jar cf $(JAR_NAME) -C $(JAVA_OUT) $(shell ls $(JAVA_OUT))
|