# Makefile for Thrift compiler. This Makefile assumes that you are running on
# some form of *NIX operating system with the following tools and packages
# installed:
#
#   g++
#   flex
#   bison
#   libfl
# 
# Author:
#   Mark Slee <mcslee@facebook.com>

# Default build rule
target:	thrift

# Tools
CC    = g++
LD    = g++
LEX   = flex
YACC  = bison
MKDIR = mkdir

# Source directory
SRC_DIR = src/

# Object file directory
OBJ_DIR = obj/

# Generated source dir
GEN_DIR = $(SRC_DIR)

# Output directory
BIN_DIR = bin/

# Source files
SRC_FILES = main.cc \
            generate/t_generator.cc \
            generate/t_cpp_generator.cc

# Autogenerated files
GEN_FILES = thrift.tab.hh \
            thrift.tab.cc \
            lex.yy.cc

# Object files
OBJ_FILES = ${SRC_FILES:.cc=.o}

# Generated object files
GOB_FILES = thrift.tab.o \
            lex.yy.o

# Apply directory prefixes
SRCS = ${addprefix $(SRC_DIR), $(SRC_FILES)}
GENS = ${addprefix $(GEN_DIR), $(GEN_FILES)}
OBJS = ${addprefix $(OBJ_DIR), $(OBJ_FILES)}
GOBS = ${addprefix $(OBJ_DIR), $(GOB_FILES)}

# Compile with strict warnings
CFL = -g -Wall -I$(SRC_DIR) -I$(OBJ_DIR)

# Flex library
LIBS = -lfl

# Scanner generation
$(GEN_DIR)lex.yy.cc: $(SRC_DIR)thrift.l
	$(LEX) -o$@ $(SRC_DIR)thrift.l

# Parser generation
$(GEN_DIR)thrift.tab.hh: $(GEN_DIR)thrift.tab.cc

$(GEN_DIR)thrift.tab.cc: $(SRC_DIR)thrift.y
	$(YACC) -d -o$(GEN_DIR)thrift.tab.cc $(SRC_DIR)thrift.y

# C++ compilation
$(OBJ_DIR)lex.yy.o: $(GEN_DIR)lex.yy.cc
	$(CC) $(CFL) -c -o $@ $(GEN_DIR)lex.yy.cc

# C++ compilation
$(OBJ_DIR)thrift.tab.o: $(GEN_DIR)thrift.tab.cc
	$(CC) $(CFL) -c -o $@ $(GEN_DIR)thrift.tab.cc

# C++ compilation
$(OBJS): $(SRCS)
	$(CC) $(CFL) -c -o $@ ${subst $(OBJ_DIR),$(SRC_DIR),$*.cc}

# Main build rule
thrift:	$(OBJS)	$(GOBS)
	$(LD) $(CFL) -o $(BIN_DIR)thrift $(OBJS) $(GOBS) $(LIBS)

# Build directory
obj_dirs:	
	$(MKDIR) -p $(OBJ_DIR)parse
	$(MKDIR) -p $(OBJ_DIR)generate

# Install it
install: thrift
	sudo install bin/thrift /usr/local/bin/thrift

# Remove auto-gen'd files and binaries
clean:
	rm -f \
	$(OBJS) \
	$(GOBS) \
	$(GENS) \
	$(BIN_DIR)thrift.exe \
	$(BIN_DIR)thrift

