[gbx] - try fix ecm and cw messages
[oscam.git] / Makefile
bloba7cbcb6386a09fa1a4ae2b1166e4a96ea90f614a
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 := -lm $(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
238 SRC-$(CONFIG_LIB_MDC2) += cscrypt/mdc2.c
239 SRC-$(CONFIG_LIB_FAST_AES) += cscrypt/fast_aes.c
240 SRC-$(CONFIG_LIB_SHA256) += cscrypt/sha256.c
242 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/atr.c
243 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/icc_async.c
244 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/io_serial.c
245 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t0.c
246 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t1.c
247 SRC-$(CONFIG_CARDREADER_INTERNAL_AZBOX) += csctapi/ifd_azbox.c
248 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI) += csctapi/ifd_cool.c
249 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI2) += csctapi/ifd_cool.c
250 SRC-$(CONFIG_CARDREADER_DB2COM) += csctapi/ifd_db2com.c
251 SRC-$(CONFIG_CARDREADER_MP35) += csctapi/ifd_mp35.c
252 SRC-$(CONFIG_CARDREADER_PCSC) += csctapi/ifd_pcsc.c
253 SRC-$(CONFIG_CARDREADER_PHOENIX) += csctapi/ifd_phoenix.c
254 SRC-$(CONFIG_CARDREADER_DRECAS) += csctapi/ifd_drecas.c
255 SRC-$(CONFIG_CARDREADER_SC8IN1) += csctapi/ifd_sc8in1.c
256 SRC-$(CONFIG_CARDREADER_INTERNAL_SCI) += csctapi/ifd_sci.c
257 SRC-$(CONFIG_CARDREADER_SMARGO) += csctapi/ifd_smargo.c
258 SRC-$(CONFIG_CARDREADER_SMART) += csctapi/ifd_smartreader.c
259 SRC-$(CONFIG_CARDREADER_STINGER) += csctapi/ifd_stinger.c
260 SRC-$(CONFIG_CARDREADER_STAPI) += csctapi/ifd_stapi.c
261 SRC-$(CONFIG_CARDREADER_STAPI5) += csctapi/ifd_stapi.c
263 SRC-$(CONFIG_LIB_MINILZO) += minilzo/minilzo.c
265 SRC-$(CONFIG_CS_ANTICASC) += module-anticasc.c
266 SRC-$(CONFIG_CS_CACHEEX) += module-cacheex.c
267 SRC-$(CONFIG_MODULE_CAMD33) += module-camd33.c
268 SRC-$(CONFIG_CS_CACHEEX) += module-camd35-cacheex.c
269 SRC-$(sort $(CONFIG_MODULE_CAMD35) $(CONFIG_MODULE_CAMD35_TCP)) += module-camd35.c
270 SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
271 SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
272 SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
273 SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
274 SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
275 SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
276 SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
277 SRC-$(CONFIG_WITH_MCA) += module-dvbapi-mca.c
278 ### SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi.c
279 ### experimental reversed API
280 SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi-legacy.c
281 SRC-$(CONFIG_WITH_COOLAPI2) += module-dvbapi-coolapi.c
282 SRC-$(CONFIG_WITH_SU980) += module-dvbapi-coolapi.c
283 SRC-$(CONFIG_WITH_STAPI) += module-dvbapi-stapi.c
284 SRC-$(CONFIG_WITH_STAPI5) += module-dvbapi-stapi5.c
285 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi-chancache.c
286 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi.c
287 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-helper.c
288 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-sms.c
289 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-remm.c
290 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-cards.c
291 SRC-$(CONFIG_MODULE_GBOX) += module-gbox.c
292 SRC-$(CONFIG_IRDETO_GUESSING) += module-ird-guess.c
293 SRC-$(CONFIG_LCDSUPPORT) += module-lcd.c
294 SRC-$(CONFIG_LEDSUPPORT) += module-led.c
295 SRC-$(CONFIG_MODULE_MONITOR) += module-monitor.c
296 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd.c
297 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd-des.c
298 SRC-$(CONFIG_MODULE_PANDORA) += module-pandora.c
299 SRC-$(CONFIG_MODULE_GHTTP) += module-ghttp.c
300 SRC-$(CONFIG_MODULE_RADEGAST) += module-radegast.c
301 SRC-$(CONFIG_MODULE_SCAM) += module-scam.c
302 SRC-$(CONFIG_MODULE_SERIAL) += module-serial.c
303 SRC-$(CONFIG_WITH_LB) += module-stat.c
304 SRC-$(CONFIG_WEBIF) += module-webif-lib.c
305 SRC-$(CONFIG_WEBIF) += module-webif-tpl.c
306 SRC-$(CONFIG_WEBIF) += module-webif.c
307 SRC-$(CONFIG_WEBIF) += webif/pages.c
308 SRC-$(CONFIG_WITH_CARDREADER) += reader-common.c
309 SRC-$(CONFIG_READER_BULCRYPT) += reader-bulcrypt.c
310 SRC-$(CONFIG_READER_CONAX) += reader-conax.c
311 SRC-$(CONFIG_READER_CRYPTOWORKS) += reader-cryptoworks.c
312 SRC-$(CONFIG_READER_DGCRYPT) += reader-dgcrypt.c
313 SRC-$(CONFIG_READER_DRE) += reader-dre.c
314 SRC-$(CONFIG_READER_DRE) += reader-dre-cas.c
315 SRC-$(CONFIG_READER_DRE) += reader-dre-common.c
316 SRC-$(CONFIG_READER_DRE) += reader-dre-st20.c
317 SRC-$(CONFIG_READER_GRIFFIN) += reader-griffin.c
318 SRC-$(CONFIG_READER_IRDETO) += reader-irdeto.c
319 SRC-$(CONFIG_READER_NAGRA_COMMON) += reader-nagra-common.c
320 SRC-$(CONFIG_READER_NAGRA) += reader-nagra.c
321 SRC-$(CONFIG_READER_NAGRA_MERLIN) += reader-nagracak7.c
322 SRC-$(CONFIG_READER_SECA) += reader-seca.c
323 SRC-$(CONFIG_READER_TONGFANG) += reader-tongfang.c
324 SRC-$(CONFIG_READER_VIACCESS) += reader-viaccess.c
325 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard-common.c
326 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard1.c
327 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard12.c
328 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard2.c
329 SRC-y += oscam-aes.c
330 SRC-y += oscam-array.c
331 SRC-y += oscam-hashtable.c
332 SRC-y += oscam-cache.c
333 SRC-y += oscam-chk.c
334 SRC-y += oscam-client.c
335 SRC-y += oscam-conf.c
336 SRC-y += oscam-conf-chk.c
337 SRC-y += oscam-conf-mk.c
338 SRC-y += oscam-config-account.c
339 SRC-y += oscam-config-global.c
340 SRC-y += oscam-config-reader.c
341 SRC-y += oscam-config.c
342 SRC-y += oscam-ecm.c
343 SRC-y += oscam-emm.c
344 SRC-y += oscam-emm-cache.c
345 SRC-y += oscam-failban.c
346 SRC-y += oscam-files.c
347 SRC-y += oscam-garbage.c
348 SRC-y += oscam-lock.c
349 SRC-y += oscam-log.c
350 SRC-y += oscam-log-reader.c
351 SRC-y += oscam-net.c
352 SRC-y += oscam-llist.c
353 SRC-y += oscam-reader.c
354 SRC-y += oscam-simples.c
355 SRC-y += oscam-string.c
356 SRC-y += oscam-time.c
357 SRC-y += oscam-work.c
358 SRC-y += oscam.c
359 # config.c is automatically generated by config.sh in OBJDIR
360 SRC-y += config.c
361 ifdef BUILD_TESTS
362 SRC-y += tests.c
363 override STD_DEFS += -DBUILD_TESTS=1
364 endif
366 SRC := $(SRC-y)
367 OBJ := $(addprefix $(OBJDIR)/,$(subst .c,.o,$(SRC)))
368 SRC := $(subst config.c,$(OBJDIR)/config.c,$(SRC))
370 # The default build target rebuilds the config.mak if needed and then
371 # starts the compilation.
372 all:
373 @./config.sh --use-flags "$(USE_FLAGS)" --objdir "$(OBJDIR)" --make-config.mak
374 @-mkdir -p $(OBJDIR)/cscrypt $(OBJDIR)/csctapi $(OBJDIR)/minilzo $(OBJDIR)/webif
375 @-printf "\
376 +-------------------------------------------------------------------------------\n\
377 | OSCam ver: $(VER) rev: $(SVN_REV) target: $(TARGET)\n\
378 | Tools:\n\
379 | CROSS = $(CROSS_DIR)$(CROSS)\n\
380 | CC = $(CC)\n\
381 | Settings:\n\
382 | CONF_DIR = $(CONF_DIR)\n\
383 | CC_OPTS = $(strip $(CC_OPTS))\n\
384 | CC_WARN = $(strip $(CC_WARN))\n\
385 | CFLAGS = $(strip $(CFLAGS))\n\
386 | LDFLAGS = $(strip $(LDFLAGS))\n\
387 | LIBS = $(strip $(LIBS))\n\
388 | UseFlags = $(addsuffix =1,$(USE_FLAGS))\n\
389 | Config:\n\
390 | Addons : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled addons)\n\
391 | Protocols: $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled protocols | sed -e 's|MODULE_||g')\n\
392 | Readers : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled readers | sed -e 's|READER_||g')\n\
393 | CardRdrs : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled card_readers | sed -e 's|CARDREADER_||g')\n\
394 | Compiler : $(shell $(CC) --version 2>/dev/null | head -n 1)\n\
395 | Config : $(OBJDIR)/config.mak\n\
396 | Binary : $(OSCAM_BIN)\n\
397 +-------------------------------------------------------------------------------\n"
398 ifeq "$(shell ./config.sh --enabled WEBIF)" "Y"
399 @$(MAKE) --no-print-directory --quiet -C webif
400 endif
401 @$(MAKE) --no-print-directory $(OSCAM_BIN) $(LIST_SMARGO_BIN)
403 $(OSCAM_BIN).debug: $(OBJ)
404 $(SAY) "LINK $@"
405 $(Q)$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@
407 $(OSCAM_BIN): $(OSCAM_BIN).debug
408 $(SAY) "STRIP $@"
409 $(Q)cp $(OSCAM_BIN).debug $(OSCAM_BIN)
410 $(Q)$(STRIP) $(OSCAM_BIN)
412 $(LIST_SMARGO_BIN): utils/list_smargo.c
413 $(SAY) "BUILD $@"
414 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) $(LDFLAGS) utils/list_smargo.c $(LIBS) -o $@
416 $(OBJDIR)/config.o: $(OBJDIR)/config.c
417 $(SAY) "CONF $<"
418 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
420 $(OBJDIR)/%.o: %.c Makefile
421 @$(CC) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
422 $(SAY) "CC $<"
423 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
425 -include $(subst .o,.d,$(OBJ))
427 tests:
428 @-$(MAKE) --no-print-directory BUILD_TESTS=1 OSCAM_BIN=$(TESTS_BIN)
429 @-touch oscam.c
430 # The above is really hideous hack :-) If we don't force oscam.c recompilation
431 # after we've build the tests binary, the next "normal" compilation would fail
432 # because there would be no run_tests() function. So the touch is there to
433 # ensure oscam.c would be recompiled.
435 config:
436 $(SHELL) ./config.sh --gui
438 menuconfig: config
440 allyesconfig:
441 @echo "Enabling all config options."
442 @-$(SHELL) ./config.sh --enable all
444 allnoconfig:
445 @echo "Disabling all config options."
446 @-$(SHELL) ./config.sh --disable all
448 defconfig:
449 @echo "Restoring default config."
450 @-$(SHELL) ./config.sh --restore
452 clean:
453 @-for FILE in $(BUILD_DIR)/* $(TESTS_BIN) $(TESTS_BIN).debug; do \
454 echo "RM $$FILE"; \
455 rm -rf $$FILE; \
456 done
457 @-rm -rf $(BUILD_DIR) lib
459 distclean: clean
460 @-for FILE in $(BINDIR)/list_smargo-* $(BINDIR)/oscam-$(VER)*; do \
461 echo "RM $$FILE"; \
462 rm -rf $$FILE; \
463 done
464 @-$(MAKE) --no-print-directory --quiet -C webif clean
466 README.build:
467 @echo "Extracting 'make help' into $@ file."
468 @-printf "\
469 ** This file is generated from 'make help' output, do not edit it. **\n\
471 " > $@
472 @-$(MAKE) --no-print-directory help >> $@
473 @echo "Done."
475 README.config:
476 @echo "Extracting 'config.sh --help' into $@ file."
477 @-printf "\
478 ** This file is generated from 'config.sh --help' output, do not edit it. **\n\
480 " > $@
481 @-./config.sh --help >> $@
482 @echo "Done."
484 help:
485 @-printf "\
486 OSCam build system documentation\n\
487 ================================\n\
489 Build variables:\n\
490 The build variables are set on the make command line and control the build\n\
491 process. Setting the variables lets you enable additional features, request\n\
492 extra libraries and more. Currently recognized build variables are:\n\
494 CROSS=prefix - Set tools prefix. This variable is used when OScam is being\n\
495 cross compiled. For example if you want to cross compile\n\
496 for SH4 architecture you can run: 'make CROSS=sh4-linux-'\n\
497 If you don't have the directory where cross compilers are\n\
498 in your PATH you can run:\n\
499 'make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-'\n\
501 CROSS_DIR=dir - Set tools directory. This variable is added in front of\n\
502 CROSS variable. CROSS_DIR is useful if you want to use\n\
503 predefined targets that are setting CROSS, but you don't have\n\
504 the cross compilers in your PATH. For example:\n\
505 'make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/'\n\
506 'make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/'\n\
508 CONF_DIR=/dir - Set OSCam config directory. For example to change config\n\
509 directory to /etc run: 'make CONF_DIR=/etc'\n\
510 The default config directory is: '$(CONF_DIR)'\n\
512 CC_OPTS=text - This variable holds compiler optimization parameters.\n\
513 Default CC_OPTS value is:\n\
514 '$(CC_OPTS)'\n\
515 To add text to this variable set EXTRA_CC_OPTS=text.\n\
517 CC_WARN=text - This variable holds compiler warning parameters.\n\
518 Default CC_WARN value is:\n\
519 '$(CC_WARN)'\n\
520 To add text to this variable set EXTRA_CC_WARN=text.\n\
522 V=1 - Request build process to print verbose messages. By\n\
523 default the only messages that are shown are simple info\n\
524 what is being compiled. To request verbose build run:\n\
525 'make V=1'\n\
527 Extra build variables:\n\
528 These variables add text to build variables. They are useful if you want\n\
529 to add additional options to already set variables without overwriting them\n\
530 Currently defined EXTRA_xxx variables are:\n\
532 EXTRA_CC_OPTS - Add text to CC_OPTS.\n\
533 Example: 'make EXTRA_CC_OPTS=-Os'\n\
535 EXTRA_CC_WARN - Add text to CC_WARN.\n\
536 Example: 'make EXTRA_CC_WARN=-Wshadow'\n\
538 EXTRA_TARGET - Add text to TARGET.\n\
539 Example: 'make EXTRA_TARGET=-private'\n\
541 EXTRA_CFLAGS - Add text to CFLAGS (affects compilation).\n\
542 Example: 'make EXTRA_CFLAGS=\"-DBLAH=1 -I/opt/local\"'\n\
544 EXTRA_LDFLAGS - Add text to LDFLAGS (affects linking).\n\
545 Example: 'make EXTRA_LDFLAGS=-Llibdir'\n\
547 EXTRA_FLAGS - Add text to both EXTRA_CFLAGS and EXTRA_LDFLAGS.\n\
548 Example: 'make EXTRA_FLAGS=-DBLAH=1'\n\
550 EXTRA_LIBS - Add text to LIBS (affects linking).\n\
551 Example: 'make EXTRA_LIBS=\"-L./stapi -loscam_stapi\"'\n\
553 Use flags:\n\
554 Use flags are used to request additional libraries or features to be used\n\
555 by OSCam. Currently defined USE_xxx flags are:\n\
557 USE_LIBUSB=1 - Request linking with libusb. The variables that control\n\
558 USE_LIBUSB=1 build are:\n\
559 LIBUSB_FLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
560 LIBUSB_CFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
561 LIBUSB_LDFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
562 LIBUSB_LIB='$(DEFAULT_LIBUSB_LIB)'\n\
563 Using USE_LIBUSB=1 adds to '-libusb' to PLUS_TARGET.\n\
564 To build with static libusb, set the variable LIBUSB_LIB\n\
565 to contain full path of libusb library. For example:\n\
566 make USE_LIBUSB=1 LIBUSB_LIB=/usr/lib/libusb-1.0.a\n\
568 USE_PCSC=1 - Request linking with PCSC. The variables that control\n\
569 USE_PCSC=1 build are:\n\
570 PCSC_FLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
571 PCSC_CFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
572 PCSC_LDFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
573 PCSC_LIB='$(DEFAULT_PCSC_LIB)'\n\
574 Using USE_PCSC=1 adds to '-pcsc' to PLUS_TARGET.\n\
575 To build with static PCSC, set the variable PCSC_LIB\n\
576 to contain full path of PCSC library. For example:\n\
577 make USE_PCSC=1 PCSC_LIB=/usr/local/lib/libpcsclite.a\n\
579 USE_STAPI=1 - Request linking with STAPI. The variables that control\n\
580 USE_STAPI=1 build are:\n\
581 STAPI_FLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
582 STAPI_CFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
583 STAPI_LDFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
584 STAPI_LIB='$(DEFAULT_STAPI_LIB)'\n\
585 Using USE_STAPI=1 adds to '-stapi' to PLUS_TARGET.\n\
586 In order for USE_STAPI to work you have to create stapi\n\
587 directory and put liboscam_stapi.a file in it.\n\
589 USE_STAPI5=1 - Request linking with STAPI5. The variables that control\n\
590 USE_STAPI5=1 build are:\n\
591 STAPI5_FLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
592 STAPI5_CFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
593 STAPI5_LDFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
594 STAPI5_LIB='$(DEFAULT_STAPI5_LIB)'\n\
595 Using USE_STAPI5=1 adds to '-stapi' to PLUS_TARGET.\n\
596 In order for USE_STAPI5 to work you have to create stapi\n\
597 directory and put liboscam_stapi5.a file in it.\n\
599 USE_COOLAPI=1 - Request support for Coolstream API (libnxp) aka NeutrinoHD\n\
600 box. The variables that control the build are:\n\
601 COOLAPI_FLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
602 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
603 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
604 COOLAPI_LIB='$(DEFAULT_COOLAPI_LIB)'\n\
605 Using USE_COOLAPI=1 adds to '-coolapi' to PLUS_TARGET.\n\
606 In order for USE_COOLAPI to work you have to have libnxp.so\n\
607 library in your cross compilation toolchain.\n\
609 USE_COOLAPI2=1 - Request support for Coolstream API aka NeutrinoHD\n\
610 box. The variables that control the build are:\n\
611 COOLAPI_FLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
612 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
613 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
614 COOLAPI_LIB='$(DEFAULT_COOLAPI2_LIB)'\n\
615 Using USE_COOLAPI2=1 adds to '-coolapi2' to PLUS_TARGET.\n\
616 In order for USE_COOLAPI2 to work you have to have liblnxUKAL.so,\n\
617 liblnxcssUsr.so, liblnxscsUsr.so, liblnxnotifyqUsr.so, liblnxplatUsr.so\n\
618 library in your cross compilation toolchain.\n\
620 USE_SU980=1 - Request support for SU980 API (libentropic) aka Enimga2 arm\n\
621 box. The variables that control the build are:\n\
622 COOLAPI_FLAGS='$(DEFAULT_SU980_FLAGS)'\n\
623 COOLAPI_CFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
624 COOLAPI_LDFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
625 COOLAPI_LIB='$(DEFAULT_SU980_LIB)'\n\
626 Using USE_SU980=1 adds to '-su980' to PLUS_TARGET.\n\
627 In order for USE_SU980 to work you have to have libentropic.a\n\
628 library in your cross compilation toolchain.\n\
630 USE_AZBOX=1 - Request support for AZBOX (openxcas)\n\
631 box. The variables that control the build are:\n\
632 AZBOX_FLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
633 AZBOX_CFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
634 AZBOX_LDFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
635 AZBOX_LIB='$(DEFAULT_AZBOX_LIB)'\n\
636 Using USE_AZBOX=1 adds to '-azbox' to PLUS_TARGET.\n\
637 extapi/openxcas/libOpenXCASAPI.a library that is shipped\n\
638 with OSCam is compiled for MIPSEL.\n\
640 USE_MCA=1 - Request support for Matrix Cam Air (MCA).\n\
641 The variables that control the build are:\n\
642 MCA_FLAGS='$(DEFAULT_MCA_FLAGS)'\n\
643 MCA_CFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
644 MCA_LDFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
645 Using USE_MCA=1 adds to '-mca' to PLUS_TARGET.\n\
647 USE_LIBCRYPTO=1 - Request linking with libcrypto instead of using OSCam\n\
648 internal crypto functions. USE_LIBCRYPTO is automatically\n\
649 enabled if the build is configured with SSL support. The\n\
650 variables that control USE_LIBCRYPTO=1 build are:\n\
651 LIBCRYPTO_FLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
652 LIBCRYPTO_CFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
653 LIBCRYPTO_LDFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
654 LIBCRYPTO_LIB='$(DEFAULT_LIBCRYPTO_LIB)'\n\
656 USE_SSL=1 - Request linking with libssl. USE_SSL is automatically\n\
657 enabled if the build is configured with SSL support. The\n\
658 variables that control USE_SSL=1 build are:\n\
659 SSL_FLAGS='$(DEFAULT_SSL_FLAGS)'\n\
660 SSL_CFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
661 SSL_LDFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
662 SSL_LIB='$(DEFAULT_SSL_LIB)'\n\
663 Using USE_SSL=1 adds to '-ssl' to PLUS_TARGET.\n\
665 USE_UTF8=1 - Request UTF-8 enabled webif by default.\n\
667 Automatically intialized variables:\n\
669 TARGET=text - This variable is auto detected by using the compiler's\n\
670 -dumpmachine output. To see the target on your machine run:\n\
671 'gcc -dumpmachine'\n\
673 PLUS_TARGET - This variable is added to TARGET and it is set depending\n\
674 on the chosen USE_xxx flags. To disable adding\n\
675 PLUS_TARGET to TARGET, set NO_PLUS_TARGET=1\n\
677 BINDIR - The directory where final oscam binary would be put. The\n\
678 default is: $(BINDIR)\n\
680 OSCAM_BIN=text - This variable controls how the oscam binary will be named.\n\
681 Default OSCAM_BIN value is:\n\
682 'BINDIR/oscam-VERSVN_REV-TARGET'\n\
683 Once the variables (BINDIR, VER, SVN_REV and TARGET) are\n\
684 replaced, the resulting filename can look like this:\n\
685 'Distribution/oscam-1.20-unstable_svn7404-i486-slackware-linux-static'\n\
686 For example you can run: 'make OSCAM_BIN=my-oscam'\n\
688 Binaries compiled and run during the OSCam build:\n\
690 OSCam builds webif/pages_gen binary that is run by the build system to\n\
691 generate file that holds web pages. To build this binary two variables\n\
692 are used:\n\
694 HOSTCC=gcc - The compiler used for building binaries that are run on\n\
695 the build machine (the host). Default: gcc\n\
696 To use clang for example run: make CC=clang HOSTCC=clang\n\
698 HOSTCFLAGS=xxx - The CFLAGS passed to HOSTCC. See webif/Makefile for the\n\
699 default host cflags.\n\
701 Config targets:\n\
702 make config - Start configuration utility.\n\
703 make allyesconfig - Enable all configuration options.\n\
704 make allnoconfig - Disable all configuration options.\n\
705 make defconfig - Restore default configuration options.\n\
707 Cleaning targets:\n\
708 make clean - Remove '$(BUILD_DIR)' directory which contains compiled\n\
709 object files.\n\
710 make distclean - Executes clean target and also removes binary files\n\
711 located in '$(BINDIR)' directory.\n\
713 Build system files:\n\
714 config.sh - OSCam configuration. Run 'config.sh --help' to see\n\
715 available parameters or 'make config' to start GUI\n\
716 configuratior.\n\
717 Makefile - Main build system file.\n\
718 Makefile.extra - Contains predefined targets. You can use this file\n\
719 as example on how to use the build system.\n\
720 Makefile.local - This file is included in Makefile and allows creation\n\
721 of local build system targets. See Makefile.extra for\n\
722 examples.\n\
724 Here are some of the interesting predefined targets in Makefile.extra.\n\
725 To use them run 'make target ...' where ... can be any extra flag. For\n\
726 example if you want to compile OSCam for Dreambox (DM500) but do not\n\
727 have the compilers in the path, you can run:\n\
728 make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/\n\
730 Predefined targets in Makefile.extra:\n\
732 make libusb - Builds OSCam with libusb support\n\
733 make pcsc - Builds OSCam with PCSC support\n\
734 make pcsc-libusb - Builds OSCam with PCSC and libusb support\n\
735 make dm500 - Builds OSCam for Dreambox (DM500)\n\
736 make sh4 - Builds OSCam for SH4 boxes\n\
737 make azbox - Builds OSCam for AZBox STBs\n\
738 make mca - Builds OSCam for Matrix Cam Air (MCA)\n\
739 make coolstream - Builds OSCam for Coolstream HD1\n\
740 make coolstream2 - Builds OSCam for Coolstream HD2\n\
741 make dockstar - Builds OSCam for Dockstar\n\
742 make qboxhd - Builds OSCam for QBoxHD STBs\n\
743 make opensolaris - Builds OSCam for OpenSolaris\n\
744 make uclinux - Builds OSCam for m68k uClinux\n\
746 Predefined targets for static builds:\n\
747 make static - Builds OSCam statically\n\
748 make static-libusb - Builds OSCam with libusb linked statically\n\
749 make static-libcrypto - Builds OSCam with libcrypto linked statically\n\
750 make static-ssl - Builds OSCam with SSL support linked statically\n\
752 Developer targets:\n\
753 make tests - Builds '$(TESTS_BIN)' binary\n\
755 Examples:\n\
756 Build OSCam for SH4 (the compilers are in the path):\n\
757 make CROSS=sh4-linux-\n\n\
758 Build OSCam for SH4 (the compilers are in not in the path):\n\
759 make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/\n\
760 make CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/ CROSS=sh4-linux-\n\
761 make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-\n\n\
762 Build OSCam for SH4 with STAPI:\n\
763 make CROSS=sh4-linux- USE_STAPI=1\n\n\
764 Build OSCam for SH4 with STAPI and changed configuration directory:\n\
765 make CROSS=sh4-linux- USE_STAPI=1 CONF_DIR=/var/tuxbox/config\n\n\
766 Build OSCam for ARM with COOLAPI (coolstream aka NeutrinoHD):\n\
767 make CROSS=arm-cx2450x-linux-gnueabi- USE_COOLAPI=1\n\n\
768 Build OSCam for ARM with COOLAPI2 (coolstream aka NeutrinoHD):\n\
769 make CROSS=arm-pnx8400-linux-uclibcgnueabi- USE_COOLAPI2=1\n\n\
770 Build OSCam for MIPSEL with AZBOX support:\n\
771 make CROSS=mipsel-linux-uclibc- USE_AZBOX=1\n\n\
772 Build OSCam for ARM with MCA support:\n\
773 make CROSS=arm-none-linux-gnueabi- USE_MCA=1\n\n\
774 Build OSCam with libusb and PCSC:\n\
775 make USE_LIBUSB=1 USE_PCSC=1\n\n\
776 Build OSCam with static libusb:\n\
777 make USE_LIBUSB=1 LIBUSB_LIB=\"/usr/lib/libusb-1.0.a\"\n\n\
778 Build OSCam with static libcrypto:\n\
779 make USE_LIBCRYPTO=1 LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
780 Build OSCam with static libssl and libcrypto:\n\
781 make USE_SSL=1 SSL_LIB=\"/usr/lib/libssl.a\" LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
782 Build with verbose messages and size optimizations:\n\
783 make V=1 CC_OPTS=-Os\n\n\
784 Build and set oscam file name:\n\
785 make OSCAM_BIN=oscam\n\n\
786 Build and set oscam file name depending on revision:\n\
787 make OSCAM_BIN=oscam-\`./config.sh -r\`\n\n\
790 simple: all
791 default: all
792 debug: all
794 -include Makefile.extra
795 -include Makefile.local