# Declaration of variables # Generic Variables GCC=gcc GXX=g++ CFLAGS= -Wall -pedantic -Wextra -Werror -std=gnu99 -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable CXXFLAGS= -Wall -pedantic -Wextra -Werror -Wno-reorder -Wno-unused-variable -std=c++0x -g INCLUDES = $(foreach dir, $(INCDIR), -I$(dir)) INCDIR=inc src/vrpn src/vrpn/quat src/vrpn/build $(BESRCDIR) $(CLISRCDIR) $(FESRCDIR) LIBS= -lpthread -lbluetooth -lvrpn -lquat -Lsrc/vrpn/build -Lsrc/vrpn/build/quat OBJDIR=obj # Backend Specific Variables BEBINARY=BackEnd BESRCDIR=src/backend BECSOURCES := $(wildcard $(BESRCDIR)/*.c ) BECOBJECTS = $(BECSOURCES:$(BESRCDIR)/%.c=$(OBJDIR)/%.o) BECPPSOURCES := $(wildcard $(BESRCDIR)/*.cpp ) BECPPOBJECTS = $(BECPPSOURCES:$(BESRCDIR)/%.cpp=$(OBJDIR)/%.o) # CLI Specific Variables CLIBINARY=Cli CLISRCDIR=src/cli CLISOURCES := $(wildcard $(CLISRCDIR)/*.c) CLIOBJECTS = $(CLISOURCES:$(CLISRCDIR)/%.c=$(OBJDIR)/%.o) SYMLINKS=monitor setpid getpid setsetpoint getsetpoint # Frontend-common stuff FESRCDIR=src/frontend FECSOURCES := $(wildcard $(FESRCDIR)/*.c ) FECOBJECTS = $(FECSOURCES:$(FESRCDIR)/%.c=$(OBJDIR)/%.o) OBJECTS= $(CLIOBJECTS) $(BECOBJECTS) $(BECPPOBJECTS) $(FECOBJECTS) # Default target all: logs objdir backend cli $(SYMLINKS) frontend.a $(SYMLINKS): $(CLIBINARY) $(foreach symlink, $(SYMLINKS), ln -s $(CLIBINARY) $(symlink);) vrpn: vrpn/build frontend.a: $(FECOBJECTS) ar rvs frontend.a $(wildcard $(OBJDIR)/frontend_*.o) cli: $(CLIOBJECTS) $(FECOBJECTS) $(GCC) $(CFLAGS) $^ -o $(CLIBINARY) $(INCLUDES) $(LIBS) $(CLIOBJECTS) : $(OBJDIR)/%.o : $(CLISRCDIR)/%.c $(GCC) $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS) backend: $(BECPPOBJECTS) $(BECOBJECTS) $(GXX) $(CXXFLAGS) $^ -o $(BEBINARY) $(INCLUDES) $(LIBS) $(FECOBJECTS) : $(OBJDIR)/%.o : $(FESRCDIR)/%.c $(GCC) $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS) $(BECOBJECTS) : $(OBJDIR)/%.o : $(BESRCDIR)/%.c $(GCC) $(CFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS) $(BECPPOBJECTS) : $(OBJDIR)/%.o : $(BESRCDIR)/%.cpp $(GXX) $(CXXFLAGS) -c $^ -o $@ $(INCLUDES) $(LIBS) vrpn/build: mkdir -p src/vrpn/build cd src/vrpn/build && cmake .. && make logs: mkdir -p logs objdir: mkdir -p obj clean_logs: rm -f logs/* clean: rm -rf $(OBJDIR)/ $(BEBINARY) $(CLIBINARY) debug: @echo $(OBJECTS)