Home | History | Annotate | Download | only in java
      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