owlps/owlps-positioner/Makefile

403 lines
10 KiB
Makefile

include ../common.mk
# Directories & files
SRC_DIR = src
OBJ_DIR = obj
TESTS_DIR = tests
DOXYGEN_DIR = doc
DOXYFILE = Doxyfile
# Other tools
STYLE = astyle --style=gnu --indent=spaces=2 --formatted
CPPCHECK = cppcheck --quiet --enable=all
DOXYGEN = OWLPS_VERSION=$(OWLPS_VERSION) doxygen >/dev/null
# Flags for the tests
TESTSCXXFLAGS = -I$(TESTS_DIR) -I$(SRC_DIR) -I.
## Additional libraries ##
LDFLAGS += -lstdc++ -lm -lboost_program_options -pthread -lowlps
ifeq "$(OS)" "Linux"
LDFLAGS += -lrt
endif
ifeq "$(OS)" "GNU/kFreeBSD"
LDFLAGS += -lrt
endif
TARGET = owlps-positionerd
OBJ_TARGET = $(OBJ_DIR)/$(TARGET).o
SOURCE_TARGET = $(SRC_DIR)/$(TARGET).cc
OBJ_LIST = \
posutil.o \
autocalibration.o \
stock.o \
timestamp.o \
direction.o \
point3d.o \
referencepoint.o \
waypoint.o \
building.o \
area.o \
wifidevice.o \
accesspoint.o \
mobile.o \
measurement.o \
request.o \
calibrationrequest.o \
resultlist.o \
result.o \
minmax.o \
interlinknetworks.o \
fbcm.o \
frbhmbasic.o \
nss.o \
realposition.o \
configuration.o \
userinterface.o \
inputdatareader.o \
accesspointsreadercsv.o \
mobilesreadercsv.o \
topologyreadercsv.o \
textfilereader.o \
csvfilereader.o \
textfilewriter.o \
output.o \
outputterminal.o \
outputcsv.o \
outputudpsocket.o \
outputtcpsocketevaal.o \
positioning.o \
input.o \
inputcsv.o \
inputudpsocket.o \
inputlogcsv.o
OBJ_NOTEST_LIST = \
posexcept.o \
trilaterationalgorithm.o \
cartographyalgorithm.o \
outputnetworksocket.o \
inputmedium.o
INTERFACES_LIST = \
inputlogmedium.hh \
outputmedium.hh \
trilaterationmethod.hh \
positioningalgorithm.hh
OBJ = $(OBJ_LIST:%=$(OBJ_DIR)/%)
OBJ_NOTEST = $(OBJ_NOTEST_LIST:%=$(OBJ_DIR)/%)
INTERFACES = $(INTERFACES_LIST:%=$(SRC_DIR)/%)
SOURCE = \
$(OBJ:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.hh) \
$(OBJ:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.cc) \
$(OBJ_NOTEST:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.hh) \
$(OBJ_NOTEST:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.cc) \
$(INTERFACES)
TESTS_XX = $(TESTS_DIR)/tests.cc
TESTS_OBJ = $(TESTS_DIR)/tests.o
TESTS_TARGET = $(TESTS_DIR)/tests
TESTUTIL_OBJ = $(TESTS_DIR)/testutil.o
TESTSETUP_OBJ = $(TESTS_DIR)/testsetup.o
SOURCE_TESTS = $(OBJ:$(OBJ_DIR)/%.o=$(TESTS_DIR)/%_test.hh)
OBJ_TESTS = $(TESTUTIL_OBJ) $(TESTSETUP_OBJ)
INCLUDES_TESTS = $(TESTS_DIR)/valuetraits.hh
dynamic: $(TARGET)
static: $(TARGET).static
all: dynamic static
# Generic targets
$(TESTS_DIR)/%.o: $(TESTS_DIR)/%.cc $(TESTS_DIR)/%.hh
$(CXX) $(CXXFLAGS) $(TESTSCXXFLAGS) -o $@ -c $<
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc $(SRC_DIR)/%.hh
$(MKDIR) $(OBJ_DIR) && $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $<
%: $(OBJ_DIR)/%.o
$(CXX) $(STRIPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
%.static: $(OBJ_DIR)/%.o
$(CXX) $(STRIPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -static
$(STRIP) $@
# Dependencies
$(OBJ_DIR)/autocalibration.o: \
$(OBJ_DIR)/stock.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/point3d.o: \
$(OBJ_DIR)/posutil.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/posutil.o: \
$(OBJ_DIR)/stock.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/owlps-positionerd.o: \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/owlps-positionerd.o: \
$(OBJ_DIR)/userinterface.o \
$(OBJ_DIR)/inputdatareader.o \
$(OBJ_DIR)/stock.o \
$(OBJ_DIR)/positioning.o
$(OBJ_DIR)/userinterface.o: \
$(OBJ_DIR)/configuration.o
$(OBJ_DIR)/inputdatareader.o: \
$(OBJ_DIR)/accesspointsreadercsv.o \
$(OBJ_DIR)/mobilesreadercsv.o \
$(OBJ_DIR)/topologyreadercsv.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/accesspointsreadercsv.o: \
$(OBJ_DIR)/csvfilereader.o \
$(OBJ_DIR)/accesspoint.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/mobilesreadercsv.o: \
$(OBJ_DIR)/csvfilereader.o \
$(OBJ_DIR)/mobile.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/topologyreadercsv.o: \
$(OBJ_DIR)/csvfilereader.o \
$(OBJ_DIR)/area.o \
$(OBJ_DIR)/waypoint.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/referencepoint.o: \
$(OBJ_DIR)/point3d.o \
$(OBJ_DIR)/measurement.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/waypoint.o: \
$(OBJ_DIR)/point3d.o \
$(OBJ_DIR)/building.o
$(OBJ_DIR)/area.o: \
$(OBJ_DIR)/building.o \
$(OBJ_DIR)/point3d.o
$(OBJ_DIR)/wifidevice.o: \
$(OBJ_DIR)/posutil.o
$(OBJ_DIR)/accesspoint.o: \
$(OBJ_DIR)/wifidevice.o \
$(OBJ_DIR)/posutil.o \
$(OBJ_DIR)/point3d.o
$(OBJ_DIR)/mobile.o: \
$(OBJ_DIR)/wifidevice.o
$(OBJ_DIR)/measurement.o: \
$(OBJ_DIR)/accesspoint.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/request.o: \
$(OBJ_DIR)/timestamp.o \
$(OBJ_DIR)/measurement.o
$(OBJ_DIR)/calibrationrequest.o: \
$(OBJ_DIR)/request.o \
$(OBJ_DIR)/referencepoint.o \
$(OBJ_DIR)/direction.o
$(OBJ_DIR)/result.o: \
$(OBJ_DIR)/stock.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/area.o \
$(OBJ_DIR)/request.o
$(OBJ_DIR)/resultlist.o: \
$(OBJ_DIR)/result.o
$(OBJ_DIR)/textfilereader.o: \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/csvfilereader.o: \
$(OBJ_DIR)/textfilereader.o
$(OBJ_DIR)/textfilewriter.o: \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/inputmedium.o: \
$(OBJ_DIR)/calibrationrequest.o \
$(OBJ_DIR)/posexcept.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/inputcsv.o: \
$(OBJ_DIR)/inputmedium.o \
$(OBJ_DIR)/csvfilereader.o \
$(OBJ_DIR)/request.o \
$(OBJ_DIR)/calibrationrequest.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/inputudpsocket.o: \
$(OBJ_DIR)/inputmedium.o \
$(OBJ_DIR)/posexcept.o \
$(OBJ_DIR)/request.o \
$(OBJ_DIR)/calibrationrequest.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/inputlogcsv.o: \
$(SRC_DIR)/inputlogmedium.hh \
$(OBJ_DIR)/request.o
$(OBJ_DIR)/input.o: \
$(OBJ_DIR)/inputcsv.o \
$(OBJ_DIR)/inputudpsocket.o \
$(OBJ_DIR)/inputlogcsv.o \
$(OBJ_DIR)/calibrationrequest.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/outputterminal.o: \
$(SRC_DIR)/outputmedium.hh \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/result.o
$(OBJ_DIR)/outputcsv.o: \
$(SRC_DIR)/outputmedium.hh \
$(OBJ_DIR)/textfilewriter.o \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/result.o
$(OBJ_DIR)/outputnetworksocket.o: \
$(SRC_DIR)/outputmedium.hh \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/result.o
$(OBJ_DIR)/outputudpsocket.o: \
$(OBJ_DIR)/outputnetworksocket.o \
$(OBJ_DIR)/request.o \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/result.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/outputtcpsocketevaal.o: \
$(OBJ_DIR)/outputnetworksocket.o \
$(OBJ_DIR)/request.o \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/result.o \
$(OBJ_DIR)/area.o \
$(OBJ_DIR)/posexcept.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/outputcsv.o: \
$(SRC_DIR)/outputmedium.hh \
$(OBJ_DIR)/result.o
$(OBJ_DIR)/output.o: \
$(OBJ_DIR)/outputterminal.o \
$(OBJ_DIR)/outputcsv.o \
$(OBJ_DIR)/outputudpsocket.o \
$(OBJ_DIR)/outputtcpsocketevaal.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/trilaterationalgorithm.o: \
$(SRC_DIR)/positioningalgorithm.hh \
$(OBJ_DIR)/minmax.o \
$(OBJ_DIR)/mobile.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o
$(OBJ_DIR)/cartographyalgorithm.o: \
$(SRC_DIR)/positioningalgorithm.hh \
$(OBJ_DIR)/referencepoint.o
$(OBJ_DIR)/minmax.o: \
$(SRC_DIR)/trilaterationmethod.hh \
$(OBJ_DIR)/point3d.o \
$(OBJ_DIR)/accesspoint.o
$(OBJ_DIR)/interlinknetworks.o: \
$(OBJ_DIR)/trilaterationalgorithm.o
$(OBJ_DIR)/fbcm.o: \
$(OBJ_DIR)/trilaterationalgorithm.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/frbhmbasic.o: \
$(OBJ_DIR)/nss.o \
$(OBJ_DIR)/fbcm.o
$(OBJ_DIR)/nss.o: \
$(OBJ_DIR)/cartographyalgorithm.o
$(OBJ_DIR)/realposition.o: \
$(SRC_DIR)/positioningalgorithm.hh \
$(OBJ_DIR)/result.o \
$(OBJ_DIR)/calibrationrequest.o \
$(OBJ_DIR)/referencepoint.o
$(OBJ_DIR)/positioning.o: \
$(OBJ_DIR)/inputdatareader.o \
$(OBJ_DIR)/input.o \
$(OBJ_DIR)/realposition.o \
$(OBJ_DIR)/fbcm.o \
$(OBJ_DIR)/frbhmbasic.o \
$(OBJ_DIR)/interlinknetworks.o \
$(OBJ_DIR)/nss.o \
$(OBJ_DIR)/resultlist.o \
$(OBJ_DIR)/output.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/posexcept.o
# Specific targets
$(TARGET): $(OBJ) $(OBJ_NOTEST) $(OBJ_TARGET)
$(TARGET).static: $(OBJ) $(OBJ_NOTEST) $(OBJ_TARGET)
$(OBJ_TARGET): $(SOURCE_TARGET)
$(CXX) $(CXXFLAGS) -o $@ -c $<
$(TESTS_XX): $(SOURCE_TESTS) $(OBJ)
$(TESTS_DIR)/cxxtestgen.pl --error-printer \
--include=$(TESTS_DIR)/valuetraits.hh \
--include=$(TESTUTIL_OBJ:.o=.hh) \
-o $@ $(SOURCE_TESTS)
$(TESTS_OBJ): $(TESTS_XX) $(INCLUDES_TESTS)
$(CXX) $(CXXFLAGS) $(TESTSCXXFLAGS) -o $@ -c $<
$(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS) $(OBJ) $(OBJ_NOTEST)
$(LD) $(LDFLAGS) -o $@ $^
test_forced: $(TESTS_TARGET)
@$(TESTS_TARGET)
test:
@echo "Unit tests are currently unmaintained. If you are sure"
@echo "you want to try them, use the target 'test_forced'."
doc:
@$(DOXYGEN) $(DOXYFILE)
clean:
@$(RM) *~ */*~ *.orig */*.orig
@$(RM_RECURSIVE) $(OBJ_DIR)
@$(RM) $(TESTS_XX) $(TESTS_DIR)/*.o
purge: clean
@$(RM) $(TARGET)
@$(RM) $(TARGET).static
@$(RM) $(TESTS_TARGET)
@$(RM_RECURSIVE) $(DOXYGEN_DIR)
install: $(TARGET)
@$(CP) $(TARGET) $(INSTALL_DIR) && \
chmod 755 $(INSTALL_DIR)/$(TARGET) && \
chown root:root $(INSTALL_DIR)/$(TARGET)
uninstall:
@$(RM) $(INSTALL_DIR)/$(TARGET)
style:
@$(STYLE) \
$(SOURCE) \
$(TESTS_DIR)/*.hh \
$(TESTS_DIR)/*.cc
check:
@$(CPPCHECK) \
$(SOURCE) \
$(TARGET).cc
help:
@echo "/!\ This program requires GCC >=4.4 /!\\"
@echo
@echo "Needed libraries:"
@echo " libboost-dev"
@echo " libboost-program-options-dev"
@echo
@echo "Optional programs nedded for specific targets:"
@echo " doxygen"
@echo " CxxTest suite"
@echo " astyle (Artistic Style)"
@echo " cppcheck"
@echo
@echo "Targets:"
@echo " all (default target): Compiles OwlPS Positioner."
@echo " doc: Generates documentation from source files (doxygen \
is required)."
@echo " install: Installs OwlPS Positioner."
@echo " uninstall: Uninstalls OwlPS Positioner."
@echo ""
@echo " test: Run unit tests (CxxTest suite is required)."
@echo " style: Reindent source files (astyle is required)."
@echo " check: Run automated checs on the source code (cppcheck \
is required)."
@echo
@echo " clean: Delete the temporary files."
@echo " purge: Delete all generated files."
@echo
@echo "Note: Files are installed under $(PREFIX)."
@echo "Tune the PREFIX variable in the Makefile to change that."