You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

795 lines
33 KiB

SHELL = /bin/sh
.SUFFIXES:
.SUFFIXES: .o .c
.PHONY: all tests help README.build README.config simple default debug config menuconfig allyesconfig allnoconfig defconfig clean distclean
VER := $(shell ./config.sh --oscam-version)
SVN_REV := $(shell ./config.sh --oscam-revision)
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
# This let's us use uname_S tests to detect cygwin
ifneq (,$(findstring CYGWIN,$(uname_S)))
uname_S := Cygwin
endif
LINKER_VER_OPT:=-Wl,--version
# Find OSX SDK
ifeq ($(uname_S),Darwin)
# Setting OSX_VER allows you to choose prefered version if you have
# two SDKs installed. For example if you have 10.6 and 10.5 installed
# you can choose 10.5 by using 'make USE_PCSC=1 OSX_VER=10.5'
# './config.sh --detect-osx-sdk-version' returns the newest SDK if
# SDK_VER is not set.
OSX_SDK := $(shell ./config.sh --detect-osx-sdk-version $(OSX_VER))
LINKER_VER_OPT:=-Wl,-v
endif
ifeq "$(shell ./config.sh --enabled WITH_SSL)" "Y"
override USE_SSL=1
override USE_LIBCRYPTO=1
endif
ifdef USE_SSL
override USE_LIBCRYPTO=1
endif
CONF_DIR = /usr/local/etc
LIB_PTHREAD = -lpthread
LIB_DL = -ldl
LIB_RT :=
ifeq ($(uname_S),Linux)
ifeq "$(shell ./config.sh --enabled CLOCKFIX)" "Y"
LIB_RT := -lrt
endif
endif
ifeq ($(uname_S),FreeBSD)
LIB_DL :=
endif
override STD_LIBS := -lm $(LIB_PTHREAD) $(LIB_DL) $(LIB_RT)
override STD_DEFS := -D'CS_SVN_VERSION="$(SVN_REV)"'
override STD_DEFS += -D'CS_CONFDIR="$(CONF_DIR)"'
# Compiler warnings
CC_WARN = -W -Wall -Wshadow -Wredundant-decls -Wstrict-prototypes -Wold-style-definition
# Compiler optimizations
CC_OPTS = -O2 -ggdb -pipe -ffunction-sections -fdata-sections
CC = $(CROSS_DIR)$(CROSS)gcc
STRIP = $(CROSS_DIR)$(CROSS)strip
LDFLAGS = -Wl,--gc-sections
# The linker for powerpc have bug that prevents --gc-sections from working
# Check for the linker version and if it matches disable --gc-sections
# For more information about the bug see:
# http://cygwin.com/ml/binutils/2005-01/msg00103.html
# The LD output is saved into variable and then processed, because if
# the output is piped directly into another command LD creates 4 files
# in your /tmp directory and doesn't delete them.
LINKER_VER := $(shell set -e; VER="`$(CC) $(LINKER_VER_OPT) 2>&1`"; echo $$VER | head -1 | cut -d' ' -f5)
# dm500 toolchain
ifeq "$(LINKER_VER)" "20040727"
LDFLAGS :=
endif
# dm600/7000/7020 toolchain
ifeq "$(LINKER_VER)" "20041121"
LDFLAGS :=
endif
# The OS X linker do not support --gc-sections
ifeq ($(uname_S),Darwin)
LDFLAGS :=
endif
# The compiler knows for what target it compiles, so use this information
TARGET := $(shell $(CC) -dumpmachine 2>/dev/null)
# Process USE_ variables
DEFAULT_STAPI_LIB = -L./stapi -loscam_stapi
DEFAULT_STAPI5_LIB = -L./stapi -loscam_stapi5
DEFAULT_COOLAPI_LIB = -lnxp -lrt
DEFAULT_COOLAPI2_LIB = -llnxUKAL -llnxcssUsr -llnxscsUsr -llnxnotifyqUsr -llnxplatUsr -lrt
DEFAULT_SU980_LIB = -lentropic -lrt
DEFAULT_AZBOX_LIB = -Lextapi/openxcas -lOpenXCASAPI
DEFAULT_LIBCRYPTO_LIB = -lcrypto
DEFAULT_SSL_LIB = -lssl
ifeq ($(uname_S),Linux)
DEFAULT_LIBUSB_LIB = -lusb-1.0 -lrt
else
DEFAULT_LIBUSB_LIB = -lusb-1.0
endif
# Since FreeBSD 8 (released in 2010) they are using their own
# libusb that is API compatible to libusb but with different soname
ifeq ($(uname_S),FreeBSD)
DEFAULT_LIBUSB_LIB = -lusb
endif
ifeq ($(uname_S),Darwin)
DEFAULT_LIBUSB_FLAGS = -I/opt/local/include
DEFAULT_LIBUSB_LIB = -L/opt/local/lib -lusb-1.0
DEFAULT_PCSC_FLAGS = -isysroot $(OSX_SDK)
DEFAULT_PCSC_LIB = -isysroot $(OSX_SDK) -framework IOKit -framework CoreFoundation -framework PCSC
else
# Get the compiler's last include PATHs. Basicaly it is /usr/include
# but in case of cross compilation it might be something else.
#
# Since using -Iinc_path instructs the compiler to use inc_path
# (without add the toolchain system root) we need to have this hack
# to get the "real" last include path. Why we needs this?
# Well, the PCSC headers are broken and rely on having the directory
# that they are installed it to be in the include PATH.
#
# We can't just use -I/usr/include/PCSC because it won't work in
# case of cross compilation.
TOOLCHAIN_INC_DIR := $(strip $(shell echo | $(CC) -Wp,-v -xc - -fsyntax-only 2>&1 | grep include$ | tail -n 1))
DEFAULT_PCSC_FLAGS = -I$(TOOLCHAIN_INC_DIR)/PCSC -I$(TOOLCHAIN_INC_DIR)/../local/include/PCSC
DEFAULT_PCSC_LIB = -lpcsclite
endif
ifeq ($(uname_S),Cygwin)
DEFAULT_PCSC_LIB += -lwinscard
endif
DEFAULT_UTF8_FLAGS = -DWITH_UTF8
# Function to initialize USE related variables
# Usage: $(eval $(call prepare_use_flags,FLAG_NAME,PLUS_TARGET_TEXT))
define prepare_use_flags
override DEFAULT_$(1)_FLAGS:=$$(strip -DWITH_$(1)=1 $$(DEFAULT_$(1)_FLAGS))
ifdef USE_$(1)
$(1)_FLAGS:=$$(DEFAULT_$(1)_FLAGS)
$(1)_CFLAGS:=$$($(1)_FLAGS)
$(1)_LDFLAGS:=$$($(1)_FLAGS)
$(1)_LIB:=$$(DEFAULT_$(1)_LIB)
ifneq "$(2)" ""
override PLUS_TARGET:=$$(PLUS_TARGET)-$(2)
endif
override USE_CFLAGS+=$$($(1)_CFLAGS)
override USE_LDFLAGS+=$$($(1)_LDFLAGS)
override USE_LIBS+=$$($(1)_LIB)
override USE_FLAGS+=$$(if $$(USE_$(1)),USE_$(1))
endif
endef
# Initialize USE variables
$(eval $(call prepare_use_flags,STAPI,stapi))
$(eval $(call prepare_use_flags,STAPI5,stapi5))
$(eval $(call prepare_use_flags,COOLAPI,coolapi))
$(eval $(call prepare_use_flags,COOLAPI2,coolapi2))
$(eval $(call prepare_use_flags,SU980,su980))
$(eval $(call prepare_use_flags,AZBOX,azbox))
$(eval $(call prepare_use_flags,MCA,mca))
$(eval $(call prepare_use_flags,SSL,ssl))
$(eval $(call prepare_use_flags,LIBCRYPTO,))
$(eval $(call prepare_use_flags,LIBUSB,libusb))
$(eval $(call prepare_use_flags,PCSC,pcsc))
$(eval $(call prepare_use_flags,UTF8))
# Add PLUS_TARGET and EXTRA_TARGET to TARGET
ifdef NO_PLUS_TARGET
override TARGET := $(TARGET)$(EXTRA_TARGET)
else
override TARGET := $(TARGET)$(PLUS_TARGET)$(EXTRA_TARGET)
endif
EXTRA_CFLAGS = $(EXTRA_FLAGS)
EXTRA_LDFLAGS = $(EXTRA_FLAGS)
# Add USE_xxx, EXTRA_xxx and STD_xxx vars
override CC_WARN += $(EXTRA_CC_WARN)
override CC_OPTS += $(EXTRA_CC_OPTS)
override CFLAGS += $(USE_CFLAGS) $(EXTRA_CFLAGS)
override LDFLAGS += $(USE_LDFLAGS) $(EXTRA_LDFLAGS)
override LIBS += $(USE_LIBS) $(EXTRA_LIBS) $(STD_LIBS)
override STD_DEFS += -D'CS_TARGET="$(TARGET)"'
# Setup quiet build
Q =
SAY = @true
ifndef V
Q = @
NP = --no-print-directory
SAY = @echo
endif
BINDIR := Distribution
override BUILD_DIR := build
OBJDIR := $(BUILD_DIR)/$(TARGET)
# Include config.mak which contains variables for all enabled modules
# These variables will be used to select only needed files for compilation
-include $(OBJDIR)/config.mak
OSCAM_BIN := $(BINDIR)/oscam-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
TESTS_BIN := tests.bin
LIST_SMARGO_BIN := $(BINDIR)/list_smargo-$(VER)$(SVN_REV)-$(subst cygwin,cygwin.exe,$(TARGET))
# Build list_smargo-.... only when WITH_LIBUSB build is requested.
ifndef USE_LIBUSB
override LIST_SMARGO_BIN =
endif
SRC-$(CONFIG_LIB_AES) += cscrypt/aes.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_add.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_asm.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_ctx.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_div.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_exp.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_lib.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_mul.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_print.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_shift.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_sqr.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/bn_word.c
SRC-$(CONFIG_LIB_BIGNUM) += cscrypt/mem.c
SRC-$(CONFIG_LIB_DES) += cscrypt/des.c
SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_cbc.c
SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_ecb.c
SRC-$(CONFIG_LIB_IDEA) += cscrypt/i_skey.c
SRC-y += cscrypt/md5.c
SRC-$(CONFIG_LIB_RC6) += cscrypt/rc6.c
SRC-$(CONFIG_LIB_SHA1) += cscrypt/sha1.c
SRC-$(CONFIG_LIB_MDC2) += cscrypt/mdc2.c
SRC-$(CONFIG_LIB_FAST_AES) += cscrypt/fast_aes.c
SRC-$(CONFIG_LIB_SHA256) += cscrypt/sha256.c
SRC-$(CONFIG_WITH_CARDREADER) += csctapi/atr.c
SRC-$(CONFIG_WITH_CARDREADER) += csctapi/icc_async.c
SRC-$(CONFIG_WITH_CARDREADER) += csctapi/io_serial.c
SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t0.c
SRC-$(CONFIG_WITH_CARDREADER) += csctapi/protocol_t1.c
SRC-$(CONFIG_CARDREADER_INTERNAL_AZBOX) += csctapi/ifd_azbox.c
SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI) += csctapi/ifd_cool.c
SRC-$(CONFIG_CARDREADER_INTERNAL_COOLAPI2) += csctapi/ifd_cool.c
SRC-$(CONFIG_CARDREADER_DB2COM) += csctapi/ifd_db2com.c
SRC-$(CONFIG_CARDREADER_MP35) += csctapi/ifd_mp35.c
SRC-$(CONFIG_CARDREADER_PCSC) += csctapi/ifd_pcsc.c
SRC-$(CONFIG_CARDREADER_PHOENIX) += csctapi/ifd_phoenix.c
SRC-$(CONFIG_CARDREADER_DRECAS) += csctapi/ifd_drecas.c
SRC-$(CONFIG_CARDREADER_SC8IN1) += csctapi/ifd_sc8in1.c
SRC-$(CONFIG_CARDREADER_INTERNAL_SCI) += csctapi/ifd_sci.c
SRC-$(CONFIG_CARDREADER_SMARGO) += csctapi/ifd_smargo.c
SRC-$(CONFIG_CARDREADER_SMART) += csctapi/ifd_smartreader.c
SRC-$(CONFIG_CARDREADER_STINGER) += csctapi/ifd_stinger.c
SRC-$(CONFIG_CARDREADER_STAPI) += csctapi/ifd_stapi.c
SRC-$(CONFIG_CARDREADER_STAPI5) += csctapi/ifd_stapi.c
SRC-$(CONFIG_LIB_MINILZO) += minilzo/minilzo.c
SRC-$(CONFIG_CS_ANTICASC) += module-anticasc.c
SRC-$(CONFIG_CS_CACHEEX) += module-cacheex.c
SRC-$(CONFIG_MODULE_CAMD33) += module-camd33.c
SRC-$(CONFIG_CS_CACHEEX) += module-camd35-cacheex.c
SRC-$(sort $(CONFIG_MODULE_CAMD35) $(CONFIG_MODULE_CAMD35_TCP)) += module-camd35.c
SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
SRC-$(CONFIG_WITH_MCA) += module-dvbapi-mca.c
### SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi.c
### experimental reversed API
SRC-$(CONFIG_WITH_COOLAPI) += module-dvbapi-coolapi-legacy.c
SRC-$(CONFIG_WITH_COOLAPI2) += module-dvbapi-coolapi.c
SRC-$(CONFIG_WITH_SU980) += module-dvbapi-coolapi.c
SRC-$(CONFIG_WITH_STAPI) += module-dvbapi-stapi.c
SRC-$(CONFIG_WITH_STAPI5) += module-dvbapi-stapi5.c
SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi-chancache.c
SRC-$(CONFIG_HAVE_DVBAPI) += module-dvbapi.c
SRC-$(CONFIG_MODULE_GBOX) += module-gbox-helper.c
SRC-$(CONFIG_MODULE_GBOX) += module-gbox-sms.c
SRC-$(CONFIG_MODULE_GBOX) += module-gbox-remm.c
SRC-$(CONFIG_MODULE_GBOX) += module-gbox-cards.c
SRC-$(CONFIG_MODULE_GBOX) += module-gbox.c
SRC-$(CONFIG_IRDETO_GUESSING) += module-ird-guess.c
SRC-$(CONFIG_LCDSUPPORT) += module-lcd.c
SRC-$(CONFIG_LEDSUPPORT) += module-led.c
SRC-$(CONFIG_MODULE_MONITOR) += module-monitor.c
SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd.c
SRC-$(CONFIG_MODULE_NEWCAMD) += module-newcamd-des.c
SRC-$(CONFIG_MODULE_PANDORA) += module-pandora.c
SRC-$(CONFIG_MODULE_GHTTP) += module-ghttp.c
SRC-$(CONFIG_MODULE_RADEGAST) += module-radegast.c
SRC-$(CONFIG_MODULE_SCAM) += module-scam.c
SRC-$(CONFIG_MODULE_SERIAL) += module-serial.c
SRC-$(CONFIG_WITH_LB) += module-stat.c
SRC-$(CONFIG_WEBIF) += module-webif-lib.c
SRC-$(CONFIG_WEBIF) += module-webif-tpl.c
SRC-$(CONFIG_WEBIF) += module-webif.c
SRC-$(CONFIG_WEBIF) += webif/pages.c
SRC-$(CONFIG_WITH_CARDREADER) += reader-common.c
SRC-$(CONFIG_READER_BULCRYPT) += reader-bulcrypt.c
SRC-$(CONFIG_READER_CONAX) += reader-conax.c
SRC-$(CONFIG_READER_CRYPTOWORKS) += reader-cryptoworks.c
SRC-$(CONFIG_READER_DGCRYPT) += reader-dgcrypt.c
SRC-$(CONFIG_READER_DRE) += reader-dre.c
SRC-$(CONFIG_READER_DRE) += reader-dre-cas.c
SRC-$(CONFIG_READER_DRE) += reader-dre-common.c
SRC-$(CONFIG_READER_DRE) += reader-dre-st20.c
SRC-$(CONFIG_READER_GRIFFIN) += reader-griffin.c
SRC-$(CONFIG_READER_IRDETO) += reader-irdeto.c
SRC-$(CONFIG_READER_NAGRA_COMMON) += reader-nagra-common.c
SRC-$(CONFIG_READER_NAGRA) += reader-nagra.c
SRC-$(CONFIG_READER_NAGRA_MERLIN) += reader-nagracak7.c
SRC-$(CONFIG_READER_SECA) += reader-seca.c
SRC-$(CONFIG_READER_TONGFANG) += reader-tongfang.c
SRC-$(CONFIG_READER_VIACCESS) += reader-viaccess.c
SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard-common.c
SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard1.c
SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard12.c
SRC-$(CONFIG_READER_VIDEOGUARD) += reader-videoguard2.c
SRC-y += oscam-aes.c
SRC-y += oscam-array.c
SRC-y += oscam-hashtable.c
SRC-y += oscam-cache.c
SRC-y += oscam-chk.c
SRC-y += oscam-client.c
SRC-y += oscam-conf.c
SRC-y += oscam-conf-chk.c
SRC-y += oscam-conf-mk.c
SRC-y += oscam-config-account.c
SRC-y += oscam-config-global.c
SRC-y += oscam-config-reader.c
SRC-y += oscam-config.c
SRC-y += oscam-ecm.c
SRC-y += oscam-emm.c
SRC-y += oscam-emm-cache.c
SRC-y += oscam-failban.c
SRC-y += oscam-files.c
SRC-y += oscam-garbage.c
SRC-y += oscam-lock.c
SRC-y += oscam-log.c
SRC-y += oscam-log-reader.c
SRC-y += oscam-net.c
SRC-y += oscam-llist.c
SRC-y += oscam-reader.c
SRC-y += oscam-simples.c
SRC-y += oscam-string.c
SRC-y += oscam-time.c
SRC-y += oscam-work.c
SRC-y += oscam.c
# config.c is automatically generated by config.sh in OBJDIR
SRC-y += config.c
ifdef BUILD_TESTS
SRC-y += tests.c
override STD_DEFS += -DBUILD_TESTS=1
endif
SRC := $(SRC-y)
OBJ := $(addprefix $(OBJDIR)/,$(subst .c,.o,$(SRC)))
SRC := $(subst config.c,$(OBJDIR)/config.c,$(SRC))
# The default build target rebuilds the config.mak if needed and then
# starts the compilation.
all:
@./config.sh --use-flags "$(USE_FLAGS)" --objdir "$(OBJDIR)" --make-config.mak
@-mkdir -p $(OBJDIR)/cscrypt $(OBJDIR)/csctapi $(OBJDIR)/minilzo $(OBJDIR)/webif
@-printf "\
+-------------------------------------------------------------------------------\n\
| OSCam ver: $(VER) rev: $(SVN_REV) target: $(TARGET)\n\
| Tools:\n\
| CROSS = $(CROSS_DIR)$(CROSS)\n\
| CC = $(CC)\n\
| Settings:\n\
| CONF_DIR = $(CONF_DIR)\n\
| CC_OPTS = $(strip $(CC_OPTS))\n\
| CC_WARN = $(strip $(CC_WARN))\n\
| CFLAGS = $(strip $(CFLAGS))\n\
| LDFLAGS = $(strip $(LDFLAGS))\n\
| LIBS = $(strip $(LIBS))\n\
| UseFlags = $(addsuffix =1,$(USE_FLAGS))\n\
| Config:\n\
| Addons : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled addons)\n\
| Protocols: $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled protocols | sed -e 's|MODULE_||g')\n\
| Readers : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled readers | sed -e 's|READER_||g')\n\
| CardRdrs : $(shell ./config.sh --use-flags "$(USE_FLAGS)" --show-enabled card_readers | sed -e 's|CARDREADER_||g')\n\
| Compiler : $(shell $(CC) --version 2>/dev/null | head -n 1)\n\
| Config : $(OBJDIR)/config.mak\n\
| Binary : $(OSCAM_BIN)\n\
+-------------------------------------------------------------------------------\n"
ifeq "$(shell ./config.sh --enabled WEBIF)" "Y"
@$(MAKE) --no-print-directory --quiet -C webif
endif
@$(MAKE) --no-print-directory $(OSCAM_BIN) $(LIST_SMARGO_BIN)
$(OSCAM_BIN).debug: $(OBJ)
$(SAY) "LINK $@"
$(Q)$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@
$(OSCAM_BIN): $(OSCAM_BIN).debug
$(SAY) "STRIP $@"
$(Q)cp $(OSCAM_BIN).debug $(OSCAM_BIN)
$(Q)$(STRIP) $(OSCAM_BIN)
$(LIST_SMARGO_BIN): utils/list_smargo.c
$(SAY) "BUILD $@"
$(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) $(LDFLAGS) utils/list_smargo.c $(LIBS) -o $@
$(OBJDIR)/config.o: $(OBJDIR)/config.c
$(SAY) "CONF $<"
$(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
$(OBJDIR)/%.o: %.c Makefile
@$(CC) -MP -MM -MT $@ -o $(subst .o,.d,$@) $<
$(SAY) "CC $<"
$(Q)$(CC) $(STD_DEFS) $(CC_OPTS) $(CC_WARN) $(CFLAGS) -c $< -o $@
-include $(subst .o,.d,$(OBJ))
tests:
@-$(MAKE) --no-print-directory BUILD_TESTS=1 OSCAM_BIN=$(TESTS_BIN)
@-touch oscam.c
# The above is really hideous hack :-) If we don't force oscam.c recompilation
# after we've build the tests binary, the next "normal" compilation would fail
# because there would be no run_tests() function. So the touch is there to
# ensure oscam.c would be recompiled.
config:
$(SHELL) ./config.sh --gui
menuconfig: config
allyesconfig:
@echo "Enabling all config options."
@-$(SHELL) ./config.sh --enable all
allnoconfig:
@echo "Disabling all config options."
@-$(SHELL) ./config.sh --disable all
defconfig:
@echo "Restoring default config."
@-$(SHELL) ./config.sh --restore
clean:
@-for FILE in $(BUILD_DIR)/* $(TESTS_BIN) $(TESTS_BIN).debug; do \
echo "RM $$FILE"; \
rm -rf $$FILE; \
done
@-rm -rf $(BUILD_DIR) lib
distclean: clean
@-for FILE in $(BINDIR)/list_smargo-* $(BINDIR)/oscam-$(VER)*; do \
echo "RM $$FILE"; \
rm -rf $$FILE; \
done
@-$(MAKE) --no-print-directory --quiet -C webif clean
README.build:
@echo "Extracting 'make help' into $@ file."
@-printf "\
** This file is generated from 'make help' output, do not edit it. **\n\
\n\
" > $@
@-$(MAKE) --no-print-directory help >> $@
@echo "Done."
README.config:
@echo "Extracting 'config.sh --help' into $@ file."
@-printf "\
** This file is generated from 'config.sh --help' output, do not edit it. **\n\
\n\
" > $@
@-./config.sh --help >> $@
@echo "Done."
help:
@-printf "\
OSCam build system documentation\n\
================================\n\
\n\
Build variables:\n\
The build variables are set on the make command line and control the build\n\
process. Setting the variables lets you enable additional features, request\n\
extra libraries and more. Currently recognized build variables are:\n\
\n\
CROSS=prefix - Set tools prefix. This variable is used when OScam is being\n\
cross compiled. For example if you want to cross compile\n\
for SH4 architecture you can run: 'make CROSS=sh4-linux-'\n\
If you don't have the directory where cross compilers are\n\
in your PATH you can run:\n\
'make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-'\n\
\n\
CROSS_DIR=dir - Set tools directory. This variable is added in front of\n\
CROSS variable. CROSS_DIR is useful if you want to use\n\
predefined targets that are setting CROSS, but you don't have\n\
the cross compilers in your PATH. For example:\n\
'make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/'\n\
'make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/'\n\
\n\
CONF_DIR=/dir - Set OSCam config directory. For example to change config\n\
directory to /etc run: 'make CONF_DIR=/etc'\n\
The default config directory is: '$(CONF_DIR)'\n\
\n\
CC_OPTS=text - This variable holds compiler optimization parameters.\n\
Default CC_OPTS value is:\n\
'$(CC_OPTS)'\n\
To add text to this variable set EXTRA_CC_OPTS=text.\n\
\n\
CC_WARN=text - This variable holds compiler warning parameters.\n\
Default CC_WARN value is:\n\
'$(CC_WARN)'\n\
To add text to this variable set EXTRA_CC_WARN=text.\n\
\n\
V=1 - Request build process to print verbose messages. By\n\
default the only messages that are shown are simple info\n\
what is being compiled. To request verbose build run:\n\
'make V=1'\n\
\n\
Extra build variables:\n\
These variables add text to build variables. They are useful if you want\n\
to add additional options to already set variables without overwriting them\n\
Currently defined EXTRA_xxx variables are:\n\
\n\
EXTRA_CC_OPTS - Add text to CC_OPTS.\n\
Example: 'make EXTRA_CC_OPTS=-Os'\n\
\n\
EXTRA_CC_WARN - Add text to CC_WARN.\n\
Example: 'make EXTRA_CC_WARN=-Wshadow'\n\
\n\
EXTRA_TARGET - Add text to TARGET.\n\
Example: 'make EXTRA_TARGET=-private'\n\
\n\
EXTRA_CFLAGS - Add text to CFLAGS (affects compilation).\n\
Example: 'make EXTRA_CFLAGS=\"-DBLAH=1 -I/opt/local\"'\n\
\n\
EXTRA_LDFLAGS - Add text to LDFLAGS (affects linking).\n\
Example: 'make EXTRA_LDFLAGS=-Llibdir'\n\
\n\
EXTRA_FLAGS - Add text to both EXTRA_CFLAGS and EXTRA_LDFLAGS.\n\
Example: 'make EXTRA_FLAGS=-DBLAH=1'\n\
\n\
EXTRA_LIBS - Add text to LIBS (affects linking).\n\
Example: 'make EXTRA_LIBS=\"-L./stapi -loscam_stapi\"'\n\
\n\
Use flags:\n\
Use flags are used to request additional libraries or features to be used\n\
by OSCam. Currently defined USE_xxx flags are:\n\
\n\
USE_LIBUSB=1 - Request linking with libusb. The variables that control\n\
USE_LIBUSB=1 build are:\n\
LIBUSB_FLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
LIBUSB_CFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
LIBUSB_LDFLAGS='$(DEFAULT_LIBUSB_FLAGS)'\n\
LIBUSB_LIB='$(DEFAULT_LIBUSB_LIB)'\n\
Using USE_LIBUSB=1 adds to '-libusb' to PLUS_TARGET.\n\
To build with static libusb, set the variable LIBUSB_LIB\n\
to contain full path of libusb library. For example:\n\
make USE_LIBUSB=1 LIBUSB_LIB=/usr/lib/libusb-1.0.a\n\
\n\
USE_PCSC=1 - Request linking with PCSC. The variables that control\n\
USE_PCSC=1 build are:\n\
PCSC_FLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
PCSC_CFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
PCSC_LDFLAGS='$(DEFAULT_PCSC_FLAGS)'\n\
PCSC_LIB='$(DEFAULT_PCSC_LIB)'\n\
Using USE_PCSC=1 adds to '-pcsc' to PLUS_TARGET.\n\
To build with static PCSC, set the variable PCSC_LIB\n\
to contain full path of PCSC library. For example:\n\
make USE_PCSC=1 PCSC_LIB=/usr/local/lib/libpcsclite.a\n\
\n\
USE_STAPI=1 - Request linking with STAPI. The variables that control\n\
USE_STAPI=1 build are:\n\
STAPI_FLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
STAPI_CFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
STAPI_LDFLAGS='$(DEFAULT_STAPI_FLAGS)'\n\
STAPI_LIB='$(DEFAULT_STAPI_LIB)'\n\
Using USE_STAPI=1 adds to '-stapi' to PLUS_TARGET.\n\
In order for USE_STAPI to work you have to create stapi\n\
directory and put liboscam_stapi.a file in it.\n\
\n\
USE_STAPI5=1 - Request linking with STAPI5. The variables that control\n\
USE_STAPI5=1 build are:\n\
STAPI5_FLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
STAPI5_CFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
STAPI5_LDFLAGS='$(DEFAULT_STAPI5_FLAGS)'\n\
STAPI5_LIB='$(DEFAULT_STAPI5_LIB)'\n\
Using USE_STAPI5=1 adds to '-stapi' to PLUS_TARGET.\n\
In order for USE_STAPI5 to work you have to create stapi\n\
directory and put liboscam_stapi5.a file in it.\n\
\n\
USE_COOLAPI=1 - Request support for Coolstream API (libnxp) aka NeutrinoHD\n\
box. The variables that control the build are:\n\
COOLAPI_FLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
COOLAPI_CFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI_FLAGS)'\n\
COOLAPI_LIB='$(DEFAULT_COOLAPI_LIB)'\n\
Using USE_COOLAPI=1 adds to '-coolapi' to PLUS_TARGET.\n\
In order for USE_COOLAPI to work you have to have libnxp.so\n\
library in your cross compilation toolchain.\n\
\n\
USE_COOLAPI2=1 - Request support for Coolstream API aka NeutrinoHD\n\
box. The variables that control the build are:\n\
COOLAPI_FLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
COOLAPI_CFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
COOLAPI_LDFLAGS='$(DEFAULT_COOLAPI2_FLAGS)'\n\
COOLAPI_LIB='$(DEFAULT_COOLAPI2_LIB)'\n\
Using USE_COOLAPI2=1 adds to '-coolapi2' to PLUS_TARGET.\n\
In order for USE_COOLAPI2 to work you have to have liblnxUKAL.so,\n\
liblnxcssUsr.so, liblnxscsUsr.so, liblnxnotifyqUsr.so, liblnxplatUsr.so\n\
library in your cross compilation toolchain.\n\
\n\
USE_SU980=1 - Request support for SU980 API (libentropic) aka Enimga2 arm\n\
box. The variables that control the build are:\n\
COOLAPI_FLAGS='$(DEFAULT_SU980_FLAGS)'\n\
COOLAPI_CFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
COOLAPI_LDFLAGS='$(DEFAULT_SU980_FLAGS)'\n\
COOLAPI_LIB='$(DEFAULT_SU980_LIB)'\n\
Using USE_SU980=1 adds to '-su980' to PLUS_TARGET.\n\
In order for USE_SU980 to work you have to have libentropic.a\n\
library in your cross compilation toolchain.\n\
\n\
USE_AZBOX=1 - Request support for AZBOX (openxcas)\n\
box. The variables that control the build are:\n\
AZBOX_FLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
AZBOX_CFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
AZBOX_LDFLAGS='$(DEFAULT_AZBOX_FLAGS)'\n\
AZBOX_LIB='$(DEFAULT_AZBOX_LIB)'\n\
Using USE_AZBOX=1 adds to '-azbox' to PLUS_TARGET.\n\
extapi/openxcas/libOpenXCASAPI.a library that is shipped\n\
with OSCam is compiled for MIPSEL.\n\
\n\
USE_MCA=1 - Request support for Matrix Cam Air (MCA).\n\
The variables that control the build are:\n\
MCA_FLAGS='$(DEFAULT_MCA_FLAGS)'\n\
MCA_CFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
MCA_LDFLAGS='$(DEFAULT_MCA_FLAGS)'\n\
Using USE_MCA=1 adds to '-mca' to PLUS_TARGET.\n\
\n\
USE_LIBCRYPTO=1 - Request linking with libcrypto instead of using OSCam\n\
internal crypto functions. USE_LIBCRYPTO is automatically\n\
enabled if the build is configured with SSL support. The\n\
variables that control USE_LIBCRYPTO=1 build are:\n\
LIBCRYPTO_FLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
LIBCRYPTO_CFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
LIBCRYPTO_LDFLAGS='$(DEFAULT_LIBCRYPTO_FLAGS)'\n\
LIBCRYPTO_LIB='$(DEFAULT_LIBCRYPTO_LIB)'\n\
\n\
USE_SSL=1 - Request linking with libssl. USE_SSL is automatically\n\
enabled if the build is configured with SSL support. The\n\
variables that control USE_SSL=1 build are:\n\
SSL_FLAGS='$(DEFAULT_SSL_FLAGS)'\n\
SSL_CFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
SSL_LDFLAGS='$(DEFAULT_SSL_FLAGS)'\n\
SSL_LIB='$(DEFAULT_SSL_LIB)'\n\
Using USE_SSL=1 adds to '-ssl' to PLUS_TARGET.\n\
\n\
USE_UTF8=1 - Request UTF-8 enabled webif by default.\n\
\n\
Automatically intialized variables:\n\
\n\
TARGET=text - This variable is auto detected by using the compiler's\n\
-dumpmachine output. To see the target on your machine run:\n\
'gcc -dumpmachine'\n\
\n\
PLUS_TARGET - This variable is added to TARGET and it is set depending\n\
on the chosen USE_xxx flags. To disable adding\n\
PLUS_TARGET to TARGET, set NO_PLUS_TARGET=1\n\
\n\
BINDIR - The directory where final oscam binary would be put. The\n\
default is: $(BINDIR)\n\
\n\
OSCAM_BIN=text - This variable controls how the oscam binary will be named.\n\
Default OSCAM_BIN value is:\n\
'BINDIR/oscam-VERSVN_REV-TARGET'\n\
Once the variables (BINDIR, VER, SVN_REV and TARGET) are\n\
replaced, the resulting filename can look like this:\n\
'Distribution/oscam-1.20-unstable_svn7404-i486-slackware-linux-static'\n\
For example you can run: 'make OSCAM_BIN=my-oscam'\n\
\n\
Binaries compiled and run during the OSCam build:\n\
\n\
OSCam builds webif/pages_gen binary that is run by the build system to\n\
generate file that holds web pages. To build this binary two variables\n\
are used:\n\
\n\
HOSTCC=gcc - The compiler used for building binaries that are run on\n\
the build machine (the host). Default: gcc\n\
To use clang for example run: make CC=clang HOSTCC=clang\n\
\n\
HOSTCFLAGS=xxx - The CFLAGS passed to HOSTCC. See webif/Makefile for the\n\
default host cflags.\n\
\n\
Config targets:\n\
make config - Start configuration utility.\n\
make allyesconfig - Enable all configuration options.\n\
make allnoconfig - Disable all configuration options.\n\
make defconfig - Restore default configuration options.\n\
\n\
Cleaning targets:\n\
make clean - Remove '$(BUILD_DIR)' directory which contains compiled\n\
object files.\n\
make distclean - Executes clean target and also removes binary files\n\
located in '$(BINDIR)' directory.\n\
\n\
Build system files:\n\
config.sh - OSCam configuration. Run 'config.sh --help' to see\n\
available parameters or 'make config' to start GUI\n\
configuratior.\n\
Makefile - Main build system file.\n\
Makefile.extra - Contains predefined targets. You can use this file\n\
as example on how to use the build system.\n\
Makefile.local - This file is included in Makefile and allows creation\n\
of local build system targets. See Makefile.extra for\n\
examples.\n\
\n\
Here are some of the interesting predefined targets in Makefile.extra.\n\
To use them run 'make target ...' where ... can be any extra flag. For\n\
example if you want to compile OSCam for Dreambox (DM500) but do not\n\
have the compilers in the path, you can run:\n\
make dm500 CROSS_DIR=/opt/cross/dm500/cdk/bin/\n\
\n\
Predefined targets in Makefile.extra:\n\
\n\
make libusb - Builds OSCam with libusb support\n\
make pcsc - Builds OSCam with PCSC support\n\
make pcsc-libusb - Builds OSCam with PCSC and libusb support\n\
make dm500 - Builds OSCam for Dreambox (DM500)\n\
make sh4 - Builds OSCam for SH4 boxes\n\
make azbox - Builds OSCam for AZBox STBs\n\
make mca - Builds OSCam for Matrix Cam Air (MCA)\n\
make coolstream - Builds OSCam for Coolstream HD1\n\
make coolstream2 - Builds OSCam for Coolstream HD2\n\
make dockstar - Builds OSCam for Dockstar\n\
make qboxhd - Builds OSCam for QBoxHD STBs\n\
make opensolaris - Builds OSCam for OpenSolaris\n\
make uclinux - Builds OSCam for m68k uClinux\n\
\n\
Predefined targets for static builds:\n\
make static - Builds OSCam statically\n\
make static-libusb - Builds OSCam with libusb linked statically\n\
make static-libcrypto - Builds OSCam with libcrypto linked statically\n\
make static-ssl - Builds OSCam with SSL support linked statically\n\
\n\
Developer targets:\n\
make tests - Builds '$(TESTS_BIN)' binary\n\
\n\
Examples:\n\
Build OSCam for SH4 (the compilers are in the path):\n\
make CROSS=sh4-linux-\n\n\
Build OSCam for SH4 (the compilers are in not in the path):\n\
make sh4 CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/\n\
make CROSS_DIR=/opt/STM/STLinux-2.3/devkit/sh4/bin/ CROSS=sh4-linux-\n\
make CROSS=/opt/STM/STLinux-2.3/devkit/sh4/bin/sh4-linux-\n\n\
Build OSCam for SH4 with STAPI:\n\
make CROSS=sh4-linux- USE_STAPI=1\n\n\
Build OSCam for SH4 with STAPI and changed configuration directory:\n\
make CROSS=sh4-linux- USE_STAPI=1 CONF_DIR=/var/tuxbox/config\n\n\
Build OSCam for ARM with COOLAPI (coolstream aka NeutrinoHD):\n\
make CROSS=arm-cx2450x-linux-gnueabi- USE_COOLAPI=1\n\n\
Build OSCam for ARM with COOLAPI2 (coolstream aka NeutrinoHD):\n\
make CROSS=arm-pnx8400-linux-uclibcgnueabi- USE_COOLAPI2=1\n\n\
Build OSCam for MIPSEL with AZBOX support:\n\
make CROSS=mipsel-linux-uclibc- USE_AZBOX=1\n\n\
Build OSCam for ARM with MCA support:\n\
make CROSS=arm-none-linux-gnueabi- USE_MCA=1\n\n\
Build OSCam with libusb and PCSC:\n\
make USE_LIBUSB=1 USE_PCSC=1\n\n\
Build OSCam with static libusb:\n\
make USE_LIBUSB=1 LIBUSB_LIB=\"/usr/lib/libusb-1.0.a\"\n\n\
Build OSCam with static libcrypto:\n\
make USE_LIBCRYPTO=1 LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
Build OSCam with static libssl and libcrypto:\n\
make USE_SSL=1 SSL_LIB=\"/usr/lib/libssl.a\" LIBCRYPTO_LIB=\"/usr/lib/libcrypto.a\"\n\n\
Build with verbose messages and size optimizations:\n\
make V=1 CC_OPTS=-Os\n\n\
Build and set oscam file name:\n\
make OSCAM_BIN=oscam\n\n\
Build and set oscam file name depending on revision:\n\
make OSCAM_BIN=oscam-\`./config.sh -r\`\n\n\
"
simple: all
default: all
debug: all
-include Makefile.extra
-include Makefile.local