# # 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))