fdd396c3d87c390895c12ad0dae358a2e82ade14
[feed/telephony.git] / net / rtpengine / Makefile
1 #
2 # Copyright (C) 2020 Sebastian Kemper <sebastian_ml@gmx.net>
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7
8 include $(TOPDIR)/rules.mk
9 include $(INCLUDE_DIR)/kernel.mk
10
11 PKG_NAME:=rtpengine
12 PKG_VERSION:=10.5.2.6
13 PKG_RELEASE:=3
14
15 PKG_SOURCE:=$(PKG_NAME)-mr$(PKG_VERSION).tar.gz
16 PKG_SOURCE_URL:=https://codeload.github.com/sipwise/rtpengine/tar.gz/mr$(PKG_VERSION)?
17 PKG_HASH:=6f6d5cc2ebf27b6361ed2bd2f86a0ca74103503fd1a14af69ed423dba8340bc4
18
19 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-mr$(PKG_VERSION)
20
21 PKG_LICENSE:=GPL-3.0
22 PKG_LICENSE_FILES:=LICENSE
23
24 PKG_MAINTAINER:=Sebastian Kemper <sebastian_ml@gmx.net>
25
26 # When building in parallel, some files (like streambuf.c or dtmflib.c)
27 # are generated multiple times by the rtpengine build system.
28 # Intermittently they then contain garbage, leading to redefinition
29 # errors.
30 PKG_BUILD_PARALLEL:=0
31
32 PKG_BUILD_DEPENDS:=gperf/host perl/host
33
34 # With below variable set, $(PKG_SYMVERS_DIR)/rtpengine.symvers gets generated
35 # from kernel-module/Module.symvers.
36 PKG_EXTMOD_SUBDIRS:=kernel-module
37
38 include $(INCLUDE_DIR)/package.mk
39 include $(INCLUDE_DIR)/nls.mk
40
41 ENGINE_DEPENDS := \
42 +glib2 \
43 +json-glib \
44 +libevent2 \
45 +libevent2-pthreads \
46 +libhiredis \
47 +libip4tc \
48 +libmosquitto \
49 +libopenssl \
50 +libpcap \
51 +libpcre \
52 +libwebsockets-openssl \
53 +xmlrpc-c-client \
54 +zlib
55
56 ENGINE_DEPENDS_TRANSCODING := \
57 $(ENGINE_DEPENDS) \
58 +bcg729 \
59 +libffmpeg-full \
60 +libmariadb \
61 +libspandsp3
62
63 RECORDING_DEPENDS := \
64 +bcg729 \
65 +glib2 \
66 +libffmpeg-full \
67 +libmariadb \
68 +libopenssl
69
70 RTPENGINE_USERID:=378
71 RTPENGINE_GROUPID:=$(RTPENGINE_USERID)
72 RTPENGINE_USER:=$(PKG_NAME)=$(RTPENGINE_USERID):$(PKG_NAME)=$(RTPENGINE_GROUPID)
73
74 define Package/rtpengine/Default
75 URL:=https://github.com/sipwise/rtpengine
76 endef
77
78 define Package/rtpengine/Template
79 $(call Package/rtpengine/Default)
80 TITLE:=Sipwise RTP Engine
81 CATEGORY:=Network
82 SECTION:=net
83 SUBMENU:=Telephony
84 USERID:=$(RTPENGINE_USER)
85 endef
86
87 define Package/rtpengine/description/Template
88 The Sipwise NGCP rtpengine is a proxy for RTP traffic and other UDP
89 based media traffic. It's meant to be used with the Kamailio SIP proxy
90 and forms a drop-in replacement for any of the other available RTP and
91 media proxies.
92 endef
93
94 define Package/rtpengine
95 $(call Package/rtpengine/Template)
96 VARIANT:=transcode
97 DEPENDS := \
98 $(patsubst +%,+PACKAGE_rtpengine:%,$(ENGINE_DEPENDS_TRANSCODING)) \
99 +IPV6:libip6tc
100 endef
101
102 define Package/rtpengine/conffiles
103 /etc/config/rtpengine
104 /etc/init.d/rtpengine
105 /etc/rtpengine/rtpengine.conf
106 endef
107
108 define Package/rtpengine/description
109 $(call Package/rtpengine/description/Template)
110
111 Please consider installing kmod-ipt-rtpengine.
112
113 endef
114
115 define Package/rtpengine/install
116 $(INSTALL_DIR) $(1)/usr/bin
117 $(INSTALL_BIN) $(PKG_BUILD_DIR)/daemon/rtpengine $(1)/usr/bin
118
119 $(INSTALL_DIR) $(1)/etc/init.d
120 $(INSTALL_BIN) ./files/rtpengine.init $(1)/etc/init.d/rtpengine
121
122 $(INSTALL_DIR) $(1)/etc/config
123 $(INSTALL_CONF) ./files/rtpengine.conf $(1)/etc/config/rtpengine
124
125 $(INSTALL_DIR) $(1)/etc/rtpengine
126 $(INSTALL_DATA) $(PKG_BUILD_DIR)/etc/rtpengine.conf \
127 $(1)/etc/rtpengine/rtpengine.conf
128
129 $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
130 $(INSTALL_BIN) ./files/rtpengine.hotplug \
131 $(1)/etc/hotplug.d/iface/90-rtpengine
132 endef
133
134 define Package/rtpengine-no-transcode
135 $(call Package/rtpengine/Template)
136 TITLE+= (no transcoding)
137 VARIANT:=no-transcode
138 CONFLICTS:=rtpengine
139 DEPENDS := \
140 $(patsubst +%,+PACKAGE_rtpengine-no-transcode:%,$(ENGINE_DEPENDS)) \
141 +IPV6:libip6tc
142 endef
143
144 Package/rtpengine-no-transcode/conffiles=$(Package/rtpengine/conffiles)
145
146 define Package/rtpengine-no-transcode/description
147 $(call Package/rtpengine/description/Template)
148
149 This package comes without transcoding support.
150
151 Please consider installing kmod-ipt-rtpengine.
152
153 endef
154
155 Package/rtpengine-no-transcode/install=$(Package/rtpengine/install)
156
157 define Package/rtpengine-recording
158 $(call Package/rtpengine/Default)
159 TITLE:=Sipwise RTP Recording Daemon
160 CATEGORY:=Network
161 SECTION:=net
162 SUBMENU:=Telephony
163 USERID:=$(RTPENGINE_USER)
164 DEPENDS:=$(patsubst +%,+PACKAGE_rtpengine-recording:%,$(RECORDING_DEPENDS))
165 endef
166
167 define Package/rtpengine-recording/conffiles
168 /etc/config/rtpengine-recording
169 /etc/rtpengine/rtpengine-recording.conf
170 endef
171
172 define Package/rtpengine-recording/install
173 $(INSTALL_DIR) $(1)/usr/bin
174 $(INSTALL_BIN) \
175 $(PKG_BUILD_DIR)/recording-daemon/rtpengine-recording \
176 $(1)/usr/bin
177
178 $(INSTALL_DIR) $(1)/etc/init.d
179 $(INSTALL_BIN) ./files/rtpengine-recording.init \
180 $(1)/etc/init.d/rtpengine-recording
181
182 $(INSTALL_DIR) $(1)/etc/config
183 $(INSTALL_CONF) ./files/rtpengine-recording.conf \
184 $(1)/etc/config/rtpengine-recording
185
186 $(INSTALL_DIR) $(1)/etc/rtpengine
187 $(INSTALL_DATA) $(PKG_BUILD_DIR)/etc/rtpengine-recording.conf \
188 $(1)/etc/rtpengine/rtpengine-recording.conf
189 endef
190
191 define Package/iptables-mod-rtpengine
192 $(call Package/rtpengine/Default)
193 TITLE:=Sipwise rtpengine iptables extension
194 CATEGORY:=Network
195 SECTION:=net
196 SUBMENU:=Firewall
197 DEPENDS:=+PACKAGE_iptables-mod-rtpengine:libxtables
198 endef
199
200 define Package/iptables-mod-rtpengine/install
201 $(INSTALL_DIR) $(1)/usr/lib/iptables
202 $(INSTALL_BIN) \
203 $(PKG_BUILD_DIR)/iptables-extension/libxt_RTPENGINE.so \
204 $(1)/usr/lib/iptables
205 endef
206
207 define KernelPackage/ipt-rtpengine
208 $(call Package/rtpengine/Default)
209 TITLE:=Sipwise rtpengine netfilter module
210 SUBMENU:=Netfilter Extensions
211 FILES:=$(PKG_BUILD_DIR)/kernel-module/xt_RTPENGINE.$(LINUX_KMOD_SUFFIX)
212 AUTOLOAD:=$(call AutoProbe,xt_RTPENGINE)
213 DEPENDS := \
214 +PACKAGE_kmod-ipt-rtpengine:kmod-crypto-aead \
215 +PACKAGE_kmod-ipt-rtpengine:kmod-crypto-hash \
216 +PACKAGE_kmod-ipt-rtpengine:kmod-ipt-core
217 MODPARAMS.xt_RTPENGINE := \
218 proc_uid=$(RTPENGINE_USERID) \
219 proc_gid=$(RTPENGINE_GROUPID)
220 USERID:=$(RTPENGINE_USER)
221 endef
222
223 define KernelPackage/ipt-rtpengine/conffiles
224 /etc/modules.d/ipt-rtpengine
225 endef
226
227 define KernelPackage/ipt-rtpengine/description
228 Netfilter kernel module for rtpengine
229
230 endef
231
232 MAKE_VARS+=RTPENGINE_VERSION=$(PKG_VERSION)
233
234 ifeq ($(BUILD_VARIANT),no-transcode)
235 MAKE_VARS+=with_transcoding=no
236 endif
237
238 # rtpengine uses Debian's dpkg utility programs if it can find them. But
239 # we don't want build host flags to leak into our cross-compile.
240 define Build/Prepare
241 $(call Build/Prepare/Default)
242 ifeq ($(QUILT),)
243 cd "$(PKG_BUILD_DIR)" && \
244 $(FIND) . -maxdepth 2 -name "*Makefile" | \
245 xargs -I{} $(SED) \
246 '/shell which dpkg-/s/dpkg/OpenWrt-has-no-dpkg/' {} && \
247 $(SED) 's|#!/usr/bin/perl|#!$(STAGING_DIR_HOSTPKG)/usr/bin/perl|' \
248 utils/const_str_hash
249 endif
250 endef
251
252 define Build/Configure
253 endef
254
255 define Build/Compile
256
257 ifneq ($(CONFIG_PACKAGE_kmod-ipt-rtpengine),)
258 RTPENGINE_VERSION=$(PKG_VERSION) $(MAKE) \
259 $(PKG_JOBS) \
260 -C $(PKG_BUILD_DIR)/kernel-module \
261 KSRC=$(LINUX_DIR) \
262 $(KERNEL_MAKE_FLAGS)
263 endif
264
265 ifneq ($(CONFIG_PACKAGE_iptables-mod-rtpengine),)
266 $(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/iptables-extension)
267 endif
268
269 ifneq ($(CONFIG_PACKAGE_rtpengine)$(CONFIG_PACKAGE_rtpengine-no-transcode),)
270 $(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/daemon)
271 endif
272
273 ifneq ($(CONFIG_PACKAGE_rtpengine-recording),)
274 $(call Build/Compile/Default,-C $(PKG_BUILD_DIR)/recording-daemon)
275 endif
276
277 endef
278
279 define Build/InstallDev
280 endef
281
282 # KernelPackage calls need to go first, otherwise hooks like
283 # collect_module_symvers won't get added.
284 $(eval $(call KernelPackage,ipt-rtpengine))
285 $(eval $(call BuildPackage,rtpengine-no-transcode))
286 $(eval $(call BuildPackage,iptables-mod-rtpengine))
287 $(eval $(call BuildPackage,rtpengine))
288 $(eval $(call BuildPackage,rtpengine-recording))