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