17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#
27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Makefile to build the Polo library
37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#
47c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Main target
67c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#   polo:        creates a jar containing the protocol (default)
77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#   poloJava:    compiles the java sources
87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#   proto:       compiles the protocol buffers
97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet.PHONY: proto polo poloJava clean cleanProto default
117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetdefault: polo
137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet###############
157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# DEFINITIONS #
167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet###############
177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Sources top directory
187c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_SRC_TOP := src
197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Package name
217c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetPACKAGE_NAME := com/google/polo
227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Complete path to sources
247c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_SRC_DIR := $(JAVA_SRC_TOP)/$(PACKAGE_NAME)
257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
267c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_SRC := $(shell find $(JAVA_SRC_DIR) -name '*.java')
277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# .class targets
297c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_SRC_CLASSES = $(patsubst %.java,%.class,$(JAVA_SRC))
307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Classpath 
327c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_CLASSPATH := $(subst jar ,jar:,$(strip "bin:$(wildcard jar/*.jar)"))
337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Location to put the generated .class
357c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAVA_OUT := bin
367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Name for the jar that will be created
387c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetJAR_NAME := polo.jar
397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet####################
417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# PROTOCOL BUFFERS #
427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet####################
437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Sources directory for protocols buffers
447c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetPROTO_SRC_DIR := ../proto
457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Location for the java files generated by the proto compiler
477c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetPROTO_JAVA_OUT := proto_out
487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Creates the needed directories
507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet$(PROTO_JAVA_OUT) $(JAVA_OUT):
517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	-mkdir -p $@
527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Definition of the .proto and the corresponding java generated files.
547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet$(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java: $(PROTO_SRC_DIR)/polo.proto
557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	$(genproto)
567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# All java files generated from proto.
587c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetALL_GENPROTOS := \
597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	$(PROTO_JAVA_OUT)/$(PACKAGE_NAME)/wire/protobuf/PoloProto.java
607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Rule to build a .proto in the proto/ directory
627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetdefine genproto
637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	protoc \
647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  --java_out=$(PROTO_JAVA_OUT) \
657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  -I $(PROTO_SRC_DIR) \
667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  $<
677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetendef
687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Compiles the proto
707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetproto: $(PROTO_JAVA_OUT) $(ALL_GENPROTOS)
717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#################
737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# JAVA COMPILER #
747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#################
757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# compiles a java source
767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet%.class: %.java
777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	javac \
787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  -sourcepath "$(JAVA_SRC_TOP):$(PROTO_JAVA_OUT)" \
797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  -classpath $(JAVA_CLASSPATH) \
807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  -d $(JAVA_OUT)/ \
817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	  $?
827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#################
847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# PROJECT RULES #
857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#################
867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Compiles the java sources for the project
877c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetpoloJava: $(JAVA_OUT) proto $(JAVA_SRC_CLASSES)
887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Cleans the generated protocol buffers
907c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetcleanProto:
917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	-rm -rf $(PROTO_JAVA_OUT)
927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Cleans the project
947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclean: cleanProto
957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	-rm -rf $(JAVA_OUT)
967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	-rm $(JAR_NAME)
977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet# Complete and clean build of the project returns a jar.
997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpolo: clean poloJava
1007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet	jar cf $(JAR_NAME) -C $(JAVA_OUT) $(shell ls $(JAVA_OUT))
101