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