1 # 2 # Makefile to build the Polo library 3 # 4 5 # Main target 6 # polo: creates a jar containing the protocol (default) 7 # poloJava: compiles the java sources 8 # proto: compiles the protocol buffers 9 10 .PHONY: proto polo poloJava clean cleanProto default 11 12 default: polo 13 14 ############### 15 # DEFINITIONS # 16 ############### 17 # Sources top directory 18 JAVA_SRC_TOP := src 19 20 # Package name 21 PACKAGE_NAME := com/google/polo 22 23 # Complete path to sources 24 JAVA_SRC_DIR := $(JAVA_SRC_TOP)/$(PACKAGE_NAME) 25 26 JAVA_SRC := $(shell find $(JAVA_SRC_DIR) -name '*.java') 27 28 # .class targets 29 JAVA_SRC_CLASSES = $(patsubst %.java,%.class,$(JAVA_SRC)) 30 31 # Classpath 32 JAVA_CLASSPATH := $(subst jar ,jar:,$(strip "bin:$(wildcard jar/*.jar)")) 33 34 # Location to put the generated .class 35 JAVA_OUT := bin 36 37 # Name for the jar that will be created 38 JAR_NAME := polo.jar 39 40 #################### 41 # PROTOCOL BUFFERS # 42 #################### 43 # Sources directory for protocols buffers 44 PROTO_SRC_DIR := ../proto 45 46 # Location for the java files generated by the proto compiler 47 PROTO_JAVA_OUT := proto_out 48 49 # Creates the needed directories 50 $(PROTO_JAVA_OUT) $(JAVA_OUT): 51 -mkdir -p $@ 52 53 # Definition of the .proto and the corresponding java generated files. 54 $(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java: $(PROTO_SRC_DIR)/polo.proto 55 $(genproto) 56 57 # All java files generated from proto. 58 ALL_GENPROTOS := \ 59 $(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java 60 61 # Rule to build a .proto in the proto/ directory 62 define genproto 63 protoc \ 64 --java_out=$(PROTO_JAVA_OUT) \ 65 -I $(PROTO_SRC_DIR) \ 66 $< 67 endef 68 69 # Compiles the proto 70 proto: $(PROTO_JAVA_OUT) $(ALL_GENPROTOS) 71 72 ################# 73 # JAVA COMPILER # 74 ################# 75 # compiles a java source 76 %.class: %.java 77 javac \ 78 -sourcepath "$(JAVA_SRC_TOP):$(PROTO_JAVA_OUT)" \ 79 -classpath $(JAVA_CLASSPATH) \ 80 -d $(JAVA_OUT)/ \ 81 $? 82 83 ################# 84 # PROJECT RULES # 85 ################# 86 # Compiles the java sources for the project 87 poloJava: $(JAVA_OUT) proto $(JAVA_SRC_CLASSES) 88 89 # Cleans the generated protocol buffers 90 cleanProto: 91 -rm -rf $(PROTO_JAVA_OUT) 92 93 # Cleans the project 94 clean: cleanProto 95 -rm -rf $(JAVA_OUT) 96 -rm $(JAR_NAME) 97 98 # Complete and clean build of the project returns a jar. 99 polo: clean poloJava 100 jar cf $(JAR_NAME) -C $(JAVA_OUT) $(shell ls $(JAVA_OUT)) 101