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