- remove unnecessary imports during libdvbcsa static build
[oscam.git] / Makefile
bloba915e9454b6bc4fe25dbfbf98fb17e32ef9ed046
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 DEFAULT_UTF8_FLAGS = -DWITH_UTF8
169 # Function to initialize USE related variables
170 # Usage: $(eval $(call prepare_use_flags,FLAG_NAME,PLUS_TARGET_TEXT))
171 define prepare_use_flags
172 override DEFAULT_$(1)_FLAGS:=$$(strip -DWITH_$(1)=1 $$(DEFAULT_$(1)_FLAGS))
173 ifdef USE_$(1)
174 $(1)_FLAGS:=$$(DEFAULT_$(1)_FLAGS)
175 $(1)_CFLAGS:=$$($(1)_FLAGS)
176 $(1)_LDFLAGS:=$$($(1)_FLAGS)
177 $(1)_LIB:=$$(DEFAULT_$(1)_LIB)
178 ifneq "$(2)" ""
179 override PLUS_TARGET:=$$(PLUS_TARGET)-$(2)
180 endif
181 override USE_CFLAGS+=$$($(1)_CFLAGS)
182 override USE_LDFLAGS+=$$($(1)_LDFLAGS)
183 override USE_LIBS+=$$($(1)_LIB)
184 override USE_FLAGS+=$$(if $$(USE_$(1)),USE_$(1))
185 endif
186 endef
188 # Initialize USE variables
189 $(eval $(call prepare_use_flags,STAPI,stapi))
190 $(eval $(call prepare_use_flags,STAPI5,stapi5))
191 $(eval $(call prepare_use_flags,COOLAPI,coolapi))
192 $(eval $(call prepare_use_flags,COOLAPI2,coolapi2))
193 $(eval $(call prepare_use_flags,SU980,su980))
194 $(eval $(call prepare_use_flags,AZBOX,azbox))
195 $(eval $(call prepare_use_flags,MCA,mca))
196 $(eval $(call prepare_use_flags,SSL,ssl))
197 $(eval $(call prepare_use_flags,LIBCRYPTO,))
198 $(eval $(call prepare_use_flags,LIBUSB,libusb))
199 $(eval $(call prepare_use_flags,PCSC,pcsc))
200 $(eval $(call prepare_use_flags,LIBDVBCSA,libdvbcsa))
201 $(eval $(call prepare_use_flags,UTF8))
203 # Add PLUS_TARGET and EXTRA_TARGET to TARGET
204 ifdef NO_PLUS_TARGET
205 override TARGET := $(TARGET)$(EXTRA_TARGET)
206 else
207 override TARGET := $(TARGET)$(PLUS_TARGET)$(EXTRA_TARGET)
208 endif
210 EXTRA_CFLAGS = $(EXTRA_FLAGS)
211 EXTRA_LDFLAGS = $(EXTRA_FLAGS)
213 # Add USE_xxx, EXTRA_xxx and STD_xxx vars
214 override CC_WARN += $(EXTRA_CC_WARN)
215 override CC_OPTS += $(EXTRA_CC_OPTS)
216 override CFLAGS += $(USE_CFLAGS) $(EXTRA_CFLAGS)
217 override LDFLAGS += $(USE_LDFLAGS) $(EXTRA_LDFLAGS)
218 override LIBS += $(USE_LIBS) $(EXTRA_LIBS) $(STD_LIBS)
220 override STD_DEFS += -D'CS_TARGET="$(TARGET)"'
222 # Setup quiet build
224 SAY = @true
225 ifndef V
226 Q = @
227 NP = --no-print-directory
228 SAY = @echo
229 endif
231 BINDIR := Distribution
232 override BUILD_DIR := build
233 OBJDIR := $(BUILD_DIR)/$(TARGET)
235 # Include config.mak which contains variables for all enabled modules
236 # These variables will be used to select only needed files for compilation
237 -include $(OBJDIR)/config.mak
239 OSCAM_BIN := $(BINDIR)/oscam-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
240 TESTS_BIN := tests.bin
241 LIST_SMARGO_BIN := $(BINDIR)/list_smargo-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
243 # Build list_smargo-.... only when WITH_LIBUSB build is requested.
244 ifndef USE_LIBUSB
245 override LIST_SMARGO_BIN =
246 endif
248 SRC-$(CONFIG_LIB_AES) += cscrypt/aes.c
249 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_add.c
250 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_asm.c
251 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_ctx.c
252 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_div.c
253 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_exp.c
254 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_lib.c
255 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_mul.c
256 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_print.c
257 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_shift.c
258 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_sqr.c
259 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_word.c
260 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/mem.c
261 SRC-$(CONFIG_LIB_DES) += cscrypt/des.c
262 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_cbc.c
263 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_ecb.c
264 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_skey.c
265 SRC-y += cscrypt/md5.c
266 SRC-$(CONFIG_LIB_RC6) += cscrypt/rc6.c
267 SRC-$(CONFIG_LIB_SHA1) += cscrypt/sha1.c
268 SRC-$(CONFIG_LIB_MDC2) += cscrypt/mdc2.c
269 SRC-$(CONFIG_LIB_FAST_AES) += cscrypt/fast_aes.c
270 SRC-$(CONFIG_LIB_SHA256) += cscrypt/sha256.c
272 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/atr.c
273 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/icc_async.c
274 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/io_serial.c
275 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t0.c
276 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t1.c
277 SRC-$(CONFIG_CARDREADER_INTERNAL_AZBOX) += csctapi/ifd_azbox.c
278 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI) += csctapi/ifd_cool.c
279 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI2) += csctapi/ifd_cool.c
280 SRC-$(CONFIG_CARDREADER_DB2COM) += csctapi/ifd_db2com.c
281 SRC-$(CONFIG_CARDREADER_MP35) += csctapi/ifd_mp35.c
282 SRC-$(CONFIG_CARDREADER_PCSC) += csctapi/ifd_pcsc.c
283 SRC-$(CONFIG_CARDREADER_PHOENIX) += csctapi/ifd_phoenix.c
284 SRC-$(CONFIG_CARDREADER_DRECAS) += csctapi/ifd_drecas.c
285 SRC-$(CONFIG_CARDREADER_SC8IN1) += csctapi/ifd_sc8in1.c
286 SRC-$(CONFIG_CARDREADER_INTERNAL_SCI) += csctapi/ifd_sci.c
287 SRC-$(CONFIG_CARDREADER_SMARGO) += csctapi/ifd_smargo.c
288 SRC-$(CONFIG_CARDREADER_SMART) += csctapi/ifd_smartreader.c
289 SRC-$(CONFIG_CARDREADER_STINGER) += csctapi/ifd_stinger.c
290 SRC-$(CONFIG_CARDREADER_STAPI) += csctapi/ifd_stapi.c
291 SRC-$(CONFIG_CARDREADER_STAPI5) += csctapi/ifd_stapi.c
293 SRC-$(CONFIG_LIB_MINILZO) += minilzo/minilzo.c
295 SRC-$(CONFIG_CS_ANTICASC) += module-anticasc.c
296 SRC-$(CONFIG_CS_CACHEEX) += module-cacheex.c
297 SRC-$(CONFIG_MODULE_CAMD33) += module-camd33.c
298 SRC-$(CONFIG_CS_CACHEEX) += module-camd35-cacheex.c
299 SRC-$(sort $(CONFIG_MODULE_CAMD35) $(CONFIG_MODULE_CAMD35_TCP)) += module-camd35.c
300 SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
301 SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
302 SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
303 SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
304 SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
305 SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
306 SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
307 SRC-$(CONFIG_WITH_MCA) += module-dvbapi-mca.c
308 ### SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi.c
309 ### experimental reversed API
310 SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi-legacy.c
311 SRC-$(CONFIG_WITH_COOLAPI2) += module-dvbapi-coolapi.c
312 SRC-$(CONFIG_WITH_SU980) += module-dvbapi-coolapi.c
313 SRC-$(CONFIG_WITH_STAPI) += module-dvbapi-stapi.c
314 SRC-$(CONFIG_WITH_STAPI5) += module-dvbapi-stapi5.c
315 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi-chancache.c
316 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi.c
317 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-helper.c
318 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-sms.c
319 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-remm.c
320 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-cards.c
321 SRC-$(CONFIG_MODULE_GBOX) += module-gbox.c
322 SRC-$(CONFIG_LCDSUPPORT) += module-lcd.c
323 SRC-$(CONFIG_LEDSUPPORT) += module-led.c
324 SRC-$(CONFIG_MODULE_MONITOR) += module-monitor.c
325 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd.c
326 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd-des.c
327 SRC-$(CONFIG_MODULE_PANDORA) += module-pandora.c
328 SRC-$(CONFIG_MODULE_GHTTP) += module-ghttp.c
329 SRC-$(CONFIG_MODULE_RADEGAST) += module-radegast.c
330 SRC-$(CONFIG_MODULE_SCAM) += module-scam.c
331 SRC-$(CONFIG_MODULE_SERIAL) += module-serial.c
332 SRC-$(CONFIG_MODULE_STREAMRELAY) += module-streamrelay.c
333 SRC-$(CONFIG_WITH_LB) += module-stat.c
334 SRC-$(CONFIG_WEBIF) += module-webif-lib.c
335 SRC-$(CONFIG_WEBIF) += module-webif-tpl.c
336 SRC-$(CONFIG_WEBIF) += module-webif.c
337 SRC-$(CONFIG_WEBIF) += webif/pages.c
338 SRC-$(CONFIG_WITH_CARDREADER) += reader-common.c
339 SRC-$(CONFIG_READER_BULCRYPT) += reader-bulcrypt.c
340 SRC-$(CONFIG_READER_CONAX) += reader-conax.c
341 SRC-$(CONFIG_READER_CRYPTOWORKS) += reader-cryptoworks.c
342 SRC-$(CONFIG_READER_DGCRYPT) += reader-dgcrypt.c
343 SRC-$(CONFIG_READER_DRE) += reader-dre.c
344 SRC-$(CONFIG_READER_DRE) += reader-dre-cas.c
345 SRC-$(CONFIG_READER_DRE) += reader-dre-common.c
346 SRC-$(CONFIG_READER_DRE) += reader-dre-st20.c
347 SRC-$(CONFIG_READER_GRIFFIN) += reader-griffin.c
348 SRC-$(CONFIG_READER_IRDETO) += reader-irdeto.c
349 SRC-$(CONFIG_READER_NAGRA_COMMON) += reader-nagra-common.c
350 SRC-$(CONFIG_READER_NAGRA) += reader-nagra.c
351 SRC-$(CONFIG_READER_NAGRA_MERLIN) += reader-nagracak7.c
352 SRC-$(CONFIG_READER_SECA) += reader-seca.c
353 SRC-$(CONFIG_READER_TONGFANG) += reader-tongfang.c
354 SRC-$(CONFIG_READER_VIACCESS) += reader-viaccess.c
355 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard-common.c
356 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard1.c
357 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard12.c
358 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard2.c
359 SRC-y += oscam-aes.c
360 SRC-y += oscam-array.c
361 SRC-y += oscam-hashtable.c
362 SRC-y += oscam-cache.c
363 SRC-y += oscam-chk.c
364 SRC-y += oscam-client.c
365 SRC-y += oscam-conf.c
366 SRC-y += oscam-conf-chk.c
367 SRC-y += oscam-conf-mk.c
368 SRC-y += oscam-config-account.c
369 SRC-y += oscam-config-global.c
370 SRC-y += oscam-config-reader.c
371 SRC-y += oscam-config.c
372 SRC-y += oscam-ecm.c
373 SRC-y += oscam-emm.c
374 SRC-y += oscam-emm-cache.c
375 SRC-y += oscam-failban.c
376 SRC-y += oscam-files.c
377 SRC-y += oscam-garbage.c
378 SRC-y += oscam-lock.c
379 SRC-y += oscam-log.c
380 SRC-y += oscam-log-reader.c
381 SRC-y += oscam-net.c
382 SRC-y += oscam-llist.c
383 SRC-y += oscam-reader.c
384 SRC-y += oscam-simples.c
385 SRC-y += oscam-string.c
386 SRC-y += oscam-time.c
387 SRC-y += oscam-work.c
388 SRC-y += oscam.c
389 # config.c is automatically generated by config.sh in OBJDIR
390 SRC-y += config.c
391 ifdef BUILD_TESTS
392 SRC-y += tests.c
393 override STD_DEFS += -DBUILD_TESTS=1
394 endif
396 SRC := $(SRC-y)
397 OBJ := $(addprefix $(OBJDIR)/,$(subst .c,.o,$(SRC)))
398 SRC := $(subst config.c,$(OBJDIR)/config.c,$(SRC))
400 # The default build target rebuilds the config.mak if needed and then
401 # starts the compilation.
402 all:
403 @./config.sh --use-flags "$(USE_FLAGS)" --objdir "$(OBJDIR)" --make-config.mak
404 @-mkdir -p $(OBJDIR)/cscrypt $(OBJDIR)/csctapi $(OBJDIR)/minilzo $(OBJDIR)/webif
405 @-printf "\
406 +-------------------------------------------------------------------------------\n\
407 | OSCam ver: $(VER) rev: $(SVN_REV) target: $(TARGET)\n\
408 | Tools:\n\
409 | CROSS = $(CROSS_DIR)$(CROSS)\n\
410 | CC = $(CC)\n\
411 | Settings:\n\
412 | CONF_DIR = $(CONF_DIR)\n\
413 | CC_OPTS = $(strip $(CC_OPTS))\n\
414 | CC_WARN = $(strip $(CC_WARN))\n\
415 | CFLAGS = $(strip $(CFLAGS))\n\
416 | LDFLAGS = $(strip $(LDFLAGS))\n\
417 | LIBS = $(strip $(LIBS))\n\
418 | UseFlags = $(addsuffix =1,$(USE_FLAGS))\n\
419 | Config:\n\
420 | Addons : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled addons)\n\
421 | Protocols: $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled protocols | sed -e 's|MODULE_||g')\n\
422 | Readers : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled readers | sed -e 's|READER_||g')\n\
423 | CardRdrs : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled card_readers | sed -e 's|CARDREADER_||g')\n\
424 | Compiler : $(CCVERSION)\n\
425 | Config : $(OBJDIR)/config.mak\n\
426 | Binary : $(OSCAM_BIN)\n\
427 +-------------------------------------------------------------------------------\n"
428 ifeq "$(shell ./config.sh --enabled WEBIF)" "Y"
429 @$(MAKE) --no-print-directory --quiet -C webif
430 endif
431 @$(MAKE) --no-print-directory $(OSCAM_BIN) $(LIST_SMARGO_BIN)
433 $(OSCAM_BIN).debug: $(OBJ)
434 $(SAY) "LINK $@"
435 $(Q)$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@
437 $(OSCAM_BIN): $(OSCAM_BIN).debug
438 $(SAY) "STRIP $@"
439 $(Q)cp $(OSCAM_BIN).debug $(OSCAM_BIN)
440 $(Q)$(STRIP) $(OSCAM_BIN)
442 $(LIST_SMARGO_BIN): utils/list_smargo.c
443 $(SAY) "BUILD $@"
444 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) $(LDFLAGS) utils/list_smargo.c $(LIBS) -o $@
446 $(OBJDIR)/config.o: $(OBJDIR)/config.c
447 $(SAY) "CONF $<"
448 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
450 $(OBJDIR)/%.o: %.c Makefile
451 @$(CC) $(CFLAGS) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
452 $(SAY) "CC $<"
453 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
455 -include $(subst .o,.d,$(OBJ))
457 tests:
458 @-$(MAKE) --no-print-directory BUILD_TESTS=1 OSCAM_BIN=$(TESTS_BIN)
459 @-touch oscam.c
460 # The above is really hideous hack :-) If we don't force oscam.c recompilation
461 # after we've build the tests binary, the next "normal" compilation would fail
462 # because there would be no run_tests() function. So the touch is there to
463 # ensure oscam.c would be recompiled.
465 config:
466 $(SHELL) ./config.sh --gui
468 menuconfig: config
470 allyesconfig:
471 @echo "Enabling all config options."
472 @-$(SHELL) ./config.sh --enable all
474 allnoconfig:
475 @echo "Disabling all config options."
476 @-$(SHELL) ./config.sh --disable all
478 defconfig:
479 @echo "Restoring default config."
480 @-$(SHELL) ./config.sh --restore
482 clean:
483 @-for FILE in $(BUILD_DIR)/* $(TESTS_BIN) $(TESTS_BIN).debug; do \
484 echo "RM $$FILE"; \
485 rm -rf $$FILE; \
486 done
487 @-rm -rf $(BUILD_DIR) lib
489 distclean: clean
490 @-for FILE in $(BINDIR)/list_smargo-* $(BINDIR)/oscam-$(VER)*; do \
491 echo "RM $$FILE"; \
492 rm -rf $$FILE; \
493 done
494 @-$(MAKE) --no-print-directory --quiet -C webif clean
496 README.build:
497 @echo "Extracting 'make help' into $@ file."
498 @-printf "\
499 ** This file is generated from 'make help' output, do not edit it. **\n\
501 " > $@
502 @-$(MAKE) --no-print-directory help >> $@
503 @echo "Done."
505 README.config:
506 @echo "Extracting 'config.sh --help' into $@ file."
507 @-printf "\
508 ** This file is generated from 'config.sh --help' output, do not edit it. **\n\
510 " > $@
511 @-./config.sh --help >> $@
512 @echo "Done."
514 help:
515 @-printf "\
516 OSCam build system documentation\n\
517 ================================\n\
519 Build variables:\n\
520 The build variables are set on the make command line and control the build\n\
521 process. Setting the variables lets you enable additional features, request\n\
522 extra libraries and more. Currently recognized build variables are:\n\
524 CROSS=prefix - Set tools prefix. This variable is used when OScam is being\n\
525 cross compiled. For example if you want to cross compile\n\
526 for SH4 architecture you can run: 'make CROSS=sh4-linux-'\n\
527 If you don't have the directory where cross compilers are\n\
528 in your PATH you can run:\n\
529 'make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-'\n\
531 CROSS_DIR=dir - Set tools directory. This variable is added in front of\n\
532 CROSS variable. CROSS_DIR is useful if you want to use\n\
533 predefined targets that are setting CROSS, but you don't have\n\
534 the cross compilers in your PATH. For example:\n\
535 'make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/'\n\
536 'make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/'\n\
538 CONF_DIR=/dir - Set OSCam config directory. For example to change config\n\
539 directory to /etc run: 'make CONF_DIR=/etc'\n\
540 The default config directory is: '$(CONF_DIR)'\n\
542 CC_OPTS=text - This variable holds compiler optimization parameters.\n\
543 Default CC_OPTS value is:\n\
544 '$(CC_OPTS)'\n\
545 To add text to this variable set EXTRA_CC_OPTS=text.\n\
547 CC_WARN=text - This variable holds compiler warning parameters.\n\
548 Default CC_WARN value is:\n\
549 '$(CC_WARN)'\n\
550 To add text to this variable set EXTRA_CC_WARN=text.\n\
552 V=1 - Request build process to print verbose messages. By\n\
553 default the only messages that are shown are simple info\n\
554 what is being compiled. To request verbose build run:\n\
555 'make V=1'\n\
557 Extra build variables:\n\
558 These variables add text to build variables. They are useful if you want\n\
559 to add additional options to already set variables without overwriting them\n\
560 Currently defined EXTRA_xxx variables are:\n\
562 EXTRA_CC_OPTS - Add text to CC_OPTS.\n\
563 Example: 'make EXTRA_CC_OPTS=-Os'\n\
565 EXTRA_CC_WARN - Add text to CC_WARN.\n\
566 Example: 'make EXTRA_CC_WARN=-Wshadow'\n\
568 EXTRA_TARGET - Add text to TARGET.\n\
569 Example: 'make EXTRA_TARGET=-private'\n\
571 EXTRA_CFLAGS - Add text to CFLAGS (affects compilation).\n\
572 Example: 'make EXTRA_CFLAGS=\"-DBLAH=1 -I/opt/local\"'\n\
574 EXTRA_LDFLAGS - Add text to LDFLAGS (affects linking).\n\
575 Example: 'make EXTRA_LDFLAGS=-Llibdir'\n\
577 EXTRA_FLAGS - Add text to both EXTRA_CFLAGS and EXTRA_LDFLAGS.\n\
578 Example: 'make EXTRA_FLAGS=-DBLAH=1'\n\
580 EXTRA_LIBS - Add text to LIBS (affects linking).\n\
581 Example: 'make EXTRA_LIBS=\"-L./stapi -loscam_stapi\"'\n\
583 Use flags:\n\
584 Use flags are used to request additional libraries or features to be used\n\
585 by OSCam. Currently defined USE_xxx flags are:\n\
587 USE_LIBUSB=1 - Request linking with libusb. The variables that control\n\
588 USE_LIBUSB=1 build are:\n\
589 LIBUSB_FLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
590 LIBUSB_CFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
591 LIBUSB_LDFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
592 LIBUSB_LIB='$(DEFAULT_LIBUSB_LIB)'\n\
593 Using USE_LIBUSB=1 adds to '-libusb' to PLUS_TARGET.\n\
594 To build with static libusb, set the variable LIBUSB_LIB\n\
595 to contain full path of libusb library. For example:\n\
596 make USE_LIBUSB=1 LIBUSB_LIB=/usr/lib/libusb-1.0.a\n\
598 USE_PCSC=1 - Request linking with PCSC. The variables that control\n\
599 USE_PCSC=1 build are:\n\
600 PCSC_FLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
601 PCSC_CFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
602 PCSC_LDFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
603 PCSC_LIB='$(DEFAULT_PCSC_LIB)'\n\
604 Using USE_PCSC=1 adds to '-pcsc' to PLUS_TARGET.\n\
605 To build with static PCSC, set the variable PCSC_LIB\n\
606 to contain full path of PCSC library. For example:\n\
607 make USE_PCSC=1 PCSC_LIB=/usr/local/lib/libpcsclite.a\n\
609 USE_STAPI=1 - Request linking with STAPI. The variables that control\n\
610 USE_STAPI=1 build are:\n\
611 STAPI_FLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
612 STAPI_CFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
613 STAPI_LDFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
614 STAPI_LIB='$(DEFAULT_STAPI_LIB)'\n\
615 Using USE_STAPI=1 adds to '-stapi' to PLUS_TARGET.\n\
616 In order for USE_STAPI to work you have to create stapi\n\
617 directory and put liboscam_stapi.a file in it.\n\
619 USE_STAPI5=1 - Request linking with STAPI5. The variables that control\n\
620 USE_STAPI5=1 build are:\n\
621 STAPI5_FLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
622 STAPI5_CFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
623 STAPI5_LDFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
624 STAPI5_LIB='$(DEFAULT_STAPI5_LIB)'\n\
625 Using USE_STAPI5=1 adds to '-stapi' to PLUS_TARGET.\n\
626 In order for USE_STAPI5 to work you have to create stapi\n\
627 directory and put liboscam_stapi5.a file in it.\n\
629 USE_COOLAPI=1 - Request support for Coolstream API (libnxp) aka NeutrinoHD\n\
630 box. The variables that control the build are:\n\
631 COOLAPI_FLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
632 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
633 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
634 COOLAPI_LIB='$(DEFAULT_COOLAPI_LIB)'\n\
635 Using USE_COOLAPI=1 adds to '-coolapi' to PLUS_TARGET.\n\
636 In order for USE_COOLAPI to work you have to have libnxp.so\n\
637 library in your cross compilation toolchain.\n\
639 USE_COOLAPI2=1 - Request support for Coolstream API aka NeutrinoHD\n\
640 box. The variables that control the build are:\n\
641 COOLAPI_FLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
642 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
643 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
644 COOLAPI_LIB='$(DEFAULT_COOLAPI2_LIB)'\n\
645 Using USE_COOLAPI2=1 adds to '-coolapi2' to PLUS_TARGET.\n\
646 In order for USE_COOLAPI2 to work you have to have liblnxUKAL.so,\n\
647 liblnxcssUsr.so, liblnxscsUsr.so, liblnxnotifyqUsr.so, liblnxplatUsr.so\n\
648 library in your cross compilation toolchain.\n\
650 USE_SU980=1 - Request support for SU980 API (libentropic) aka Enimga2 arm\n\
651 box. The variables that control the build are:\n\
652 COOLAPI_FLAGS='$(DEFAULT_SU980_FLAGS)'\n\
653 COOLAPI_CFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
654 COOLAPI_LDFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
655 COOLAPI_LIB='$(DEFAULT_SU980_LIB)'\n\
656 Using USE_SU980=1 adds to '-su980' to PLUS_TARGET.\n\
657 In order for USE_SU980 to work you have to have libentropic.a\n\
658 library in your cross compilation toolchain.\n\
660 USE_AZBOX=1 - Request support for AZBOX (openxcas)\n\
661 box. The variables that control the build are:\n\
662 AZBOX_FLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
663 AZBOX_CFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
664 AZBOX_LDFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
665 AZBOX_LIB='$(DEFAULT_AZBOX_LIB)'\n\
666 Using USE_AZBOX=1 adds to '-azbox' to PLUS_TARGET.\n\
667 extapi/openxcas/libOpenXCASAPI.a library that is shipped\n\
668 with OSCam is compiled for MIPSEL.\n\
670 USE_MCA=1 - Request support for Matrix Cam Air (MCA).\n\
671 The variables that control the build are:\n\
672 MCA_FLAGS='$(DEFAULT_MCA_FLAGS)'\n\
673 MCA_CFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
674 MCA_LDFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
675 Using USE_MCA=1 adds to '-mca' to PLUS_TARGET.\n\
677 USE_LIBCRYPTO=1 - Request linking with libcrypto instead of using OSCam\n\
678 internal crypto functions. USE_LIBCRYPTO is automatically\n\
679 enabled if the build is configured with SSL support. The\n\
680 variables that control USE_LIBCRYPTO=1 build are:\n\
681 LIBCRYPTO_FLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
682 LIBCRYPTO_CFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
683 LIBCRYPTO_LDFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
684 LIBCRYPTO_LIB='$(DEFAULT_LIBCRYPTO_LIB)'\n\
686 USE_SSL=1 - Request linking with libssl. USE_SSL is automatically\n\
687 enabled if the build is configured with SSL support. The\n\
688 variables that control USE_SSL=1 build are:\n\
689 SSL_FLAGS='$(DEFAULT_SSL_FLAGS)'\n\
690 SSL_CFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
691 SSL_LDFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
692 SSL_LIB='$(DEFAULT_SSL_LIB)'\n\
693 Using USE_SSL=1 adds to '-ssl' to PLUS_TARGET.\n\
695 USE_LIBDVBCSA=1 - Request linking with libdvbcsa. USE_LIBDVBCSA is automatically\n\
696 The variables that control USE_LIBDVBCSA=1 build are:\n\
697 LIBDVBCSA_FLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
698 LIBDVBCSA_CFLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
699 LIBDVBCSA_LDFLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
700 LIBDVBCSA_LIB='$(DEFAULT_LIBDVBCSA_LIB)'\n\
702 USE_UTF8=1 - Request UTF-8 enabled webif by default.\n\
704 Automatically intialized variables:\n\
706 TARGET=text - This variable is auto detected by using the compiler's\n\
707 -dumpmachine output. To see the target on your machine run:\n\
708 'gcc -dumpmachine'\n\
710 PLUS_TARGET - This variable is added to TARGET and it is set depending\n\
711 on the chosen USE_xxx flags. To disable adding\n\
712 PLUS_TARGET to TARGET, set NO_PLUS_TARGET=1\n\
714 BINDIR - The directory where final oscam binary would be put. The\n\
715 default is: $(BINDIR)\n\
717 OSCAM_BIN=text - This variable controls how the oscam binary will be named.\n\
718 Default OSCAM_BIN value is:\n\
719 'BINDIR/oscam-VERSVN_REV-TARGET'\n\
720 Once the variables (BINDIR, VER, SVN_REV and TARGET) are\n\
721 replaced, the resulting filename can look like this:\n\
722 'Distribution/oscam-1.20-unstable_svn7404-i486-slackware-linux-static'\n\
723 For example you can run: 'make OSCAM_BIN=my-oscam'\n\
725 Binaries compiled and run during the OSCam build:\n\
727 OSCam builds webif/pages_gen binary that is run by the build system to\n\
728 generate file that holds web pages. To build this binary two variables\n\
729 are used:\n\
731 HOSTCC=gcc - The compiler used for building binaries that are run on\n\
732 the build machine (the host). Default: gcc\n\
733 To use clang for example run: make CC=clang HOSTCC=clang\n\
735 HOSTCFLAGS=xxx - The CFLAGS passed to HOSTCC. See webif/Makefile for the\n\
736 default host cflags.\n\
738 Config targets:\n\
739 make config - Start configuration utility.\n\
740 make allyesconfig - Enable all configuration options.\n\
741 make allnoconfig - Disable all configuration options.\n\
742 make defconfig - Restore default configuration options.\n\
744 Cleaning targets:\n\
745 make clean - Remove '$(BUILD_DIR)' directory which contains compiled\n\
746 object files.\n\
747 make distclean - Executes clean target and also removes binary files\n\
748 located in '$(BINDIR)' directory.\n\
750 Build system files:\n\
751 config.sh - OSCam configuration. Run 'config.sh --help' to see\n\
752 available parameters or 'make config' to start GUI\n\
753 configuratior.\n\
754 Makefile - Main build system file.\n\
755 Makefile.extra - Contains predefined targets. You can use this file\n\
756 as example on how to use the build system.\n\
757 Makefile.local - This file is included in Makefile and allows creation\n\
758 of local build system targets. See Makefile.extra for\n\
759 examples.\n\
761 Here are some of the interesting predefined targets in Makefile.extra.\n\
762 To use them run 'make target ...' where ... can be any extra flag. For\n\
763 example if you want to compile OSCam for Dreambox (DM500) but do not\n\
764 have the compilers in the path, you can run:\n\
765 make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/\n\
767 Predefined targets in Makefile.extra:\n\
769 make libusb - Builds OSCam with libusb support\n\
770 make pcsc - Builds OSCam with PCSC support\n\
771 make pcsc-libusb - Builds OSCam with PCSC and libusb support\n\
772 make dm500 - Builds OSCam for Dreambox (DM500)\n\
773 make sh4 - Builds OSCam for SH4 boxes\n\
774 make azbox - Builds OSCam for AZBox STBs\n\
775 make mca - Builds OSCam for Matrix Cam Air (MCA)\n\
776 make coolstream - Builds OSCam for Coolstream HD1\n\
777 make coolstream2 - Builds OSCam for Coolstream HD2\n\
778 make dockstar - Builds OSCam for Dockstar\n\
779 make qboxhd - Builds OSCam for QBoxHD STBs\n\
780 make opensolaris - Builds OSCam for OpenSolaris\n\
781 make uclinux - Builds OSCam for m68k uClinux\n\
783 Predefined targets for static builds:\n\
784 make static - Builds OSCam statically\n\
785 make static-libusb - Builds OSCam with libusb linked statically\n\
786 make static-libcrypto - Builds OSCam with libcrypto linked statically\n\
787 make static-ssl - Builds OSCam with SSL support linked statically\n\
789 Developer targets:\n\
790 make tests - Builds '$(TESTS_BIN)' binary\n\
792 Examples:\n\
793 Build OSCam for SH4 (the compilers are in the path):\n\
794 make CROSS=sh4-linux-\n\n\
795 Build OSCam for SH4 (the compilers are in not in the path):\n\
796 make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/\n\
797 make CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/ CROSS=sh4-linux-\n\
798 make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-\n\n\
799 Build OSCam for SH4 with STAPI:\n\
800 make CROSS=sh4-linux- USE_STAPI=1\n\n\
801 Build OSCam for SH4 with STAPI and changed configuration directory:\n\
802 make CROSS=sh4-linux- USE_STAPI=1 CONF_DIR=/var/tuxbox/config\n\n\
803 Build OSCam for ARM with COOLAPI (coolstream aka NeutrinoHD):\n\
804 make CROSS=arm-cx2450x-linux-gnueabi- USE_COOLAPI=1\n\n\
805 Build OSCam for ARM with COOLAPI2 (coolstream aka NeutrinoHD):\n\
806 make CROSS=arm-pnx8400-linux-uclibcgnueabi- USE_COOLAPI2=1\n\n\
807 Build OSCam for MIPSEL with AZBOX support:\n\
808 make CROSS=mipsel-linux-uclibc- USE_AZBOX=1\n\n\
809 Build OSCam for ARM with MCA support:\n\
810 make CROSS=arm-none-linux-gnueabi- USE_MCA=1\n\n\
811 Build OSCam with libusb and PCSC:\n\
812 make USE_LIBUSB=1 USE_PCSC=1\n\n\
813 Build OSCam with static libusb:\n\
814 make USE_LIBUSB=1 LIBUSB_LIB=\"/usr/lib/libusb-1.0.a\"\n\n\
815 Build OSCam with static libcrypto:\n\
816 make USE_LIBCRYPTO=1 LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
817 Build OSCam with static libssl and libcrypto:\n\
818 make USE_SSL=1 SSL_LIB=\"/usr/lib/libssl.a\" LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
819 Build OSCam with static libdvbcsa:\n\
820 make USE_LIBDVBCSA=1 LIBDVBCSA_LIB=\"/usr/lib/libdvbcsa.a\"\n\n\
821 Build with verbose messages and size optimizations:\n\
822 make V=1 CC_OPTS=-Os\n\n\
823 Build and set oscam file name:\n\
824 make OSCAM_BIN=oscam\n\n\
825 Build and set oscam file name depending on revision:\n\
826 make OSCAM_BIN=oscam-\`./config.sh -r\`\n\n\
829 simple: all
830 default: all
831 debug: all
833 -include Makefile.extra
834 -include Makefile.local