Jerome Poichet | 7c99785 | 2014-05-20 10:50:05 -0700 | [diff] [blame] | 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)) |