Merge remote branch 'origin/tkellner/fix_firevision_buildsys'
[fawkes.git] / src / firevision / fvconf.mk
1 #*****************************************************************************
2 #            Makefile Build System for Fawkes: FireVision Config
3 #                            -------------------
4 #   Created on Sun Jan 14 23:00:47 2007
5 #   Copyright (C) 2006-2008 by Tim Niemueller, AllemaniACs RoboCup Team
6 #
7 #*****************************************************************************
8 #
9 #   This program is free software; you can redistribute it and/or modify
10 #   it under the terms of the GNU General Public License as published by
11 #   the Free Software Foundation; either version 2 of the License, or
12 #   (at your option) any later version.
13 #
14 #*****************************************************************************
15
16 ifndef __fvconf_mk_
17 __fvconf_mk_ := 1
18
19 ifndef __buildsys_config_mk_
20 $(error config.mk must be included before fvconf.mk)
21 endif
22
23 CAMS=LEUTRON FIREWIRE FILELOADER NETWORK SHMEM V4L V4L1 V4L2 BUMBLEBEE2 NAO \
24      SWISSRANGER PIKE
25 CTRLS=EVID100P DPPTU
26
27 FVBASEDIR           = $(FAWKES_BASEDIR)/src/firevision
28 TOP_FVBASEDIR       = $(TOP_BASEDIR)/src/firevision
29 FVCONFDIR           = $(EXEC_CONFDIR)/firevision
30 FVLIBDIR            = $(TOP_FVBASEDIR)/libs
31 FVEXTLIBDIR         = $(FVBASEDIR)/extlib
32 VISION_INCDIRS      = $(realpath $(FVBASEDIR)) $(realpath $(FVLIBDIR))
33 VISION_CFLAGS       = -D__STDC_LIMIT_MACROS -DFVCONFDIR=\"$(FVCONFDIR)\"
34
35 # PTGrey Triclops SDK used for Bumblebee2 stereo processing
36 TRICLOPS_SDK=$(SYSROOT)/opt/Triclops3.2.0.8-FC3
37
38 ifneq ($(wildcard $(SYSROOT)/usr/include/lvsds),)
39   HAVE_LEUTRON_CAM    = 1
40   HAVE_VISCA_CTRL     = 1
41   VISION_LIBDIRs     += $(SYSROOT)/usr/lib/lvsds
42   VISION_INCDIRS     += $(SYSROOT)/usr/include/lvsds
43   VISION_CAM_LIBS    += lvsds.34
44 endif
45 ifeq ($(HAVE_VISCA_CTRL),1)
46   HAVE_EVID100P_CTRL  = 1
47 endif
48
49 # check for JPEG lib
50 ifneq ($(wildcard $(SYSROOT)/usr/include/jpeglib.h $(SYSROOT)/usr/local/include/jpeglib.h),)
51   HAVE_LIBJPEG   = 1
52   VISION_CFLAGS += -DHAVE_LIBJPEG
53 endif
54
55 # check for PNG lib
56 HAVE_LIBPNG = $(if $(shell $(PKGCONFIG) --exists 'libpng'; echo $${?/1/}),1,0)
57 ifeq ($(HAVE_LIBPNG),1)
58   CFLAGS_LIBPNG  = -DHAVE_LIBPNG $(shell $(PKGCONFIG) --cflags 'libpng')
59   LDFLAGS_LIBPNG = $(shell $(PKGCONFIG) --libs 'libpng')
60 endif
61
62 HAVE_LIBV4L2 = $(if $(shell $(PKGCONFIG) --exists 'libv4l2'; echo $${?/1/}),1,0)
63 ifeq ($(HAVE_LIBPNG),1)
64   CFLAGS_LIBV4L2  = -DHAVE_LIBV4L2 $(shell $(PKGCONFIG) --cflags 'libv4l2')
65   LDFLAGS_LIBV4L2 = $(shell $(PKGCONFIG) --libs 'libv4l2')
66 endif
67
68 ifneq ($(wildcard $(realpath $(SYSROOT)/usr/include/libMesaSR.h)),)
69   HAVE_SWISSRANGER_CAM   = 1
70   VISION_CAM_LIBS       += mesasr usb
71 endif
72
73 ifneq ($(PKGCONFIG),)
74   HAVE_LIBDC1394 = $(if $(shell $(PKGCONFIG) --exists 'libdc1394-2'; echo $${?/1/}),1,0)
75   HAVE_SDL = $(if $(shell $(PKGCONFIG) --exists 'sdl'; echo $${?/1/}),1,0)
76 endif
77 ifeq ($(HAVE_LIBDC1394),1)
78   ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/firewire.h)),)
79     HAVE_FIREWIRE_CAM   = 1
80     ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/bumblebee2.h)),)
81       HAVE_BUMBLEBEE2_CAM = 1
82     endif
83     ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/pike.h)),)
84       HAVE_PIKE_CAM = 1
85     endif
86   endif
87   VISION_CAM_LIBS    += $(subst -l,,$(shell $(PKGCONFIG) --libs 'libdc1394-2'))
88 endif
89
90 ifeq ($(HAVE_SDL),1)
91   CFLAGS_SDL  = $(shell $(PKGCONFIG) --cflags 'sdl')
92   LDFLAGS_SDL = $(shell $(PKGCONFIG) --libs 'sdl')
93 endif
94
95 # Check if we have PGR Triclops SDK, build Bumblebee2 if we have it
96 ifeq ($(ARCH),x86_64)
97   TRICLOPS_SDK_ERR="Triclops SDK not available on 64-bit systems"
98 else
99   ifneq ($(HAVE_BUMBLEBEE2_CAM),1)
100     TRICLOPS_SDK_ERR="Bumblebee2 camera not available"
101   else
102     ifneq ($(wildcard $(realpath $(TRICLOPS_SDK)/include/triclops.h)),)
103       ifneq ($(wildcard $(realpath $(TRICLOPS_SDK)/lib/libtriclops.so)),)
104         HAVE_TRICLOPS_SDK = 1
105         TRICLOPS_SDK_INCDIRS += $(TRICLOPS_SDK)/include
106         TRICLOPS_SDK_LIBDIRS += $(TRICLOPS_SDK)/lib
107         TRICLOPS_SDK_LIBS    += triclops
108         VISION_CFLAGS += -DHAVE_TRICLOPS_SDK
109       else
110         TRICLOPS_SDK_ERR = "shared lib not created, use \"make triclops\" in fvstereo"
111       endif
112     else
113       TRICLOPS_SDK_ERR = "Triclops SDK not installed"
114     endif
115   endif
116 endif
117
118 ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/net.h)),)
119   HAVE_NETWORK_CAM    = 1
120 endif
121 ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/fileloader.h)),)
122   HAVE_FILELOADER_CAM = 1
123 endif
124 ifneq ($(wildcard $(realpath $(FVBASEDIR)/cams/shmem.h)),)
125   HAVE_SHMEM_CAM      = 1
126 endif
127
128
129 HAVE_DPPTU_CTRL     = 0
130 ifeq ($(OS),Linux)
131   HAVE_V4L_CAM        = 1
132   HAVE_V4L1_CAM       = 1
133   ifneq ($(wildcard $(SYSROOT)/usr/include/linux/videodev2.h),)
134     HAVE_V4L2_CAM       = 1
135     ifeq ($(BUILD_TYPE),naocross)
136       HAVE_NAO_CAM      = 1
137       VISION_CFLAGS    += $(NAOQI_CFLAGS)
138     endif
139   else
140     HAVE_V4L2_FAIL_REASON = v4l2 not available, kernel too old?
141   endif
142 endif
143
144
145 ### Need at least one of V4L 1 or 2 for V4L
146 ifeq ($(HAVE_V4L_CAM),1)
147   ifneq ($(HAVE_V4L1_CAM),1)
148     ifneq ($(HAVE_V4L2_CAM),1)
149       ERROR_TARGETS += error_V4L_CAM
150     endif
151   endif
152 endif
153
154 ### Need V4L2 for NAO
155 ifeq ($(HAVE_NAO_CAM),1)
156   ifneq ($(HAVE_V4L2_CAM),1)
157     ERROR_TARGETS += error_NAO_CAM
158   endif
159 endif
160
161 ### Check for external libraries
162 IPP_DIR  = $(SYSROOT)/opt/intel/Compiler/11.0/081/ipp
163 ICC_DIR  = $(SYSROOT)/opt/intel/Compiler/11.0/081/
164 HAVE_IPP = 0
165 ifneq ($(wildcard $(realpath $(IPP_DIR))),)
166   # Check versions, use first one found
167   #IPP_VERSION = $(firstword $(shell ls $(IPP_DIR)))
168   # We at least have a IPP, check if it matches our system
169   IPP_ARCH = ia32
170   ICC_ARCH = ia32
171   ifeq ($(ARCH),x86_64)
172     IPP_ARCH   = em64t
173     ICC_ARCH   = intel64
174   endif
175   ifneq ($(wildcard $(realpath $(IPP_DIR)/$(IPP_ARCH)/include/ipp.h)),)
176     HAVE_IPP = 1
177     VISION_CFLAGS  += -DHAVE_IPP
178     VISION_LIBS    += pthread
179     ifeq ($(wildcard $(IPP_DIR)/$(IPP_VERSION)/$(IPP_ARCH)/sharedlib/libguide.so),)
180       # IPP is used from ICC installation, possibly without actually using icc atm
181       VISION_LIBDIRS += $(ICC_DIR)/lib/$(ICC_ARCH)
182       VISION_INCDIRS += $(IPP_DIR)/include
183     endif
184     VISION_LIBDIRS += $(IPP_DIR)/$(IPP_VERSION)/$(IPP_ARCH)/sharedlib
185     VISION_INCDIRS += $(IPP_DIR)/$(IPP_VERSION)/$(IPP_ARCH)/include
186   endif
187 endif
188
189 HAVE_OPENCV = $(if $(shell $(PKGCONFIG) --exists 'opencv'; echo $${?/1/}),1,0)
190 ifeq ($(HAVE_OPENCV),1)
191   CFLAGS_OPENCV      = -DHAVE_OPENCV $(shell $(PKGCONFIG) --cflags 'opencv')
192   LDFLAGS_OPENCV     = $(subst -lhighgui,,$(shell $(PKGCONFIG) --libs 'opencv'))
193   LDFLAGS_OPENCV_GUI = -lhighgui
194 endif
195
196 ## check for SIFT-support (patent-encumbered!)
197 SIFT_DIR = $(FVBASEDIR)/extlib/sift
198 ifneq ($(wildcard $(realpath $(SIFT_DIR))),)
199   HAVE_SIFT = 1
200   LIBS_SIFT = sift
201   CFLAGS_SIFT = -DHAVE_SIFT -I$(SIFT_DIR)/include
202 endif
203
204 ## check for SURF-support (patent-encumbered!)
205 SURF_DIR = $(FVBASEDIR)/extlib/surf
206 ifneq ($(wildcard $(realpath $(SURF_DIR))),)
207   ifneq ($(ARCH),x86_64)
208     HAVE_SURF = 1
209     LIBS_SURF = surf
210     CFLAGS_SURF = -DHAVE_SURF -I$(FVBASEDIR)/extlib
211   endif
212 endif
213
214 ## check for SIFTPP-support (patent-encumbered!)
215 SIFTPP_DIR = $(FVBASEDIR)/extlib/siftpp
216 ifneq ($(wildcard $(realpath $(SIFTPP_DIR))),)
217   HAVE_SIFTPP = 1
218   LIBS_SIFTPP = siftpp
219   CFLAGS_SIFTPP = -DHAVE_SIFTPP -I$(FVBASEDIR)/extlib
220 # -DNDEBUG -DVL_LOWE_STRICT -DVL_USEFASTMATH
221 endif
222
223 # Set to 1 to build shape models
224 HAVE_SHAPE_MODELS = 1
225
226 ifneq ($(wildcard $(FVLIBDIR)/bulb_calib/bulb*),)
227   HAVE_BULB_CREATOR = 1
228   VISION_CFLAGS += -DHAVE_BULB_CREATOR
229 endif
230
231 ifneq ($(wildcard $(realpath $(FVBASEDIR)/fvutils/rectification)),)
232   HAVE_RECTINFO = 1
233   VISION_CFLAGS += -DHAVE_RECTINFO
234 endif
235
236 VISION_CFLAGS       += $(foreach CAM,$(CAMS),$(if $(subst 0,,$(HAVE_$(CAM)_CAM)),-DHAVE_$(CAM)_CAM))
237 VISION_CFLAGS       += $(foreach CTRL,$(CTRLS),$(if $(subst 0,,$(HAVE_$(CTRL)_CTRL)),-DHAVE_$(CTRL)_CTRL))
238
239 ifeq ($(MAKECMDGOALS),printconf)
240 VISION_CAM_PRINT     = $(foreach CAM,$(CAMS),$(CAM): $(if $(subst 0,,$(HAVE_$(CAM)_CAM)),"yes","no")\n)
241 VISION_CTRL_PRINT    = $(foreach CTRL,$(CTRLS),$(CTRL): $(if $(subst 0,,$(HAVE_$(CTRL)_CTRL)),"yes","no")\n)
242 VISION_LIBS_PRINT    = $(foreach DLIB,LIBJPEG LIBPNG LIBDC1394 SDL TRICLOPS_SDK IPP OPENCV SHAPE_MODELS SIFT SURF SIFTPP,$(DLIB): $(if $(subst 0,,$(HAVE_$(DLIB))),"yes","no")\n)
243 printconf:
244         $(SILENT)echo "Cameras:"
245         $(SILENT)echo -e " $(VISION_CAM_PRINT)"
246         $(SILENT)echo "Controls:"
247         $(SILENT)echo -e " $(VISION_CTRL_PRINT)"
248         $(SILENT)echo "Libs:"
249         $(SILENT)echo -e " $(VISION_LIBS_PRINT)"
250         $(SILENT)echo VISION_LIBDIRS:  $(VISION_LIBDIRS)
251         $(SILENT)echo VISION_INCDIRS:  $(VISION_INCDIRS)
252         $(SILENT)echo VISION_CAM_LIBS: $(VISION_CAM_LIBS)
253         $(SILENT)echo VISION_CFLAGS:   $(VISION_CFLAGS)
254 endif
255
256 ifneq ($(SRCDIR),)
257 all: $(ERROR_TARGETS)
258 .PHONY: error_V4L_CAM error_NAO_CAM
259 error_V4L_CAM:
260         $(SILENT)echo -e "$(INDENT_PRINT)--- $(TRED)If you enable V4L_CAM, you have to enable at least one of V4L1_CAM and V4L2_CAM$(TNORMAL)"
261         $(SILENT)exit 1
262
263 error_NAO_CAM:
264         $(SILENT)echo -e "$(INDENT_PRINT)--- $(TRED)If you enable NAO_CAM, you have to enable V4L2_CAM$(TNORMAL)"
265         $(SILENT)exit 1
266 endif
267
268 endif # __fvconf_mk_
269