diff options
Diffstat (limited to 'java/Makefile')
-rw-r--r-- | java/Makefile | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/java/Makefile b/java/Makefile new file mode 100644 index 0000000..38b86bd --- /dev/null +++ b/java/Makefile @@ -0,0 +1,100 @@ +# +# 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)) |