# Install protobuf and set PROTOBUF_ROOT to its location
ifndef PROTOBUF_ROOT
$(error PROTOBUF_ROOT is not set)
endif
PROTOC:=LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PROTOBUF_ROOT}/lib ${PROTOBUF_ROOT}/bin/protoc
CC:=g++
BUILD_DIR:=build
PROTO_BUILD_DIR:=${BUILD_DIR}/proto
PROTO_DIR:=proto
SRC_DIR:=src
GAME_OBJS:=${PROTO_BUILD_DIR}/tuningfork_extensions.pb.o ${BUILD_DIR}/game.o
ENG_GAME_OBJS:=${PROTO_BUILD_DIR}/eng_tuningfork_extensions.pb.o ${BUILD_DIR}/eng_game.o
TUNINGFORK_OBJS:= ${PROTO_BUILD_DIR}/tuningfork.pb.o ${BUILD_DIR}/mocktuningfork.o
GAMEENGINE_OBJS:= ${PROTO_BUILD_DIR}/eng_tuningfork.pb.o ${BUILD_DIR}/gameengine.o
SZTOOL_OBJS:=${PROTO_BUILD_DIR}/tuningfork.pb.o ${PROTO_BUILD_DIR}/tuningfork_clearcut_log.pb.o ${BUILD_DIR}/sztool.o ${BUILD_DIR}/dynamicproto.o
PLAY_OBJS:=${BUILD_DIR}/dynamicproto.o ${BUILD_DIR}/play.o
CDEFS:=-I${PROTOBUF_ROOT}/include -fPIC -I${BUILD_DIR} -std=c++11
LIBS:=-lprotobuf -L${PROTOBUF_ROOT}/lib
TUNINGFORK_LIB:=${BUILD_DIR}/mocktuningfork.so
GAMEENGINE_LIB:=${BUILD_DIR}/gameengine.so
all: run
run: play game eng_game sztool
./play proto/tuningfork_extensions.proto > fidelityparams.pbin
./game
./eng_game
./sztool proto/tuningfork_extensions.proto tuningfork_settings.txt
clean:
rm -rf ${BUILD_DIR} play sztool game eng_game
game: ${TUNINGFORK_LIB} ${GAME_OBJS}
${CC} -o $@ $^ ${LIBS}
eng_game: ${GAMEENGINE_LIB} ${TUNINGFORK_LIB} ${ENG_GAME_OBJS}
${CC} -o $@ $^ ${LIBS}
${TUNINGFORK_LIB}: ${TUNINGFORK_OBJS}
${CC} -o $@ $^ -shared
${GAMEENGINE_LIB}: ${GAMEENGINE_OBJS}
${CC} -o $@ $^ -shared
play: ${PLAY_OBJS}
${CC} -o $@ $^ ${LIBS}
sztool: ${SZTOOL_OBJS}
${CC} -o $@ $^ ${LIBS}
${BUILD_DIR}/%.o: ${SRC_DIR}/%.cc | ${BUILD_DIR}
${CC} -o $@ -c ${CDEFS} $<
${PROTO_BUILD_DIR}/%.pb.o: ${PROTO_BUILD_DIR}/%.pb.cc | ${PROTO_BUILD_DIR}
${CC} -o $@ -c ${CDEFS} $<
${PROTO_BUILD_DIR}/%.pb.cc: ${PROTO_DIR}/%.proto | ${PROTO_BUILD_DIR}
${PROTOC} --cpp_out=${BUILD_DIR}/proto -Iproto -I${PROTOBUF_ROOT}/include $<
${BUILD_DIR}:
mkdir -p $@
${PROTO_BUILD_DIR}:
mkdir -p $@
.PHONY: all run clean