- Add support of ORF P4 Irdeto mode
[oscam.git] / Makefile
blob93391ae0b063cfb646b73f224ea1dd960da89571
1 SHELL = /bin/sh
3 .SUFFIXES:
4 .SUFFIXES: .o .c
5 .PHONY: all tests help README.build README.config simple default debug config menuconfig allyesconfig allnoconfig defconfig clean distclean
7 VER := $(shell ./config.sh --oscam-version)
8 SVN_REV := $(shell ./config.sh --oscam-revision)
10 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
12 # This let's us use uname_S tests to detect cygwin
13 ifneq (,$(findstring CYGWIN,$(uname_S)))
14 uname_S := Cygwin
15 endif
17 LINKER_VER_OPT:=-Wl,--version
19 # Find OSX SDK
20 ifeq ($(uname_S),Darwin)
21 # Setting OSX_VER allows you to choose prefered version if you have
22 # two SDKs installed. For example if you have 10.6 and 10.5 installed
23 # you can choose 10.5 by using 'make USE_PCSC=1 OSX_VER=10.5'
24 # './config.sh --detect-osx-sdk-version' returns the newest SDK if
25 # SDK_VER is not set.
26 OSX_SDK := $(shell ./config.sh --detect-osx-sdk-version $(OSX_VER))
27 LINKER_VER_OPT:=-Wl,-v
28 endif
30 ifeq "$(shell ./config.sh --enabled WITH_SSL)" "Y"
31 override USE_SSL=1
32 override USE_LIBCRYPTO=1
33 endif
34 ifdef USE_SSL
35 override USE_LIBCRYPTO=1
36 endif
38 CONF_DIR = /usr/local/etc
40 LIB_PTHREAD = -lpthread
41 LIB_DL = -ldl
43 LIB_RT :=
44 ifeq ($(uname_S),Linux)
45 ifeq "$(shell ./config.sh --enabled CLOCKFIX)" "Y"
46 LIB_RT := -lrt
47 endif
48 endif
49 ifeq ($(uname_S),FreeBSD)
50 LIB_DL :=
51 endif
53 override STD_LIBS := $(LIB_PTHREAD) $(LIB_DL) $(LIB_RT)
54 override STD_DEFS := -D'CS_SVN_VERSION="$(SVN_REV)"'
55 override STD_DEFS += -D'CS_CONFDIR="$(CONF_DIR)"'
57 # Compiler warnings
58 CC_WARN = -W -Wall -Wshadow -Wredundant-decls -Wstrict-prototypes -Wold-style-definition
60 # Compiler optimizations
61 CC_OPTS = -O2 -ggdb -pipe -ffunction-sections -fdata-sections
63 CC = $(CROSS_DIR)$(CROSS)gcc
64 STRIP = $(CROSS_DIR)$(CROSS)strip
66 LDFLAGS = -Wl,--gc-sections
68 # The linker for powerpc have bug that prevents --gc-sections from working
69 # Check for the linker version and if it matches disable --gc-sections
70 # For more information about the bug see:
71 # http://cygwin.com/ml/binutils/2005-01/msg00103.html
72 # The LD output is saved into variable and then processed, because if
73 # the output is piped directly into another command LD creates 4 files
74 # in your /tmp directory and doesn't delete them.
75 LINKER_VER := $(shell set -e; VER="`$(CC) $(LINKER_VER_OPT) 2>&1`"; echo $$VER | head -1 | cut -d' ' -f5)
77 # dm500 toolchain
78 ifeq "$(LINKER_VER)" "20040727"
79 LDFLAGS :=
80 endif
81 # dm600/7000/7020 toolchain
82 ifeq "$(LINKER_VER)" "20041121"
83 LDFLAGS :=
84 endif
85 # The OS X linker do not support --gc-sections
86 ifeq ($(uname_S),Darwin)
87 LDFLAGS :=
88 endif
90 # The compiler knows for what target it compiles, so use this information
91 TARGET := $(shell $(CC) -dumpmachine 2>/dev/null)
93 # Process USE_ variables
94 DEFAULT_STAPI_LIB = -L./stapi -loscam_stapi
95 DEFAULT_STAPI5_LIB = -L./stapi -loscam_stapi5
96 DEFAULT_COOLAPI_LIB = -lnxp -lrt
97 DEFAULT_COOLAPI2_LIB = -llnxUKAL -llnxcssUsr -llnxscsUsr -llnxnotifyqUsr -llnxplatUsr -lrt
98 DEFAULT_SU980_LIB = -lentropic -lrt
99 DEFAULT_AZBOX_LIB = -Lextapi/openxcas -lOpenXCASAPI
100 DEFAULT_LIBCRYPTO_LIB = -lcrypto
101 DEFAULT_SSL_LIB = -lssl
102 ifeq ($(uname_S),Linux)
103 DEFAULT_LIBUSB_LIB = -lusb-1.0 -lrt
104 else
105 DEFAULT_LIBUSB_LIB = -lusb-1.0
106 endif
107 # Since FreeBSD 8 (released in 2010) they are using their own
108 # libusb that is API compatible to libusb but with different soname
109 ifeq ($(uname_S),FreeBSD)
110 DEFAULT_LIBUSB_LIB = -lusb
111 endif
112 ifeq ($(uname_S),Darwin)
113 DEFAULT_LIBUSB_FLAGS = -I/opt/local/include
114 DEFAULT_LIBUSB_LIB = -L/opt/local/lib -lusb-1.0
115 DEFAULT_PCSC_FLAGS = -isysroot $(OSX_SDK)
116 DEFAULT_PCSC_LIB = -isysroot $(OSX_SDK) -framework IOKit -framework CoreFoundation -framework PCSC
117 else
118 # Get the compiler's last include PATHs. Basicaly it is /usr/include
119 # but in case of cross compilation it might be something else.
121 # Since using -Iinc_path instructs the compiler to use inc_path
122 # (without add the toolchain system root) we need to have this hack
123 # to get the "real" last include path. Why we needs this?
124 # Well, the PCSC headers are broken and rely on having the directory
125 # that they are installed it to be in the include PATH.
127 # We can't just use -I/usr/include/PCSC because it won't work in
128 # case of cross compilation.
129 TOOLCHAIN_INC_DIR := $(strip $(shell echo | $(CC) -Wp,-v -xc - -fsyntax-only 2>&1 | grep include$ | tail -n 1))
130 DEFAULT_PCSC_FLAGS = -I$(TOOLCHAIN_INC_DIR)/PCSC -I$(TOOLCHAIN_INC_DIR)/../local/include/PCSC
131 DEFAULT_PCSC_LIB = -lpcsclite
132 endif
134 ifeq ($(uname_S),Cygwin)
135 DEFAULT_PCSC_LIB += -lwinscard
136 endif
138 DEFAULT_UTF8_FLAGS = -DWITH_UTF8
140 # Function to initialize USE related variables
141 # Usage: $(eval $(call prepare_use_flags,FLAG_NAME,PLUS_TARGET_TEXT))
142 define prepare_use_flags
143 override DEFAULT_$(1)_FLAGS:=$$(strip -DWITH_$(1)=1 $$(DEFAULT_$(1)_FLAGS))
144 ifdef USE_$(1)
145 $(1)_FLAGS:=$$(DEFAULT_$(1)_FLAGS)
146 $(1)_CFLAGS:=$$($(1)_FLAGS)
147 $(1)_LDFLAGS:=$$($(1)_FLAGS)
148 $(1)_LIB:=$$(DEFAULT_$(1)_LIB)
149 ifneq "$(2)" ""
150 override PLUS_TARGET:=$$(PLUS_TARGET)-$(2)
151 endif
152 override USE_CFLAGS+=$$($(1)_CFLAGS)
153 override USE_LDFLAGS+=$$($(1)_LDFLAGS)
154 override USE_LIBS+=$$($(1)_LIB)
155 override USE_FLAGS+=$$(if $$(USE_$(1)),USE_$(1))
156 endif
157 endef
159 # Initialize USE variables
160 $(eval $(call prepare_use_flags,STAPI,stapi))
161 $(eval $(call prepare_use_flags,STAPI5,stapi5))
162 $(eval $(call prepare_use_flags,COOLAPI,coolapi))
163 $(eval $(call prepare_use_flags,COOLAPI2,coolapi2))
164 $(eval $(call prepare_use_flags,SU980,su980))
165 $(eval $(call prepare_use_flags,AZBOX,azbox))
166 $(eval $(call prepare_use_flags,MCA,mca))
167 $(eval $(call prepare_use_flags,SSL,ssl))
168 $(eval $(call prepare_use_flags,LIBCRYPTO,))
169 $(eval $(call prepare_use_flags,LIBUSB,libusb))
170 $(eval $(call prepare_use_flags,PCSC,pcsc))
171 $(eval $(call prepare_use_flags,UTF8))
173 # Add PLUS_TARGET and EXTRA_TARGET to TARGET
174 ifdef NO_PLUS_TARGET
175 override TARGET := $(TARGET)$(EXTRA_TARGET)
176 else
177 override TARGET := $(TARGET)$(PLUS_TARGET)$(EXTRA_TARGET)
178 endif
180 EXTRA_CFLAGS = $(EXTRA_FLAGS)
181 EXTRA_LDFLAGS = $(EXTRA_FLAGS)
183 # Add USE_xxx, EXTRA_xxx and STD_xxx vars
184 override CC_WARN += $(EXTRA_CC_WARN)
185 override CC_OPTS += $(EXTRA_CC_OPTS)
186 override CFLAGS += $(USE_CFLAGS) $(EXTRA_CFLAGS)
187 override LDFLAGS += $(USE_LDFLAGS) $(EXTRA_LDFLAGS)
188 override LIBS += $(USE_LIBS) $(EXTRA_LIBS) $(STD_LIBS)
190 override STD_DEFS += -D'CS_TARGET="$(TARGET)"'
192 # Setup quiet build
194 SAY = @true
195 ifndef V
196 Q = @
197 NP = --no-print-directory
198 SAY = @echo
199 endif
201 BINDIR := Distribution
202 override BUILD_DIR := build
203 OBJDIR := $(BUILD_DIR)/$(TARGET)
205 # Include config.mak which contains variables for all enabled modules
206 # These variables will be used to select only needed files for compilation
207 -include $(OBJDIR)/config.mak
209 OSCAM_BIN := $(BINDIR)/oscam-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
210 TESTS_BIN := tests.bin
211 LIST_SMARGO_BIN := $(BINDIR)/list_smargo-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
213 # Build list_smargo-.... only when WITH_LIBUSB build is requested.
214 ifndef USE_LIBUSB
215 override LIST_SMARGO_BIN =
216 endif
218 SRC-$(CONFIG_LIB_AES) += cscrypt/aes.c
219 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_add.c
220 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_asm.c
221 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_ctx.c
222 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_div.c
223 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_exp.c
224 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_lib.c
225 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_mul.c
226 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_print.c
227 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_shift.c
228 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_sqr.c
229 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_word.c
230 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/mem.c
231 SRC-$(CONFIG_LIB_DES) += cscrypt/des.c
232 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_cbc.c
233 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_ecb.c
234 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_skey.c
235 SRC-y += cscrypt/md5.c
236 SRC-$(CONFIG_LIB_RC6) += cscrypt/rc6.c
237 SRC-$(CONFIG_LIB_SHA1) += cscrypt/sha1.c
239 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/atr.c
240 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/icc_async.c
241 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/io_serial.c
242 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t0.c
243 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t1.c
244 SRC-$(CONFIG_CARDREADER_INTERNAL_AZBOX) += csctapi/ifd_azbox.c
245 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI) += csctapi/ifd_cool.c
246 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI2) += csctapi/ifd_cool.c
247 SRC-$(CONFIG_CARDREADER_DB2COM) += csctapi/ifd_db2com.c
248 SRC-$(CONFIG_CARDREADER_MP35) += csctapi/ifd_mp35.c
249 SRC-$(CONFIG_CARDREADER_PCSC) += csctapi/ifd_pcsc.c
250 SRC-$(CONFIG_CARDREADER_PHOENIX) += csctapi/ifd_phoenix.c
251 SRC-$(CONFIG_CARDREADER_DRECAS) += csctapi/ifd_drecas.c
252 SRC-$(CONFIG_CARDREADER_SC8IN1) += csctapi/ifd_sc8in1.c
253 SRC-$(CONFIG_CARDREADER_INTERNAL_SCI) += csctapi/ifd_sci.c
254 SRC-$(CONFIG_CARDREADER_SMARGO) += csctapi/ifd_smargo.c
255 SRC-$(CONFIG_CARDREADER_SMART) += csctapi/ifd_smartreader.c
256 SRC-$(CONFIG_CARDREADER_STINGER) += csctapi/ifd_stinger.c
257 SRC-$(CONFIG_CARDREADER_STAPI) += csctapi/ifd_stapi.c
258 SRC-$(CONFIG_CARDREADER_STAPI5) += csctapi/ifd_stapi.c
260 SRC-$(CONFIG_LIB_MINILZO) += minilzo/minilzo.c
262 SRC-$(CONFIG_CS_ANTICASC) += module-anticasc.c
263 SRC-$(CONFIG_CS_CACHEEX) += module-cacheex.c
264 SRC-$(CONFIG_MODULE_CAMD33) += module-camd33.c
265 SRC-$(CONFIG_CS_CACHEEX) += module-camd35-cacheex.c
266 SRC-$(sort $(CONFIG_MODULE_CAMD35) $(CONFIG_MODULE_CAMD35_TCP)) += module-camd35.c
267 SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
268 SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
269 SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
270 SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
271 SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
272 SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
273 SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
274 SRC-$(CONFIG_WITH_MCA) += module-dvbapi-mca.c
275 SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi.c
276 SRC-$(CONFIG_WITH_COOLAPI2) += module-dvbapi-coolapi.c
277 SRC-$(CONFIG_WITH_SU980) += module-dvbapi-coolapi.c
278 SRC-$(CONFIG_WITH_STAPI) += module-dvbapi-stapi.c
279 SRC-$(CONFIG_WITH_STAPI5) += module-dvbapi-stapi5.c
280 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi-chancache.c
281 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi.c
282 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-helper.c
283 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-sms.c
284 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-cards.c
285 SRC-$(CONFIG_MODULE_GBOX) += module-gbox.c
286 SRC-$(CONFIG_IRDETO_GUESSING) += module-ird-guess.c
287 SRC-$(CONFIG_LCDSUPPORT) += module-lcd.c
288 SRC-$(CONFIG_LEDSUPPORT) += module-led.c
289 SRC-$(CONFIG_MODULE_MONITOR) += module-monitor.c
290 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd.c
291 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd-des.c
292 SRC-$(CONFIG_MODULE_PANDORA) += module-pandora.c
293 SRC-$(CONFIG_MODULE_GHTTP) += module-ghttp.c
294 SRC-$(CONFIG_MODULE_RADEGAST) += module-radegast.c
295 SRC-$(CONFIG_MODULE_SCAM) += module-scam.c
296 SRC-$(CONFIG_MODULE_SERIAL) += module-serial.c
297 SRC-$(CONFIG_WITH_LB) += module-stat.c
298 SRC-$(CONFIG_WEBIF) += module-webif-lib.c
299 SRC-$(CONFIG_WEBIF) += module-webif-tpl.c
300 SRC-$(CONFIG_WEBIF) += module-webif.c
301 SRC-$(CONFIG_WEBIF) += webif/pages.c
302 SRC-$(CONFIG_WITH_CARDREADER) += reader-common.c
303 SRC-$(CONFIG_READER_BULCRYPT) += reader-bulcrypt.c
304 SRC-$(CONFIG_READER_CONAX) += reader-conax.c
305 SRC-$(CONFIG_READER_CRYPTOWORKS) += reader-cryptoworks.c
306 SRC-$(CONFIG_READER_DGCRYPT) += reader-dgcrypt.c
307 SRC-$(CONFIG_READER_DRE) += reader-dre.c
308 SRC-$(CONFIG_READER_DRE) += reader-dre-cas.c
309 SRC-$(CONFIG_READER_DRE) += reader-dre-common.c
310 SRC-$(CONFIG_READER_DRE) += reader-dre-st20.c
311 SRC-$(CONFIG_READER_GRIFFIN) += reader-griffin.c
312 SRC-$(CONFIG_READER_IRDETO) += reader-irdeto.c
313 SRC-$(CONFIG_READER_NAGRA) += reader-nagra.c
314 SRC-$(CONFIG_READER_SECA) += reader-seca.c
315 SRC-$(CONFIG_READER_TONGFANG) += reader-tongfang.c
316 SRC-$(CONFIG_READER_VIACCESS) += reader-viaccess.c
317 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard-common.c
318 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard1.c
319 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard12.c
320 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard2.c
321 SRC-y += oscam-aes.c
322 SRC-y += oscam-array.c
323 SRC-y += oscam-hashtable.c
324 SRC-y += oscam-cache.c
325 SRC-y += oscam-chk.c
326 SRC-y += oscam-client.c
327 SRC-y += oscam-conf.c
328 SRC-y += oscam-conf-chk.c
329 SRC-y += oscam-conf-mk.c
330 SRC-y += oscam-config-account.c
331 SRC-y += oscam-config-global.c
332 SRC-y += oscam-config-reader.c
333 SRC-y += oscam-config.c
334 SRC-y += oscam-ecm.c
335 SRC-y += oscam-emm.c
336 SRC-y += oscam-emm-cache.c
337 SRC-y += oscam-failban.c
338 SRC-y += oscam-files.c
339 SRC-y += oscam-garbage.c
340 SRC-y += oscam-lock.c
341 SRC-y += oscam-log.c
342 SRC-y += oscam-log-reader.c
343 SRC-y += oscam-net.c
344 SRC-y += oscam-llist.c
345 SRC-y += oscam-reader.c
346 SRC-y += oscam-simples.c
347 SRC-y += oscam-string.c
348 SRC-y += oscam-time.c
349 SRC-y += oscam-work.c
350 SRC-y += oscam.c
351 # config.c is automatically generated by config.sh in OBJDIR
352 SRC-y += config.c
353 ifdef BUILD_TESTS
354 SRC-y += tests.c
355 override STD_DEFS += -DBUILD_TESTS=1
356 endif
358 SRC := $(SRC-y)
359 OBJ := $(addprefix $(OBJDIR)/,$(subst .c,.o,$(SRC)))
360 SRC := $(subst config.c,$(OBJDIR)/config.c,$(SRC))
362 # The default build target rebuilds the config.mak if needed and then
363 # starts the compilation.
364 all:
365 @./config.sh --use-flags "$(USE_FLAGS)" --objdir "$(OBJDIR)" --make-config.mak
366 @-mkdir -p $(OBJDIR)/cscrypt $(OBJDIR)/csctapi $(OBJDIR)/minilzo $(OBJDIR)/webif
367 @-printf "\
368 +-------------------------------------------------------------------------------\n\
369 | OSCam ver: $(VER) rev: $(SVN_REV) target: $(TARGET)\n\
370 | Tools:\n\
371 | CROSS = $(CROSS_DIR)$(CROSS)\n\
372 | CC = $(CC)\n\
373 | Settings:\n\
374 | CONF_DIR = $(CONF_DIR)\n\
375 | CC_OPTS = $(strip $(CC_OPTS))\n\
376 | CC_WARN = $(strip $(CC_WARN))\n\
377 | CFLAGS = $(strip $(CFLAGS))\n\
378 | LDFLAGS = $(strip $(LDFLAGS))\n\
379 | LIBS = $(strip $(LIBS))\n\
380 | UseFlags = $(addsuffix =1,$(USE_FLAGS))\n\
381 | Config:\n\
382 | Addons : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled addons)\n\
383 | Protocols: $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled protocols | sed -e 's|MODULE_||g')\n\
384 | Readers : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled readers | sed -e 's|READER_||g')\n\
385 | CardRdrs : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled card_readers | sed -e 's|CARDREADER_||g')\n\
386 | Compiler : $(shell $(CC) --version 2>/dev/null | head -n 1)\n\
387 | Config : $(OBJDIR)/config.mak\n\
388 | Binary : $(OSCAM_BIN)\n\
389 +-------------------------------------------------------------------------------\n"
390 ifeq "$(shell ./config.sh --enabled WEBIF)" "Y"
391 @$(MAKE) --no-print-directory --quiet -C webif
392 endif
393 @$(MAKE) --no-print-directory $(OSCAM_BIN) $(LIST_SMARGO_BIN)
395 $(OSCAM_BIN).debug: $(OBJ)
396 $(SAY) "LINK $@"
397 $(Q)$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@
399 $(OSCAM_BIN): $(OSCAM_BIN).debug
400 $(SAY) "STRIP $@"
401 $(Q)cp $(OSCAM_BIN).debug $(OSCAM_BIN)
402 $(Q)$(STRIP) $(OSCAM_BIN)
404 $(LIST_SMARGO_BIN): utils/list_smargo.c
405 $(SAY) "BUILD $@"
406 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) $(LDFLAGS) utils/list_smargo.c $(LIBS) -o $@
408 $(OBJDIR)/config.o: $(OBJDIR)/config.c
409 $(SAY) "CONF $<"
410 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
412 $(OBJDIR)/%.o: %.c Makefile
413 @$(CC) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
414 $(SAY) "CC $<"
415 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
417 -include $(subst .o,.d,$(OBJ))
419 tests:
420 @-$(MAKE) --no-print-directory BUILD_TESTS=1 OSCAM_BIN=$(TESTS_BIN)
421 @-touch oscam.c
422 # The above is really hideous hack :-) If we don't force oscam.c recompilation
423 # after we've build the tests binary, the next "normal" compilation would fail
424 # because there would be no run_tests() function. So the touch is there to
425 # ensure oscam.c would be recompiled.
427 config:
428 $(SHELL) ./config.sh --gui
430 menuconfig: config
432 allyesconfig:
433 @echo "Enabling all config options."
434 @-$(SHELL) ./config.sh --enable all
436 allnoconfig:
437 @echo "Disabling all config options."
438 @-$(SHELL) ./config.sh --disable all
440 defconfig:
441 @echo "Restoring default config."
442 @-$(SHELL) ./config.sh --restore
444 clean:
445 @-for FILE in $(BUILD_DIR)/* $(TESTS_BIN) $(TESTS_BIN).debug; do \
446 echo "RM $$FILE"; \
447 rm -rf $$FILE; \
448 done
449 @-rm -rf $(BUILD_DIR) lib
451 distclean: clean
452 @-for FILE in $(BINDIR)/list_smargo-* $(BINDIR)/oscam-$(VER)*; do \
453 echo "RM $$FILE"; \
454 rm -rf $$FILE; \
455 done
456 @-$(MAKE) --no-print-directory --quiet -C webif clean
458 README.build:
459 @echo "Extracting 'make help' into $@ file."
460 @-printf "\
461 ** This file is generated from 'make help' output, do not edit it. **\n\
463 " > $@
464 @-$(MAKE) --no-print-directory help >> $@
465 @echo "Done."
467 README.config:
468 @echo "Extracting 'config.sh --help' into $@ file."
469 @-printf "\
470 ** This file is generated from 'config.sh --help' output, do not edit it. **\n\
472 " > $@
473 @-./config.sh --help >> $@
474 @echo "Done."
476 help:
477 @-printf "\
478 OSCam build system documentation\n\
479 ================================\n\
481 Build variables:\n\
482 The build variables are set on the make command line and control the build\n\
483 process. Setting the variables lets you enable additional features, request\n\
484 extra libraries and more. Currently recognized build variables are:\n\
486 CROSS=prefix - Set tools prefix. This variable is used when OScam is being\n\
487 cross compiled. For example if you want to cross compile\n\
488 for SH4 architecture you can run: 'make CROSS=sh4-linux-'\n\
489 If you don't have the directory where cross compilers are\n\
490 in your PATH you can run:\n\
491 'make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-'\n\
493 CROSS_DIR=dir - Set tools directory. This variable is added in front of\n\
494 CROSS variable. CROSS_DIR is useful if you want to use\n\
495 predefined targets that are setting CROSS, but you don't have\n\
496 the cross compilers in your PATH. For example:\n\
497 'make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/'\n\
498 'make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/'\n\
500 CONF_DIR=/dir - Set OSCam config directory. For example to change config\n\
501 directory to /etc run: 'make CONF_DIR=/etc'\n\
502 The default config directory is: '$(CONF_DIR)'\n\
504 CC_OPTS=text - This variable holds compiler optimization parameters.\n\
505 Default CC_OPTS value is:\n\
506 '$(CC_OPTS)'\n\
507 To add text to this variable set EXTRA_CC_OPTS=text.\n\
509 CC_WARN=text - This variable holds compiler warning parameters.\n\
510 Default CC_WARN value is:\n\
511 '$(CC_WARN)'\n\
512 To add text to this variable set EXTRA_CC_WARN=text.\n\
514 V=1 - Request build process to print verbose messages. By\n\
515 default the only messages that are shown are simple info\n\
516 what is being compiled. To request verbose build run:\n\
517 'make V=1'\n\
519 Extra build variables:\n\
520 These variables add text to build variables. They are useful if you want\n\
521 to add additional options to already set variables without overwriting them\n\
522 Currently defined EXTRA_xxx variables are:\n\
524 EXTRA_CC_OPTS - Add text to CC_OPTS.\n\
525 Example: 'make EXTRA_CC_OPTS=-Os'\n\
527 EXTRA_CC_WARN - Add text to CC_WARN.\n\
528 Example: 'make EXTRA_CC_WARN=-Wshadow'\n\
530 EXTRA_TARGET - Add text to TARGET.\n\
531 Example: 'make EXTRA_TARGET=-private'\n\
533 EXTRA_CFLAGS - Add text to CFLAGS (affects compilation).\n\
534 Example: 'make EXTRA_CFLAGS=\"-DBLAH=1 -I/opt/local\"'\n\
536 EXTRA_LDFLAGS - Add text to LDFLAGS (affects linking).\n\
537 Example: 'make EXTRA_LDFLAGS=-Llibdir'\n\
539 EXTRA_FLAGS - Add text to both EXTRA_CFLAGS and EXTRA_LDFLAGS.\n\
540 Example: 'make EXTRA_FLAGS=-DBLAH=1'\n\
542 EXTRA_LIBS - Add text to LIBS (affects linking).\n\
543 Example: 'make EXTRA_LIBS=\"-L./stapi -loscam_stapi\"'\n\
545 Use flags:\n\
546 Use flags are used to request additional libraries or features to be used\n\
547 by OSCam. Currently defined USE_xxx flags are:\n\
549 USE_LIBUSB=1 - Request linking with libusb. The variables that control\n\
550 USE_LIBUSB=1 build are:\n\
551 LIBUSB_FLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
552 LIBUSB_CFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
553 LIBUSB_LDFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
554 LIBUSB_LIB='$(DEFAULT_LIBUSB_LIB)'\n\
555 Using USE_LIBUSB=1 adds to '-libusb' to PLUS_TARGET.\n\
556 To build with static libusb, set the variable LIBUSB_LIB\n\
557 to contain full path of libusb library. For example:\n\
558 make USE_LIBUSB=1 LIBUSB_LIB=/usr/lib/libusb-1.0.a\n\
560 USE_PCSC=1 - Request linking with PCSC. The variables that control\n\
561 USE_PCSC=1 build are:\n\
562 PCSC_FLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
563 PCSC_CFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
564 PCSC_LDFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
565 PCSC_LIB='$(DEFAULT_PCSC_LIB)'\n\
566 Using USE_PCSC=1 adds to '-pcsc' to PLUS_TARGET.\n\
567 To build with static PCSC, set the variable PCSC_LIB\n\
568 to contain full path of PCSC library. For example:\n\
569 make USE_PCSC=1 PCSC_LIB=/usr/local/lib/libpcsclite.a\n\
571 USE_STAPI=1 - Request linking with STAPI. The variables that control\n\
572 USE_STAPI=1 build are:\n\
573 STAPI_FLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
574 STAPI_CFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
575 STAPI_LDFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
576 STAPI_LIB='$(DEFAULT_STAPI_LIB)'\n\
577 Using USE_STAPI=1 adds to '-stapi' to PLUS_TARGET.\n\
578 In order for USE_STAPI to work you have to create stapi\n\
579 directory and put liboscam_stapi.a file in it.\n\
581 USE_STAPI5=1 - Request linking with STAPI5. The variables that control\n\
582 USE_STAPI5=1 build are:\n\
583 STAPI5_FLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
584 STAPI5_CFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
585 STAPI5_LDFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
586 STAPI5_LIB='$(DEFAULT_STAPI5_LIB)'\n\
587 Using USE_STAPI5=1 adds to '-stapi' to PLUS_TARGET.\n\
588 In order for USE_STAPI5 to work you have to create stapi\n\
589 directory and put liboscam_stapi5.a file in it.\n\
591 USE_COOLAPI=1 - Request support for Coolstream API (libnxp) aka NeutrinoHD\n\
592 box. The variables that control the build are:\n\
593 COOLAPI_FLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
594 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
595 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
596 COOLAPI_LIB='$(DEFAULT_COOLAPI_LIB)'\n\
597 Using USE_COOLAPI=1 adds to '-coolapi' to PLUS_TARGET.\n\
598 In order for USE_COOLAPI to work you have to have libnxp.so\n\
599 library in your cross compilation toolchain.\n\
601 USE_COOLAPI2=1 - Request support for Coolstream API aka NeutrinoHD\n\
602 box. The variables that control the build are:\n\
603 COOLAPI_FLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
604 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
605 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
606 COOLAPI_LIB='$(DEFAULT_COOLAPI2_LIB)'\n\
607 Using USE_COOLAPI2=1 adds to '-coolapi2' to PLUS_TARGET.\n\
608 In order for USE_COOLAPI2 to work you have to have liblnxUKAL.so,\n\
609 liblnxcssUsr.so, liblnxscsUsr.so, liblnxnotifyqUsr.so, liblnxplatUsr.so\n\
610 library in your cross compilation toolchain.\n\
612 USE_SU980=1 - Request support for SU980 API (libentropic) aka Enimga2 arm\n\
613 box. The variables that control the build are:\n\
614 COOLAPI_FLAGS='$(DEFAULT_SU980_FLAGS)'\n\
615 COOLAPI_CFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
616 COOLAPI_LDFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
617 COOLAPI_LIB='$(DEFAULT_SU980_LIB)'\n\
618 Using USE_SU980=1 adds to '-su980' to PLUS_TARGET.\n\
619 In order for USE_SU980 to work you have to have libentropic.a\n\
620 library in your cross compilation toolchain.\n\
622 USE_AZBOX=1 - Request support for AZBOX (openxcas)\n\
623 box. The variables that control the build are:\n\
624 AZBOX_FLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
625 AZBOX_CFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
626 AZBOX_LDFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
627 AZBOX_LIB='$(DEFAULT_AZBOX_LIB)'\n\
628 Using USE_AZBOX=1 adds to '-azbox' to PLUS_TARGET.\n\
629 extapi/openxcas/libOpenXCASAPI.a library that is shipped\n\
630 with OSCam is compiled for MIPSEL.\n\
632 USE_MCA=1 - Request support for Matrix Cam Air (MCA).\n\
633 The variables that control the build are:\n\
634 MCA_FLAGS='$(DEFAULT_MCA_FLAGS)'\n\
635 MCA_CFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
636 MCA_LDFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
637 Using USE_MCA=1 adds to '-mca' to PLUS_TARGET.\n\
639 USE_LIBCRYPTO=1 - Request linking with libcrypto instead of using OSCam\n\
640 internal crypto functions. USE_LIBCRYPTO is automatically\n\
641 enabled if the build is configured with SSL support. The\n\
642 variables that control USE_LIBCRYPTO=1 build are:\n\
643 LIBCRYPTO_FLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
644 LIBCRYPTO_CFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
645 LIBCRYPTO_LDFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
646 LIBCRYPTO_LIB='$(DEFAULT_LIBCRYPTO_LIB)'\n\
648 USE_SSL=1 - Request linking with libssl. USE_SSL is automatically\n\
649 enabled if the build is configured with SSL support. The\n\
650 variables that control USE_SSL=1 build are:\n\
651 SSL_FLAGS='$(DEFAULT_SSL_FLAGS)'\n\
652 SSL_CFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
653 SSL_LDFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
654 SSL_LIB='$(DEFAULT_SSL_LIB)'\n\
655 Using USE_SSL=1 adds to '-ssl' to PLUS_TARGET.\n\
657 USE_UTF8=1 - Request UTF-8 enabled webif by default.\n\
659 Automatically intialized variables:\n\
661 TARGET=text - This variable is auto detected by using the compiler's\n\
662 -dumpmachine output. To see the target on your machine run:\n\
663 'gcc -dumpmachine'\n\
665 PLUS_TARGET - This variable is added to TARGET and it is set depending\n\
666 on the chosen USE_xxx flags. To disable adding\n\
667 PLUS_TARGET to TARGET, set NO_PLUS_TARGET=1\n\
669 BINDIR - The directory where final oscam binary would be put. The\n\
670 default is: $(BINDIR)\n\
672 OSCAM_BIN=text - This variable controls how the oscam binary will be named.\n\
673 Default OSCAM_BIN value is:\n\
674 'BINDIR/oscam-VERSVN_REV-TARGET'\n\
675 Once the variables (BINDIR, VER, SVN_REV and TARGET) are\n\
676 replaced, the resulting filename can look like this:\n\
677 'Distribution/oscam-1.20-unstable_svn7404-i486-slackware-linux-static'\n\
678 For example you can run: 'make OSCAM_BIN=my-oscam'\n\
680 Binaries compiled and run during the OSCam build:\n\
682 OSCam builds webif/pages_gen binary that is run by the build system to\n\
683 generate file that holds web pages. To build this binary two variables\n\
684 are used:\n\
686 HOSTCC=gcc - The compiler used for building binaries that are run on\n\
687 the build machine (the host). Default: gcc\n\
688 To use clang for example run: make CC=clang HOSTCC=clang\n\
690 HOSTCFLAGS=xxx - The CFLAGS passed to HOSTCC. See webif/Makefile for the\n\
691 default host cflags.\n\
693 Config targets:\n\
694 make config - Start configuration utility.\n\
695 make allyesconfig - Enable all configuration options.\n\
696 make allnoconfig - Disable all configuration options.\n\
697 make defconfig - Restore default configuration options.\n\
699 Cleaning targets:\n\
700 make clean - Remove '$(BUILD_DIR)' directory which contains compiled\n\
701 object files.\n\
702 make distclean - Executes clean target and also removes binary files\n\
703 located in '$(BINDIR)' directory.\n\
705 Build system files:\n\
706 config.sh - OSCam configuration. Run 'config.sh --help' to see\n\
707 available parameters or 'make config' to start GUI\n\
708 configuratior.\n\
709 Makefile - Main build system file.\n\
710 Makefile.extra - Contains predefined targets. You can use this file\n\
711 as example on how to use the build system.\n\
712 Makefile.local - This file is included in Makefile and allows creation\n\
713 of local build system targets. See Makefile.extra for\n\
714 examples.\n\
716 Here are some of the interesting predefined targets in Makefile.extra.\n\
717 To use them run 'make target ...' where ... can be any extra flag. For\n\
718 example if you want to compile OSCam for Dreambox (DM500) but do not\n\
719 have the compilers in the path, you can run:\n\
720 make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/\n\
722 Predefined targets in Makefile.extra:\n\
724 make libusb - Builds OSCam with libusb support\n\
725 make pcsc - Builds OSCam with PCSC support\n\
726 make pcsc-libusb - Builds OSCam with PCSC and libusb support\n\
727 make dm500 - Builds OSCam for Dreambox (DM500)\n\
728 make sh4 - Builds OSCam for SH4 boxes\n\
729 make azbox - Builds OSCam for AZBox STBs\n\
730 make mca - Builds OSCam for Matrix Cam Air (MCA)\n\
731 make coolstream - Builds OSCam for Coolstream HD1\n\
732 make coolstream2 - Builds OSCam for Coolstream HD2\n\
733 make dockstar - Builds OSCam for Dockstar\n\
734 make qboxhd - Builds OSCam for QBoxHD STBs\n\
735 make opensolaris - Builds OSCam for OpenSolaris\n\
736 make uclinux - Builds OSCam for m68k uClinux\n\
738 Predefined targets for static builds:\n\
739 make static - Builds OSCam statically\n\
740 make static-libusb - Builds OSCam with libusb linked statically\n\
741 make static-libcrypto - Builds OSCam with libcrypto linked statically\n\
742 make static-ssl - Builds OSCam with SSL support linked statically\n\
744 Developer targets:\n\
745 make tests - Builds '$(TESTS_BIN)' binary\n\
747 Examples:\n\
748 Build OSCam for SH4 (the compilers are in the path):\n\
749 make CROSS=sh4-linux-\n\n\
750 Build OSCam for SH4 (the compilers are in not in the path):\n\
751 make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/\n\
752 make CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/ CROSS=sh4-linux-\n\
753 make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-\n\n\
754 Build OSCam for SH4 with STAPI:\n\
755 make CROSS=sh4-linux- USE_STAPI=1\n\n\
756 Build OSCam for SH4 with STAPI and changed configuration directory:\n\
757 make CROSS=sh4-linux- USE_STAPI=1 CONF_DIR=/var/tuxbox/config\n\n\
758 Build OSCam for ARM with COOLAPI (coolstream aka NeutrinoHD):\n\
759 make CROSS=arm-cx2450x-linux-gnueabi- USE_COOLAPI=1\n\n\
760 Build OSCam for ARM with COOLAPI2 (coolstream aka NeutrinoHD):\n\
761 make CROSS=arm-pnx8400-linux-uclibcgnueabi- USE_COOLAPI2=1\n\n\
762 Build OSCam for MIPSEL with AZBOX support:\n\
763 make CROSS=mipsel-linux-uclibc- USE_AZBOX=1\n\n\
764 Build OSCam for ARM with MCA support:\n\
765 make CROSS=arm-none-linux-gnueabi- USE_MCA=1\n\n\
766 Build OSCam with libusb and PCSC:\n\
767 make USE_LIBUSB=1 USE_PCSC=1\n\n\
768 Build OSCam with static libusb:\n\
769 make USE_LIBUSB=1 LIBUSB_LIB=\"/usr/lib/libusb-1.0.a\"\n\n\
770 Build OSCam with static libcrypto:\n\
771 make USE_LIBCRYPTO=1 LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
772 Build OSCam with static libssl and libcrypto:\n\
773 make USE_SSL=1 SSL_LIB=\"/usr/lib/libssl.a\" LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
774 Build with verbose messages and size optimizations:\n\
775 make V=1 CC_OPTS=-Os\n\n\
776 Build and set oscam file name:\n\
777 make OSCAM_BIN=oscam\n\n\
778 Build and set oscam file name depending on revision:\n\
779 make OSCAM_BIN=oscam-\`./config.sh -r\`\n\n\
782 simple: all
783 default: all
784 debug: all
786 -include Makefile.extra
787 -include Makefile.local