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