21bdaf42cf5c7f6e39813dde723d196571f470b5
[feed/packages.git] / net / openvswitch / Makefile
1 #
2 # Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
3 # Copyright (C) 2014-2017 OpenWrt.org
4 # Copyright (C) 2018-2020 Yousong Zhou <yszhou4tech@gmail.com>
5 #
6 # This is free software, licensed under the GNU General Public License v2.
7 # See /LICENSE for more information.
8 #
9 include $(TOPDIR)/rules.mk
10 include $(INCLUDE_DIR)/kernel.mk
11 include ./openvswitch.mk
12
13 # Checklist on version bump
14 #
15 # - Check acinclude.m4 for range of supported kernel versions: "but version newer than .* is not supported"
16 # - Check and update kmod dependencies when necessary (runtime module load check in the least)
17 #
18 PKG_NAME:=openvswitch
19 PKG_VERSION:=$(ovs_version)
20 PKG_RELEASE:=$(AUTORELEASE)
21 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
22 PKG_SOURCE_URL:=https://www.openvswitch.org/releases/
23 PKG_HASH:=7d5797f2bf2449c6a266149e88f72123540f7fe7f31ad52902057ae8d8f88c38
24
25 PKG_LICENSE:=Apache-2.0
26 PKG_LICENSE_FILES:=LICENSE
27 PKG_CPE_ID:=cpe:/a:openvswitch:openvswitch
28
29 PKG_BUILD_DIR:=$(ovs_builddir)
30 PKG_BUILD_DEPENDS+=python3/host
31 PKG_USE_MIPS16:=0
32 PKG_BUILD_PARALLEL:=1
33 PKG_FIXUP:=autoreconf
34 PKG_INSTALL:=1
35 PYTHON3_PKG_BUILD:=0
36
37 PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
38
39 include $(INCLUDE_DIR)/package.mk
40 include ../../lang/python/python3-host.mk
41 include ../../lang/python/python3-package.mk
42
43 define Package/openvswitch/config
44 source "$(SOURCE)/Config.in"
45 endef
46
47 ovs_kmod_packages:=
48 ovs_kmod_intree_kernel_patchver_min:=3.10
49 ovs_kmod_intree_kernel_patchver_max:=5.5
50 ovs_kmod_intree_not_supported:=$(strip $(call kernel_patchver_lt,$(ovs_kmod_intree_kernel_patchver_min))$(call kernel_patchver_gt,$(ovs_kmod_intree_kernel_patchver_max)))
51 ovs_kmod_intree_dir:=$(PKG_BUILD_DIR)/datapath/linux
52 ovs_kmod_upstream_dir:=$(LINUX_DIR)/net/openvswitch
53 ovs_kmod_package_name=$(if $(filter openvswitch,$(1)),openvswitch,$(1))
54 ovs_kmod_is_intree=$(filter %-intree,$(1))
55 ovs_kmod_upstream_name=kmod-$(call ovs_kmod_package_name,$(patsubst %-intree,%,$(1)))
56 ovs_kmod_package_provides=$(call ovs_kmod_upstream_name,$(1))
57 define OvsKmodPackageTemplate
58 ifeq ($(if $(call ovs_kmod_is_intree,$(1)),$(ovs_kmod_intree_not_supported)),)
59 define KernelPackage/$(call ovs_kmod_package_name,$(1))
60 SECTION:=kernel
61 CATEGORY:=Kernel modules
62 SUBMENU:=Network Support
63 TITLE:=$(ovs_kmod_$(1)_title)
64 DEPENDS:=$(ovs_kmod_$(1)_depends) $(if $(call ovs_kmod_is_intree,$(1)),@IPV6 @DEVEL)
65 PROVIDES:=$(call ovs_kmod_package_provides,$(1))
66 KCONFIG:=$(ovs_kmod_$(1)_kconfig)
67 FILES:=$(ovs_kmod_$(1)_files)
68 AUTOLOAD:=$(call AutoProbe,$(foreach m,$(ovs_kmod_$(1)_files),$(notdir $(patsubst %.ko,%,$(basename $(m))))))
69 endef
70
71 ovs_kmod_packages+=$(call ovs_kmod_package_name,$(1))
72 endif
73 endef
74
75 ovs_kmod_openvswitch_title:=Open vSwitch kernel datapath (upstream)
76 ovs_kmod_openvswitch_kconfig:=CONFIG_OPENVSWITCH
77 ovs_kmod_openvswitch_depends:=\
78 +kmod-lib-crc32c \
79 +kmod-mpls \
80 +kmod-nf-nat \
81 +IPV6:kmod-nf-nat6 \
82 +kmod-nf-conntrack \
83 +IPV6:kmod-nf-conntrack6 \
84 +kmod-nsh \
85 +kmod-ipt-conntrack-extra \
86
87 ovs_kmod_openvswitch_files:=$(ovs_kmod_upstream_dir)/openvswitch.ko
88 $(eval $(call OvsKmodPackageTemplate,openvswitch))
89
90 ovs_kmod_openvswitch-gre_title:=Open vSwitch GRE tunneling support (upstream)
91 ovs_kmod_openvswitch-gre_kconfig:= CONFIG_OPENVSWITCH_GRE
92 ovs_kmod_openvswitch-gre_depends:= +kmod-openvswitch +kmod-gre
93 ovs_kmod_openvswitch-gre_files:= $(ovs_kmod_upstream_dir)/vport-gre.ko
94 $(eval $(call OvsKmodPackageTemplate,openvswitch-gre))
95
96 ovs_kmod_openvswitch-vxlan_title:=Open vSwitch VXLAN tunneling support (upstream)
97 ovs_kmod_openvswitch-vxlan_kconfig:= CONFIG_OPENVSWITCH_VXLAN
98 ovs_kmod_openvswitch-vxlan_depends:= +kmod-openvswitch +kmod-vxlan
99 ovs_kmod_openvswitch-vxlan_files:= $(ovs_kmod_upstream_dir)/vport-vxlan.ko
100 $(eval $(call OvsKmodPackageTemplate,openvswitch-vxlan))
101
102 ovs_kmod_openvswitch-geneve_title:=Open vSwitch Geneve tunneling support (upstream)
103 ovs_kmod_openvswitch-geneve_kconfig:= CONFIG_OPENVSWITCH_GENEVE
104 ovs_kmod_openvswitch-geneve_depends:= +kmod-openvswitch +kmod-geneve
105 ovs_kmod_openvswitch-geneve_files:= $(ovs_kmod_upstream_dir)/vport-geneve.ko
106 $(eval $(call OvsKmodPackageTemplate,openvswitch-geneve))
107
108 # NOTE depends
109 #
110 # - kmod-ipt-conntrack-extra: required for nf_conncount.ko
111 #
112 ovs_kmod_openvswitch-intree_title:=Open vSwitch kernel datapath (in tree)
113 ovs_kmod_openvswitch-intree_depends:=\
114 +kmod-lib-crc32c \
115 +kmod-nf-nat \
116 +IPV6:kmod-nf-nat6 \
117 +kmod-nf-conntrack \
118 +kmod-udptunnel4 \
119 +kmod-ipt-conntrack-extra \
120
121 ovs_kmod_openvswitch-intree_files:= $(ovs_kmod_intree_dir)/openvswitch.ko
122 $(eval $(call OvsKmodPackageTemplate,openvswitch-intree))
123
124 ovs_kmod_openvswitch-gre-intree_title:=Open vSwitch GRE tunneling support (in tree)
125 ovs_kmod_openvswitch-gre-intree_depends:= +kmod-openvswitch-intree +kmod-gre
126 ovs_kmod_openvswitch-gre-intree_files:= $(ovs_kmod_intree_dir)/vport-gre.ko
127 $(eval $(call OvsKmodPackageTemplate,openvswitch-gre-intree))
128
129 ovs_kmod_openvswitch-vxlan-intree_title:=Open vSwitch VXLAN tunneling support (in tree)
130 ovs_kmod_openvswitch-vxlan-intree_depends:= +kmod-openvswitch-intree +kmod-vxlan
131 ovs_kmod_openvswitch-vxlan-intree_files:= $(ovs_kmod_intree_dir)/vport-vxlan.ko
132 $(eval $(call OvsKmodPackageTemplate,openvswitch-vxlan-intree))
133
134 ovs_kmod_openvswitch-geneve-intree_title:=Open vSwitch Geneve tunneling support (in tree)
135 ovs_kmod_openvswitch-geneve-intree_depends:= +kmod-openvswitch-intree +kmod-geneve
136 ovs_kmod_openvswitch-geneve-intree_files:= $(ovs_kmod_intree_dir)/vport-geneve.ko
137 $(eval $(call OvsKmodPackageTemplate,openvswitch-geneve-intree))
138
139 ovs_kmod_openvswitch-stt-intree_title:=Open vSwitch STT tunneling support (in tree)
140 ovs_kmod_openvswitch-stt-intree_depends:= +kmod-openvswitch-intree
141 ovs_kmod_openvswitch-stt-intree_files:= $(ovs_kmod_intree_dir)/vport-stt.ko
142 $(eval $(call OvsKmodPackageTemplate,openvswitch-stt-intree))
143
144 ovs_kmod_openvswitch-lisp-intree_title:=Open vSwitch LISP tunneling support (in tree)
145 ovs_kmod_openvswitch-lisp-intree_depends:= +kmod-openvswitch-intree
146 ovs_kmod_openvswitch-lisp-intree_files:= $(ovs_kmod_intree_dir)/vport-lisp.ko
147 $(eval $(call OvsKmodPackageTemplate,openvswitch-lisp-intree))
148
149 # Dependency review
150 #
151 # for f in sbin/*; do echo $f; readelf -d $f | grep -i shared; done
152 # for f in bin/*; do echo $f; readelf -d $f | grep -i shared; done
153 # for f in lib/*.so; do echo $f; readelf -d $f | grep -i shared; done
154 #
155 ovs_libopenvswitch_title:=Open vSwitch (libopenvswitch.so)
156 ovs_libopenvswitch_hidden:=1
157 ovs_libopenvswitch_depends:= \
158 +libatomic +libopenssl +OPENVSWITCH_WITH_LIBUNBOUND:libunbound \
159 +!(arc||arceb):libunwind
160 ovs_libopenvswitch_files:=usr/lib/libopenvswitch*.so*
161 $(eval $(call OvsPackageTemplate,libopenvswitch))
162
163
164 ovs_libofproto_title:=Open vSwitch (libofproto.so libsflow.so)
165 ovs_libofproto_hidden:=1
166 ovs_libofproto_depends:= +libatomic
167 ovs_libofproto_files:=usr/lib/libofproto*.so* usr/lib/libsflow*.so*
168 $(eval $(call OvsPackageTemplate,libofproto))
169
170
171 ovs_libovsdb_title:=Open vSwitch (libovsdb.so)
172 ovs_libovsdb_hidden:=1
173 ovs_libovsdb_depends:= +libatomic
174 ovs_libovsdb_files:=usr/lib/libovsdb*.so*
175 $(eval $(call OvsPackageTemplate,libovsdb))
176
177
178 ovs_vswitchd_title:=Open vSwitch (ovs-vswitchd)
179 ovs_vswitchd_hidden:=1
180 ovs_vswitchd_depends:= \
181 +libatomic +openvswitch-libofproto +openvswitch-libopenvswitch
182 ovs_vswitchd_files:=usr/sbin/ovs-vswitchd
183 $(eval $(call OvsPackageTemplate,vswitchd))
184
185
186 ovs_ovsdb_title:=Open vSwitch (ovsdb-server)
187 ovs_ovsdb_hidden:=1
188 ovs_ovsdb_depends:= \
189 +libatomic +openvswitch-libopenvswitch +openvswitch-libovsdb
190 ovs_ovsdb_files:=usr/sbin/ovsdb-server
191 $(eval $(call OvsPackageTemplate,ovsdb))
192
193
194 ovs_common_title:=Open vSwitch (common files)
195 ovs_common_hidden:=1
196 ovs_common_depends:= \
197 +libatomic +openvswitch-libofproto +openvswitch-libopenvswitch \
198 +openvswitch-libovsdb
199 ovs_common_files:= \
200 usr/share/openvswitch/scripts/ovs-lib \
201 usr/share/openvswitch/scripts/ovs-ctl \
202 usr/share/openvswitch/scripts/ovs-kmod-ctl \
203 usr/share/openvswitch/scripts/ovs-save \
204 $(foreach b,ovs-appctl ovs-dpctl ovs-ofctl ovs-vsctl ovsdb-client ovsdb-tool,usr/bin/$(b))
205 define ovs_common_install
206 $$(INSTALL_DIR) $$(1)/etc/openvswitch
207 $$(INSTALL_DIR) $$(1)/etc/init.d
208 $$(INSTALL_BIN) ./files/openvswitch.init $$(1)/etc/init.d/openvswitch
209 $$(INSTALL_DIR) $$(1)/etc/config
210 $$(INSTALL_DATA) ./files/openvswitch.config $$(1)/etc/config/openvswitch
211 $$(INSTALL_DIR) $$(1)/usr/share/openvswitch/scripts
212 $$(INSTALL_BIN) ./files/ovs-ctl-wrapper $$(1)/usr/share/openvswitch/scripts/
213 $$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovs-ctl
214 $$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovs-kmod-ctl
215 endef
216 define Package/openvswitch-common/conffiles
217 /etc/config/openvswitch
218 /etc/openvswitch
219 endef
220 $(eval $(call OvsPackageTemplate,common))
221
222
223 # coreutils-sleep is required by ovs-lib for sleeping a fraction of second
224 #
225 # uuidgen is required for generating system-id
226 ovs_openvswitch_title:=Open vSwitch
227 ovs_openvswitch_hidden:=
228 ovs_openvswitch_depends:= \
229 +coreutils +coreutils-sleep +kmod-openvswitch +libatomic +openvswitch-common \
230 +openvswitch-ovsdb +openvswitch-vswitchd +uuidgen
231 ovs_openvswitch_files:= usr/share/openvswitch/vswitch.ovsschema
232 $(eval $(call OvsPackageTemplate,openvswitch))
233
234
235 ovs_python3_title:=Open vSwitch (Python3 library)
236 ovs_python3_hidden:=
237 ovs_python3_depends:=+PACKAGE_openvswitch-python3:python3
238 define ovs_python3_install
239 $$(INSTALL_DIR) $$(1)$$(PYTHON3_PKG_DIR)
240 $$(CP) $$(PKG_INSTALL_DIR)/usr/share/openvswitch/python/ovs $$(1)$$(PYTHON3_PKG_DIR)
241 endef
242 $(eval $(call OvsPackageTemplate,python3))
243
244
245 CONFIGURE_ARGS+= \
246 --enable-ndebug \
247 --enable-shared \
248 --disable-libcapng \
249 --disable-silent-rules \
250
251 CONFIGURE_VARS += \
252 $(if $(CONFIG_OPENVSWITCH_WITH_LIBUNBOUND),,ac_cv_lib_unbound_ub_ctx_create=no) \
253 ovs_cv_flake8=no \
254 ovs_cv_python3=$(PYTHON3) \
255 ovs_cv_python3_host=$(HOST_PYTHON3_BIN) \
256 SPHINXBUILD=none \
257 KARCH=$(LINUX_KARCH) \
258
259 ovs_intree_kmod_configs:=CONFIG_PACKAGE_kmod-openvswitch-intree
260 ovs_intree_kmod_enabled:=$(strip $(foreach c,$(ovs_intree_kmod_configs),$($(c))))
261 PKG_CONFIG_DEPENDS+=$(ovs_intree_kmod_configs)
262 ifneq ($(ovs_intree_kmod_enabled),)
263 ifeq ($(ovs_kmod_intree_not_supported),)
264 CONFIGURE_ARGS += --with-linux=$(LINUX_DIR)
265 else
266 $(warning XXX: openvswitch: intree kmods selected but not supported)
267 endif
268 endif
269
270 TARGET_CFLAGS += -flto -std=gnu99
271 MAKE_VARS += PYTHONPATH="$(HOST_PYTHON3PATH)"
272
273 export OVS_KERNEL_MAKE_FLAGS=$(KERNEL_MAKE_FLAGS)
274
275 override CONFIG_AUTOREMOVE=
276
277 $(foreach p,$(ovs_kmod_packages),\
278 $(eval $(call KernelPackage,$(p)))\
279 )
280 $(foreach p,$(ovs_packages),\
281 $(eval $(call BuildPackage,$(p)))\
282 )