- reduced binary size with AES constants, there was twice included (thanks to lpm11...
[oscam.git] / Makefile
blob35d4ad71d85d0ba131a09d4f099c55a54643802a
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 override CFLAGS += -DLIBDVBCSA_LIB=\"$(notdir $(subst $(empty) ,/,${LIBDVBCSA_LIB}))\"
56 endif
58 override STD_LIBS := -lm $(LIB_PTHREAD) $(LIB_DL) $(LIB_RT)
59 override STD_DEFS := -D'CS_SVN_VERSION="$(SVN_REV)"'
60 override STD_DEFS += -D'CS_CONFDIR="$(CONF_DIR)"'
62 # Compiler warnings
63 CC_WARN = -W -Wall -Wshadow -Wredundant-decls -Wstrict-prototypes -Wold-style-definition
65 # Compiler optimizations
66 ifeq ($(HOSTCC),clang)
67 CC_OPTS = -O2 -ggdb -pipe -ffunction-sections -fdata-sections -fomit-frame-pointer
68 else
69 CC_OPTS = -O2 -ggdb -pipe -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-schedule-insns
70 endif
72 CC = $(CROSS_DIR)$(CROSS)gcc
73 STRIP = $(CROSS_DIR)$(CROSS)strip
75 LDFLAGS = -Wl,--gc-sections
77 #enable sse2 on x86, neon on arm
78 TARGETHELP := $(shell $(CC) --target-help 2>&1)
79 ifneq (,$(findstring sse2,$(TARGETHELP)))
80 override CFLAGS += -mmmx -msse -msse2 -msse3
81 else ifneq (,$(findstring neon,$(TARGETHELP)))
82 ifeq "$(shell ./config.sh --enabled WITH_ARM_NEON)" "Y"
83 override CFLAGS += -mfpu=neon
84 endif
85 endif
87 # The linker for powerpc have bug that prevents --gc-sections from working
88 # Check for the linker version and if it matches disable --gc-sections
89 # For more information about the bug see:
90 # http://cygwin.com/ml/binutils/2005-01/msg00103.html
91 # The LD output is saved into variable and then processed, because if
92 # the output is piped directly into another command LD creates 4 files
93 # in your /tmp directory and doesn't delete them.
94 LINKER_VER := $(shell set -e; VER="`$(CC) $(LINKER_VER_OPT) 2>&1`"; echo $$VER | head -1 | cut -d' ' -f5)
96 # dm500 toolchain
97 ifeq "$(LINKER_VER)" "20040727"
98 LDFLAGS :=
99 endif
100 # dm600/7000/7020 toolchain
101 ifeq "$(LINKER_VER)" "20041121"
102 LDFLAGS :=
103 endif
104 # The OS X linker do not support --gc-sections
105 ifeq ($(uname_S),Darwin)
106 LDFLAGS :=
107 endif
109 # The compiler knows for what target it compiles, so use this information
110 TARGET := $(shell $(CC) -dumpmachine 2>/dev/null)
112 # Process USE_ variables
113 DEFAULT_STAPI_LIB = -L./stapi -loscam_stapi
114 DEFAULT_STAPI5_LIB = -L./stapi -loscam_stapi5
115 DEFAULT_COOLAPI_LIB = -lnxp -lrt
116 DEFAULT_COOLAPI2_LIB = -llnxUKAL -llnxcssUsr -llnxscsUsr -llnxnotifyqUsr -llnxplatUsr -lrt
117 DEFAULT_SU980_LIB = -lentropic -lrt
118 DEFAULT_AZBOX_LIB = -Lextapi/openxcas -lOpenXCASAPI
119 DEFAULT_LIBCRYPTO_LIB = -lcrypto
120 DEFAULT_SSL_LIB = -lssl
121 DEFAULT_LIBDVBCSA_LIB = -ldvbcsa
122 ifeq ($(uname_S),Linux)
123 DEFAULT_LIBUSB_LIB = -lusb-1.0 -lrt
124 else
125 DEFAULT_LIBUSB_LIB = -lusb-1.0
126 endif
127 # Since FreeBSD 8 (released in 2010) they are using their own
128 # libusb that is API compatible to libusb but with different soname
129 ifeq ($(uname_S),FreeBSD)
130 DEFAULT_LIBUSB_LIB = -lusb
131 endif
132 ifeq ($(uname_S),Darwin)
133 DEFAULT_SSL_LIB = -L/usr/local/opt/openssl/lib -lssl
134 DEFAULT_LIBCRYPTO_LIB = -L/usr/local/opt/openssl/lib -lcrypto
135 DEFAULT_LIBDVBCSA_FLAGS = -I/usr/local/opt/libdvbcsa/include
136 DEFAULT_LIBDVBCSA_LIB = -L/usr/local/opt/libdvbcsa/lib -ldvbcsa
137 DEFAULT_LIBUSB_FLAGS = -I/usr/local/opt/libusb/include
138 DEFAULT_LIBUSB_LIB = -L/usr/local/opt/libusb/lib -lusb-1.0 -lobjc -framework IOKit -framework CoreFoundation -framework Security
139 DEFAULT_PCSC_FLAGS = -I/usr/local/opt/pcsc-lite/include/PCSC
140 DEFAULT_PCSC_LIB = -L/usr/local/opt/pcsc-lite/lib -lpcsclite -lobjc -framework IOKit -framework CoreFoundation -framework PCSC
141 else
142 # Get the compiler's last include PATHs. Basicaly it is /usr/include
143 # but in case of cross compilation it might be something else.
145 # Since using -Iinc_path instructs the compiler to use inc_path
146 # (without add the toolchain system root) we need to have this hack
147 # to get the "real" last include path. Why we needs this?
148 # Well, the PCSC headers are broken and rely on having the directory
149 # that they are installed it to be in the include PATH.
151 # We can't just use -I/usr/include/PCSC because it won't work in
152 # case of cross compilation.
153 TOOLCHAIN_INC_DIR := $(strip $(shell echo | $(CC) -Wp,-v -xc - -fsyntax-only 2>&1 | grep include$ | tail -n 1))
154 DEFAULT_PCSC_FLAGS = -I$(TOOLCHAIN_INC_DIR)/PCSC -I$(TOOLCHAIN_INC_DIR)/../local/include/PCSC
155 DEFAULT_PCSC_LIB = -lpcsclite
156 endif
158 ifeq ($(uname_S),Cygwin)
159 DEFAULT_PCSC_LIB += -lwinscard
160 endif
162 DEFAULT_UTF8_FLAGS = -DWITH_UTF8
164 # Function to initialize USE related variables
165 # Usage: $(eval $(call prepare_use_flags,FLAG_NAME,PLUS_TARGET_TEXT))
166 define prepare_use_flags
167 override DEFAULT_$(1)_FLAGS:=$$(strip -DWITH_$(1)=1 $$(DEFAULT_$(1)_FLAGS))
168 ifdef USE_$(1)
169 $(1)_FLAGS:=$$(DEFAULT_$(1)_FLAGS)
170 $(1)_CFLAGS:=$$($(1)_FLAGS)
171 $(1)_LDFLAGS:=$$($(1)_FLAGS)
172 $(1)_LIB:=$$(DEFAULT_$(1)_LIB)
173 ifneq "$(2)" ""
174 override PLUS_TARGET:=$$(PLUS_TARGET)-$(2)
175 endif
176 override USE_CFLAGS+=$$($(1)_CFLAGS)
177 override USE_LDFLAGS+=$$($(1)_LDFLAGS)
178 override USE_LIBS+=$$($(1)_LIB)
179 override USE_FLAGS+=$$(if $$(USE_$(1)),USE_$(1))
180 endif
181 endef
183 # Initialize USE variables
184 $(eval $(call prepare_use_flags,STAPI,stapi))
185 $(eval $(call prepare_use_flags,STAPI5,stapi5))
186 $(eval $(call prepare_use_flags,COOLAPI,coolapi))
187 $(eval $(call prepare_use_flags,COOLAPI2,coolapi2))
188 $(eval $(call prepare_use_flags,SU980,su980))
189 $(eval $(call prepare_use_flags,AZBOX,azbox))
190 $(eval $(call prepare_use_flags,MCA,mca))
191 $(eval $(call prepare_use_flags,SSL,ssl))
192 $(eval $(call prepare_use_flags,LIBCRYPTO,))
193 $(eval $(call prepare_use_flags,LIBUSB,libusb))
194 $(eval $(call prepare_use_flags,PCSC,pcsc))
195 $(eval $(call prepare_use_flags,LIBDVBCSA,libdvbcsa))
196 $(eval $(call prepare_use_flags,UTF8))
198 # Add PLUS_TARGET and EXTRA_TARGET to TARGET
199 ifdef NO_PLUS_TARGET
200 override TARGET := $(TARGET)$(EXTRA_TARGET)
201 else
202 override TARGET := $(TARGET)$(PLUS_TARGET)$(EXTRA_TARGET)
203 endif
205 EXTRA_CFLAGS = $(EXTRA_FLAGS)
206 EXTRA_LDFLAGS = $(EXTRA_FLAGS)
208 # Add USE_xxx, EXTRA_xxx and STD_xxx vars
209 override CC_WARN += $(EXTRA_CC_WARN)
210 override CC_OPTS += $(EXTRA_CC_OPTS)
211 override CFLAGS += $(USE_CFLAGS) $(EXTRA_CFLAGS)
212 override LDFLAGS += $(USE_LDFLAGS) $(EXTRA_LDFLAGS)
213 override LIBS += $(USE_LIBS) $(EXTRA_LIBS) $(STD_LIBS)
215 override STD_DEFS += -D'CS_TARGET="$(TARGET)"'
217 # Setup quiet build
219 SAY = @true
220 ifndef V
221 Q = @
222 NP = --no-print-directory
223 SAY = @echo
224 endif
226 BINDIR := Distribution
227 override BUILD_DIR := build
228 OBJDIR := $(BUILD_DIR)/$(TARGET)
230 # Include config.mak which contains variables for all enabled modules
231 # These variables will be used to select only needed files for compilation
232 -include $(OBJDIR)/config.mak
234 OSCAM_BIN := $(BINDIR)/oscam-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
235 TESTS_BIN := tests.bin
236 LIST_SMARGO_BIN := $(BINDIR)/list_smargo-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
238 # Build list_smargo-.... only when WITH_LIBUSB build is requested.
239 ifndef USE_LIBUSB
240 override LIST_SMARGO_BIN =
241 endif
243 SRC-$(CONFIG_LIB_AES) += cscrypt/aes.c
244 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_add.c
245 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_asm.c
246 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_ctx.c
247 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_div.c
248 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_exp.c
249 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_lib.c
250 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_mul.c
251 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_print.c
252 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_shift.c
253 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_sqr.c
254 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_word.c
255 SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/mem.c
256 SRC-$(CONFIG_LIB_DES) += cscrypt/des.c
257 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_cbc.c
258 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_ecb.c
259 SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_skey.c
260 SRC-y += cscrypt/md5.c
261 SRC-$(CONFIG_LIB_RC6) += cscrypt/rc6.c
262 SRC-$(CONFIG_LIB_SHA1) += cscrypt/sha1.c
263 SRC-$(CONFIG_LIB_MDC2) += cscrypt/mdc2.c
264 SRC-$(CONFIG_LIB_FAST_AES) += cscrypt/fast_aes.c
265 SRC-$(CONFIG_LIB_SHA256) += cscrypt/sha256.c
267 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/atr.c
268 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/icc_async.c
269 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/io_serial.c
270 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t0.c
271 SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t1.c
272 SRC-$(CONFIG_CARDREADER_INTERNAL_AZBOX) += csctapi/ifd_azbox.c
273 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI) += csctapi/ifd_cool.c
274 SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI2) += csctapi/ifd_cool.c
275 SRC-$(CONFIG_CARDREADER_DB2COM) += csctapi/ifd_db2com.c
276 SRC-$(CONFIG_CARDREADER_MP35) += csctapi/ifd_mp35.c
277 SRC-$(CONFIG_CARDREADER_PCSC) += csctapi/ifd_pcsc.c
278 SRC-$(CONFIG_CARDREADER_PHOENIX) += csctapi/ifd_phoenix.c
279 SRC-$(CONFIG_CARDREADER_DRECAS) += csctapi/ifd_drecas.c
280 SRC-$(CONFIG_CARDREADER_SC8IN1) += csctapi/ifd_sc8in1.c
281 SRC-$(CONFIG_CARDREADER_INTERNAL_SCI) += csctapi/ifd_sci.c
282 SRC-$(CONFIG_CARDREADER_SMARGO) += csctapi/ifd_smargo.c
283 SRC-$(CONFIG_CARDREADER_SMART) += csctapi/ifd_smartreader.c
284 SRC-$(CONFIG_CARDREADER_STINGER) += csctapi/ifd_stinger.c
285 SRC-$(CONFIG_CARDREADER_STAPI) += csctapi/ifd_stapi.c
286 SRC-$(CONFIG_CARDREADER_STAPI5) += csctapi/ifd_stapi.c
288 SRC-$(CONFIG_LIB_MINILZO) += minilzo/minilzo.c
290 SRC-$(CONFIG_CS_ANTICASC) += module-anticasc.c
291 SRC-$(CONFIG_CS_CACHEEX) += module-cacheex.c
292 SRC-$(CONFIG_MODULE_CAMD33) += module-camd33.c
293 SRC-$(CONFIG_CS_CACHEEX) += module-camd35-cacheex.c
294 SRC-$(sort $(CONFIG_MODULE_CAMD35) $(CONFIG_MODULE_CAMD35_TCP)) += module-camd35.c
295 SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
296 SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
297 SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
298 SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
299 SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
300 SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
301 SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
302 SRC-$(CONFIG_WITH_MCA) += module-dvbapi-mca.c
303 ### SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi.c
304 ### experimental reversed API
305 SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi-legacy.c
306 SRC-$(CONFIG_WITH_COOLAPI2) += module-dvbapi-coolapi.c
307 SRC-$(CONFIG_WITH_SU980) += module-dvbapi-coolapi.c
308 SRC-$(CONFIG_WITH_STAPI) += module-dvbapi-stapi.c
309 SRC-$(CONFIG_WITH_STAPI5) += module-dvbapi-stapi5.c
310 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi-chancache.c
311 SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi.c
312 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-helper.c
313 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-sms.c
314 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-remm.c
315 SRC-$(CONFIG_MODULE_GBOX) += module-gbox-cards.c
316 SRC-$(CONFIG_MODULE_GBOX) += module-gbox.c
317 SRC-$(CONFIG_LCDSUPPORT) += module-lcd.c
318 SRC-$(CONFIG_LEDSUPPORT) += module-led.c
319 SRC-$(CONFIG_MODULE_MONITOR) += module-monitor.c
320 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd.c
321 SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd-des.c
322 SRC-$(CONFIG_MODULE_PANDORA) += module-pandora.c
323 SRC-$(CONFIG_MODULE_GHTTP) += module-ghttp.c
324 SRC-$(CONFIG_MODULE_RADEGAST) += module-radegast.c
325 SRC-$(CONFIG_MODULE_SCAM) += module-scam.c
326 SRC-$(CONFIG_MODULE_SERIAL) += module-serial.c
327 SRC-$(CONFIG_MODULE_STREAMRELAY) += module-streamrelay.c
328 SRC-$(CONFIG_WITH_LB) += module-stat.c
329 SRC-$(CONFIG_WEBIF) += module-webif-lib.c
330 SRC-$(CONFIG_WEBIF) += module-webif-tpl.c
331 SRC-$(CONFIG_WEBIF) += module-webif.c
332 SRC-$(CONFIG_WEBIF) += webif/pages.c
333 SRC-$(CONFIG_WITH_CARDREADER) += reader-common.c
334 SRC-$(CONFIG_READER_BULCRYPT) += reader-bulcrypt.c
335 SRC-$(CONFIG_READER_CONAX) += reader-conax.c
336 SRC-$(CONFIG_READER_CRYPTOWORKS) += reader-cryptoworks.c
337 SRC-$(CONFIG_READER_DGCRYPT) += reader-dgcrypt.c
338 SRC-$(CONFIG_READER_DRE) += reader-dre.c
339 SRC-$(CONFIG_READER_DRE) += reader-dre-cas.c
340 SRC-$(CONFIG_READER_DRE) += reader-dre-common.c
341 SRC-$(CONFIG_READER_DRE) += reader-dre-st20.c
342 SRC-$(CONFIG_READER_GRIFFIN) += reader-griffin.c
343 SRC-$(CONFIG_READER_IRDETO) += reader-irdeto.c
344 SRC-$(CONFIG_READER_NAGRA_COMMON) += reader-nagra-common.c
345 SRC-$(CONFIG_READER_NAGRA) += reader-nagra.c
346 SRC-$(CONFIG_READER_NAGRA_MERLIN) += reader-nagracak7.c
347 SRC-$(CONFIG_READER_SECA) += reader-seca.c
348 SRC-$(CONFIG_READER_TONGFANG) += reader-tongfang.c
349 SRC-$(CONFIG_READER_VIACCESS) += reader-viaccess.c
350 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard-common.c
351 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard1.c
352 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard12.c
353 SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard2.c
354 SRC-y += oscam-aes.c
355 SRC-y += oscam-array.c
356 SRC-y += oscam-hashtable.c
357 SRC-y += oscam-cache.c
358 SRC-y += oscam-chk.c
359 SRC-y += oscam-client.c
360 SRC-y += oscam-conf.c
361 SRC-y += oscam-conf-chk.c
362 SRC-y += oscam-conf-mk.c
363 SRC-y += oscam-config-account.c
364 SRC-y += oscam-config-global.c
365 SRC-y += oscam-config-reader.c
366 SRC-y += oscam-config.c
367 SRC-y += oscam-ecm.c
368 SRC-y += oscam-emm.c
369 SRC-y += oscam-emm-cache.c
370 SRC-y += oscam-failban.c
371 SRC-y += oscam-files.c
372 SRC-y += oscam-garbage.c
373 SRC-y += oscam-lock.c
374 SRC-y += oscam-log.c
375 SRC-y += oscam-log-reader.c
376 SRC-y += oscam-net.c
377 SRC-y += oscam-llist.c
378 SRC-y += oscam-reader.c
379 SRC-y += oscam-simples.c
380 SRC-y += oscam-string.c
381 SRC-y += oscam-time.c
382 SRC-y += oscam-work.c
383 SRC-y += oscam.c
384 # config.c is automatically generated by config.sh in OBJDIR
385 SRC-y += config.c
386 ifdef BUILD_TESTS
387 SRC-y += tests.c
388 override STD_DEFS += -DBUILD_TESTS=1
389 endif
391 SRC := $(SRC-y)
392 OBJ := $(addprefix $(OBJDIR)/,$(subst .c,.o,$(SRC)))
393 SRC := $(subst config.c,$(OBJDIR)/config.c,$(SRC))
395 # The default build target rebuilds the config.mak if needed and then
396 # starts the compilation.
397 all:
398 @./config.sh --use-flags "$(USE_FLAGS)" --objdir "$(OBJDIR)" --make-config.mak
399 @-mkdir -p $(OBJDIR)/cscrypt $(OBJDIR)/csctapi $(OBJDIR)/minilzo $(OBJDIR)/webif
400 @-printf "\
401 +-------------------------------------------------------------------------------\n\
402 | OSCam ver: $(VER) rev: $(SVN_REV) target: $(TARGET)\n\
403 | Tools:\n\
404 | CROSS = $(CROSS_DIR)$(CROSS)\n\
405 | CC = $(CC)\n\
406 | Settings:\n\
407 | CONF_DIR = $(CONF_DIR)\n\
408 | CC_OPTS = $(strip $(CC_OPTS))\n\
409 | CC_WARN = $(strip $(CC_WARN))\n\
410 | CFLAGS = $(strip $(CFLAGS))\n\
411 | LDFLAGS = $(strip $(LDFLAGS))\n\
412 | LIBS = $(strip $(LIBS))\n\
413 | UseFlags = $(addsuffix =1,$(USE_FLAGS))\n\
414 | Config:\n\
415 | Addons : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled addons)\n\
416 | Protocols: $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled protocols | sed -e 's|MODULE_||g')\n\
417 | Readers : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled readers | sed -e 's|READER_||g')\n\
418 | CardRdrs : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled card_readers | sed -e 's|CARDREADER_||g')\n\
419 | Compiler : $(shell $(CC) --version 2>/dev/null | head -n 1)\n\
420 | Config : $(OBJDIR)/config.mak\n\
421 | Binary : $(OSCAM_BIN)\n\
422 +-------------------------------------------------------------------------------\n"
423 ifeq "$(shell ./config.sh --enabled WEBIF)" "Y"
424 @$(MAKE) --no-print-directory --quiet -C webif
425 endif
426 @$(MAKE) --no-print-directory $(OSCAM_BIN) $(LIST_SMARGO_BIN)
428 $(OSCAM_BIN).debug: $(OBJ)
429 $(SAY) "LINK $@"
430 $(Q)$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@
432 $(OSCAM_BIN): $(OSCAM_BIN).debug
433 $(SAY) "STRIP $@"
434 $(Q)cp $(OSCAM_BIN).debug $(OSCAM_BIN)
435 $(Q)$(STRIP) $(OSCAM_BIN)
437 $(LIST_SMARGO_BIN): utils/list_smargo.c
438 $(SAY) "BUILD $@"
439 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) $(LDFLAGS) utils/list_smargo.c $(LIBS) -o $@
441 $(OBJDIR)/config.o: $(OBJDIR)/config.c
442 $(SAY) "CONF $<"
443 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
445 $(OBJDIR)/%.o: %.c Makefile
446 @$(CC) $(CFLAGS) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
447 $(SAY) "CC $<"
448 $(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
450 -include $(subst .o,.d,$(OBJ))
452 tests:
453 @-$(MAKE) --no-print-directory BUILD_TESTS=1 OSCAM_BIN=$(TESTS_BIN)
454 @-touch oscam.c
455 # The above is really hideous hack :-) If we don't force oscam.c recompilation
456 # after we've build the tests binary, the next "normal" compilation would fail
457 # because there would be no run_tests() function. So the touch is there to
458 # ensure oscam.c would be recompiled.
460 config:
461 $(SHELL) ./config.sh --gui
463 menuconfig: config
465 allyesconfig:
466 @echo "Enabling all config options."
467 @-$(SHELL) ./config.sh --enable all
469 allnoconfig:
470 @echo "Disabling all config options."
471 @-$(SHELL) ./config.sh --disable all
473 defconfig:
474 @echo "Restoring default config."
475 @-$(SHELL) ./config.sh --restore
477 clean:
478 @-for FILE in $(BUILD_DIR)/* $(TESTS_BIN) $(TESTS_BIN).debug; do \
479 echo "RM $$FILE"; \
480 rm -rf $$FILE; \
481 done
482 @-rm -rf $(BUILD_DIR) lib
484 distclean: clean
485 @-for FILE in $(BINDIR)/list_smargo-* $(BINDIR)/oscam-$(VER)*; do \
486 echo "RM $$FILE"; \
487 rm -rf $$FILE; \
488 done
489 @-$(MAKE) --no-print-directory --quiet -C webif clean
491 README.build:
492 @echo "Extracting 'make help' into $@ file."
493 @-printf "\
494 ** This file is generated from 'make help' output, do not edit it. **\n\
496 " > $@
497 @-$(MAKE) --no-print-directory help >> $@
498 @echo "Done."
500 README.config:
501 @echo "Extracting 'config.sh --help' into $@ file."
502 @-printf "\
503 ** This file is generated from 'config.sh --help' output, do not edit it. **\n\
505 " > $@
506 @-./config.sh --help >> $@
507 @echo "Done."
509 help:
510 @-printf "\
511 OSCam build system documentation\n\
512 ================================\n\
514 Build variables:\n\
515 The build variables are set on the make command line and control the build\n\
516 process. Setting the variables lets you enable additional features, request\n\
517 extra libraries and more. Currently recognized build variables are:\n\
519 CROSS=prefix - Set tools prefix. This variable is used when OScam is being\n\
520 cross compiled. For example if you want to cross compile\n\
521 for SH4 architecture you can run: 'make CROSS=sh4-linux-'\n\
522 If you don't have the directory where cross compilers are\n\
523 in your PATH you can run:\n\
524 'make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-'\n\
526 CROSS_DIR=dir - Set tools directory. This variable is added in front of\n\
527 CROSS variable. CROSS_DIR is useful if you want to use\n\
528 predefined targets that are setting CROSS, but you don't have\n\
529 the cross compilers in your PATH. For example:\n\
530 'make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/'\n\
531 'make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/'\n\
533 CONF_DIR=/dir - Set OSCam config directory. For example to change config\n\
534 directory to /etc run: 'make CONF_DIR=/etc'\n\
535 The default config directory is: '$(CONF_DIR)'\n\
537 CC_OPTS=text - This variable holds compiler optimization parameters.\n\
538 Default CC_OPTS value is:\n\
539 '$(CC_OPTS)'\n\
540 To add text to this variable set EXTRA_CC_OPTS=text.\n\
542 CC_WARN=text - This variable holds compiler warning parameters.\n\
543 Default CC_WARN value is:\n\
544 '$(CC_WARN)'\n\
545 To add text to this variable set EXTRA_CC_WARN=text.\n\
547 V=1 - Request build process to print verbose messages. By\n\
548 default the only messages that are shown are simple info\n\
549 what is being compiled. To request verbose build run:\n\
550 'make V=1'\n\
552 Extra build variables:\n\
553 These variables add text to build variables. They are useful if you want\n\
554 to add additional options to already set variables without overwriting them\n\
555 Currently defined EXTRA_xxx variables are:\n\
557 EXTRA_CC_OPTS - Add text to CC_OPTS.\n\
558 Example: 'make EXTRA_CC_OPTS=-Os'\n\
560 EXTRA_CC_WARN - Add text to CC_WARN.\n\
561 Example: 'make EXTRA_CC_WARN=-Wshadow'\n\
563 EXTRA_TARGET - Add text to TARGET.\n\
564 Example: 'make EXTRA_TARGET=-private'\n\
566 EXTRA_CFLAGS - Add text to CFLAGS (affects compilation).\n\
567 Example: 'make EXTRA_CFLAGS=\"-DBLAH=1 -I/opt/local\"'\n\
569 EXTRA_LDFLAGS - Add text to LDFLAGS (affects linking).\n\
570 Example: 'make EXTRA_LDFLAGS=-Llibdir'\n\
572 EXTRA_FLAGS - Add text to both EXTRA_CFLAGS and EXTRA_LDFLAGS.\n\
573 Example: 'make EXTRA_FLAGS=-DBLAH=1'\n\
575 EXTRA_LIBS - Add text to LIBS (affects linking).\n\
576 Example: 'make EXTRA_LIBS=\"-L./stapi -loscam_stapi\"'\n\
578 Use flags:\n\
579 Use flags are used to request additional libraries or features to be used\n\
580 by OSCam. Currently defined USE_xxx flags are:\n\
582 USE_LIBUSB=1 - Request linking with libusb. The variables that control\n\
583 USE_LIBUSB=1 build are:\n\
584 LIBUSB_FLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
585 LIBUSB_CFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
586 LIBUSB_LDFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
587 LIBUSB_LIB='$(DEFAULT_LIBUSB_LIB)'\n\
588 Using USE_LIBUSB=1 adds to '-libusb' to PLUS_TARGET.\n\
589 To build with static libusb, set the variable LIBUSB_LIB\n\
590 to contain full path of libusb library. For example:\n\
591 make USE_LIBUSB=1 LIBUSB_LIB=/usr/lib/libusb-1.0.a\n\
593 USE_PCSC=1 - Request linking with PCSC. The variables that control\n\
594 USE_PCSC=1 build are:\n\
595 PCSC_FLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
596 PCSC_CFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
597 PCSC_LDFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
598 PCSC_LIB='$(DEFAULT_PCSC_LIB)'\n\
599 Using USE_PCSC=1 adds to '-pcsc' to PLUS_TARGET.\n\
600 To build with static PCSC, set the variable PCSC_LIB\n\
601 to contain full path of PCSC library. For example:\n\
602 make USE_PCSC=1 PCSC_LIB=/usr/local/lib/libpcsclite.a\n\
604 USE_STAPI=1 - Request linking with STAPI. The variables that control\n\
605 USE_STAPI=1 build are:\n\
606 STAPI_FLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
607 STAPI_CFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
608 STAPI_LDFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
609 STAPI_LIB='$(DEFAULT_STAPI_LIB)'\n\
610 Using USE_STAPI=1 adds to '-stapi' to PLUS_TARGET.\n\
611 In order for USE_STAPI to work you have to create stapi\n\
612 directory and put liboscam_stapi.a file in it.\n\
614 USE_STAPI5=1 - Request linking with STAPI5. The variables that control\n\
615 USE_STAPI5=1 build are:\n\
616 STAPI5_FLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
617 STAPI5_CFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
618 STAPI5_LDFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
619 STAPI5_LIB='$(DEFAULT_STAPI5_LIB)'\n\
620 Using USE_STAPI5=1 adds to '-stapi' to PLUS_TARGET.\n\
621 In order for USE_STAPI5 to work you have to create stapi\n\
622 directory and put liboscam_stapi5.a file in it.\n\
624 USE_COOLAPI=1 - Request support for Coolstream API (libnxp) aka NeutrinoHD\n\
625 box. The variables that control the build are:\n\
626 COOLAPI_FLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
627 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
628 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
629 COOLAPI_LIB='$(DEFAULT_COOLAPI_LIB)'\n\
630 Using USE_COOLAPI=1 adds to '-coolapi' to PLUS_TARGET.\n\
631 In order for USE_COOLAPI to work you have to have libnxp.so\n\
632 library in your cross compilation toolchain.\n\
634 USE_COOLAPI2=1 - Request support for Coolstream API aka NeutrinoHD\n\
635 box. The variables that control the build are:\n\
636 COOLAPI_FLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
637 COOLAPI_CFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
638 COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
639 COOLAPI_LIB='$(DEFAULT_COOLAPI2_LIB)'\n\
640 Using USE_COOLAPI2=1 adds to '-coolapi2' to PLUS_TARGET.\n\
641 In order for USE_COOLAPI2 to work you have to have liblnxUKAL.so,\n\
642 liblnxcssUsr.so, liblnxscsUsr.so, liblnxnotifyqUsr.so, liblnxplatUsr.so\n\
643 library in your cross compilation toolchain.\n\
645 USE_SU980=1 - Request support for SU980 API (libentropic) aka Enimga2 arm\n\
646 box. The variables that control the build are:\n\
647 COOLAPI_FLAGS='$(DEFAULT_SU980_FLAGS)'\n\
648 COOLAPI_CFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
649 COOLAPI_LDFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
650 COOLAPI_LIB='$(DEFAULT_SU980_LIB)'\n\
651 Using USE_SU980=1 adds to '-su980' to PLUS_TARGET.\n\
652 In order for USE_SU980 to work you have to have libentropic.a\n\
653 library in your cross compilation toolchain.\n\
655 USE_AZBOX=1 - Request support for AZBOX (openxcas)\n\
656 box. The variables that control the build are:\n\
657 AZBOX_FLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
658 AZBOX_CFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
659 AZBOX_LDFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
660 AZBOX_LIB='$(DEFAULT_AZBOX_LIB)'\n\
661 Using USE_AZBOX=1 adds to '-azbox' to PLUS_TARGET.\n\
662 extapi/openxcas/libOpenXCASAPI.a library that is shipped\n\
663 with OSCam is compiled for MIPSEL.\n\
665 USE_MCA=1 - Request support for Matrix Cam Air (MCA).\n\
666 The variables that control the build are:\n\
667 MCA_FLAGS='$(DEFAULT_MCA_FLAGS)'\n\
668 MCA_CFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
669 MCA_LDFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
670 Using USE_MCA=1 adds to '-mca' to PLUS_TARGET.\n\
672 USE_LIBCRYPTO=1 - Request linking with libcrypto instead of using OSCam\n\
673 internal crypto functions. USE_LIBCRYPTO is automatically\n\
674 enabled if the build is configured with SSL support. The\n\
675 variables that control USE_LIBCRYPTO=1 build are:\n\
676 LIBCRYPTO_FLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
677 LIBCRYPTO_CFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
678 LIBCRYPTO_LDFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
679 LIBCRYPTO_LIB='$(DEFAULT_LIBCRYPTO_LIB)'\n\
681 USE_SSL=1 - Request linking with libssl. USE_SSL is automatically\n\
682 enabled if the build is configured with SSL support. The\n\
683 variables that control USE_SSL=1 build are:\n\
684 SSL_FLAGS='$(DEFAULT_SSL_FLAGS)'\n\
685 SSL_CFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
686 SSL_LDFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
687 SSL_LIB='$(DEFAULT_SSL_LIB)'\n\
688 Using USE_SSL=1 adds to '-ssl' to PLUS_TARGET.\n\
690 USE_LIBDVBCSA=1 - Request linking with libdvbcsa. USE_LIBDVBCSA is automatically\n\
691 The variables that control USE_LIBDVBCSA=1 build are:\n\
692 LIBDVBCSA_FLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
693 LIBDVBCSA_CFLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
694 LIBDVBCSA_LDFLAGS='$(DEFAULT_LIBDVBCSA_FLAGS)'\n\
695 LIBDVBCSA_LIB='$(DEFAULT_LIBDVBCSA_LIB)'\n\
697 USE_UTF8=1 - Request UTF-8 enabled webif by default.\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