packages/net/openvswitch/Makefile
Yousong Zhou c2f788f054 openvswitch: rework packaging
New scheme mainly provides three packages: openvswitch,
openvswitch-ovn-north, openvswitch-ovn-controller.  These should fit
most usage scenarios.  Other subpackages like openvswitch-libXXX
etc.  are there for dependency management and are hidden from the
menu.

Many python and shell scripts are removed in this revision.  Most of
them cannot run out of box at all for lack of dependencies.  Others
being legacy ones are not that useful now.  Add them back at later time
when real need appears

Below are a simple listing of additions

 - initscript now incorporate also ovn north and controller support
 - ovn-ctl and ovs-ctl can be invoked directly from within $PATH

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
2018-06-04 11:27:54 +08:00

252 lines
7.8 KiB
Makefile

#
# Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
# Copyright (C) 2014-2017 OpenWrt.org
# Copyright (C) 2018 Yousong Zhou <yszhou4tech@gmail.com>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=openvswitch
PKG_VERSION:=2.8.2
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.openvswitch.org/releases/
PKG_HASH:=87b4a7e7134a44ce1f808d3415a2244b4518c2b0b2a42fa2f8231e592f13103d
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_DEPENDS:=python/host python-six/host
PKG_USE_MIPS16:=0
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
include $(INCLUDE_DIR)/package.mk
include ../../lang/python/python-host.mk
include ../../lang/python/python-package.mk
CONFIGURE_ARGS+= \
--enable-ndebug \
--enable-shared \
--disable-libcapng \
CONFIGURE_VARS += \
ovs_cv_flake8=no \
ovs_cv_python3=no \
ovs_cv_sphinx=no \
ovs_cv_python=$(PYTHON) \
ovs_cv_python_host=$(HOST_PYTHON_BIN) \
TARGET_CFLAGS += -flto -std=gnu99
MAKE_VARS += PYTHONPATH="$(HOST_PYTHONPATH)"
define KernelPackage/openvswitch
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Support
TITLE:=Open vSwitch kernel datapath
KCONFIG:=CONFIG_OPENVSWITCH
DEPENDS:= \
+kmod-lib-crc32c +kmod-mpls \
+kmod-nf-nat +IPV6:kmod-nf-nat6
FILES:= $(LINUX_DIR)/net/openvswitch/openvswitch.ko
AUTOLOAD:=$(call AutoProbe,openvswitch)
endef
define KernelPackage/openvswitch-gre
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Support
TITLE:=Open vSwitch GRE tunneling support
KCONFIG:= CONFIG_OPENVSWITCH_GRE
DEPENDS:= +kmod-openvswitch +kmod-gre
FILES:= $(LINUX_DIR)/net/openvswitch/vport-gre.ko
AUTOLOAD:=$(call AutoProbe,vport-gre)
endef
define KernelPackage/openvswitch-vxlan
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Support
TITLE:=Open vSwitch VXLAN tunneling support
KCONFIG:= CONFIG_OPENVSWITCH_VXLAN
DEPENDS:= +kmod-openvswitch +kmod-vxlan
FILES:= $(LINUX_DIR)/net/openvswitch/vport-vxlan.ko
AUTOLOAD:=$(call AutoProbe,vport-vxlan)
endef
define KernelPackage/openvswitch-geneve
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Support
TITLE:=Open vSwitch Geneve tunneling support
KCONFIG:= CONFIG_OPENVSWITCH_GENEVE
DEPENDS:= +kmod-openvswitch +kmod-geneve
FILES:= $(LINUX_DIR)/net/openvswitch/vport-geneve.ko
AUTOLOAD:=$(call AutoProbe,vport-geneve)
endef
ovs_packages:=
ovs_package_name=$(if $(filter openvswitch,$(1)),openvswitch,openvswitch-$(1))
define OvsPackageTemplate
define Package/$(call ovs_package_name,$(1))
SECTION:=net
SUBMENU:=Open vSwitch
CATEGORY:=Network
URL:=https://www.openvswitch.org
TITLE:=$(ovs_$(1)_title)
HIDDEN:=$(ovs_$(1)_hidden)
DEPENDS:=$(ovs_$(1)_depends)
endef
define Package/$(call ovs_package_name,$(1))/install
$(foreach f,$(ovs_$(1)_files),
$(INSTALL_DIR) $$(1)/$(dir $(f))
$(CP) $(PKG_INSTALL_DIR)/$(f) $$(1)/$(dir $(f))
)
$(ovs_$(1)_install)
endef
ovs_packages+=$(call ovs_package_name,$(1))
endef
# Dependency review
#
# for f in sbin/*; do echo $f; readelf -d $f | grep -i shared; done
# for f in bin/*; do echo $f; readelf -d $f | grep -i shared; done
# for f in lib/*.so; do echo $f; readelf -d $f | grep -i shared; done
#
ovs_libopenvswitch_title:=Open vSwitch (libopenvswitch.so)
ovs_libopenvswitch_hidden:=1
ovs_libopenvswitch_depends:=+libopenssl +librt
ovs_libopenvswitch_files:=usr/lib/libopenvswitch*.so*
$(eval $(call OvsPackageTemplate,libopenvswitch))
ovs_libofproto_title:=Open vSwitch (libofproto.so libsflow.so)
ovs_libofproto_hidden:=1
ovs_libofproto_depends:=+librt
ovs_libofproto_files:=usr/lib/libofproto*.so* usr/lib/libsflow*.so*
$(eval $(call OvsPackageTemplate,libofproto))
ovs_libovsdb_title:=Open vSwitch (libovsdb.so)
ovs_libovsdb_hidden:=1
ovs_libovsdb_depends:=+librt
ovs_libovsdb_files:=usr/lib/libovsdb*.so*
$(eval $(call OvsPackageTemplate,libovsdb))
ovs_libovn_title:=Open vSwitch (libovn.so)
ovs_libovn_hidden:=1
ovs_libovn_depends:=+librt
ovs_libovn_files:=usr/lib/libovn*.so*
$(eval $(call OvsPackageTemplate,libovn))
ovs_vswitchd_title:=Open vSwitch (ovs-vswitchd)
ovs_vswitchd_hidden:=1
ovs_vswitchd_depends:=+librt +openvswitch-libopenvswitch +openvswitch-libofproto
ovs_vswitchd_files:=usr/sbin/ovs-vswitchd
$(eval $(call OvsPackageTemplate,vswitchd))
ovs_ovsdb_title:=Open vSwitch (ovsdb-server)
ovs_ovsdb_hidden:=1
ovs_ovsdb_depends:=+librt +openvswitch-libopenvswitch +openvswitch-libovsdb
ovs_ovsdb_files:=usr/sbin/ovsdb-server
$(eval $(call OvsPackageTemplate,ovsdb))
ovs_common_title:=Open vSwitch (common files)
ovs_common_hidden:=1
ovs_common_depends:=+librt +openvswitch-libopenvswitch +openvswitch-libofproto +openvswitch-libovsdb
ovs_common_files:= \
usr/share/openvswitch/scripts/ovs-lib \
usr/share/openvswitch/scripts/ovs-ctl \
usr/share/openvswitch/scripts/ovs-save \
$(foreach b,ovs-appctl ovs-dpctl ovs-ofctl ovs-vsctl ovsdb-client ovsdb-tool,usr/bin/$(b))
define ovs_common_install
$$(INSTALL_DIR) $$(1)/etc/openvswitch
$$(INSTALL_DIR) $$(1)/etc/init.d
$$(INSTALL_BIN) ./files/openvswitch.init $$(1)/etc/init.d/openvswitch
$$(INSTALL_DIR) $$(1)/etc/config
$$(INSTALL_DATA) ./files/openvswitch.config $$(1)/etc/config/openvswitch
$$(INSTALL_DIR) $$(1)/usr/share/openvswitch/scripts
$$(INSTALL_BIN) ./files/ovs-ctl-wrapper $$(1)/usr/share/openvswitch/scripts/
$$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovs-ctl
endef
define Package/openvswitch-common/conffiles
/etc/openvswitch
endef
$(eval $(call OvsPackageTemplate,common))
# coreutils-sleep is required by ovs-lib for sleeping a fraction of second
#
# uuidgen is required for generating system-id
ovs_openvswitch_title:=Open vSwitch
ovs_openvswitch_hidden:=
ovs_openvswitch_depends:=+librt +coreutils +coreutils-sleep +uuidgen \
+openvswitch-common +openvswitch-vswitchd +openvswitch-ovsdb +kmod-openvswitch
ovs_openvswitch_files:= usr/share/openvswitch/vswitch.ovsschema
$(eval $(call OvsPackageTemplate,openvswitch))
ovs_ovn-common_title:=Open Virtual Network (common files)
ovs_ovn-common_hidden:=1
ovs_ovn-common_depends:=+librt +openvswitch-common +openvswitch-libopenvswitch +openvswitch-libovn +openvswitch-libovsdb
ovs_ovn-common_files:= \
usr/share/openvswitch/scripts/ovn-ctl \
$(foreach b,ovn-nbctl ovn-sbctl ovn-trace ovn-detrace,usr/bin/$(b))
define ovs_ovn-common_install
$$(INSTALL_DIR) $$(1)/usr/share/openvswitch/scripts
$$(LN) /usr/share/openvswitch/scripts/ovs-ctl-wrapper $$(1)/usr/bin/ovn-ctl
endef
$(eval $(call OvsPackageTemplate,ovn-common))
ovs_ovn-north_title:=Open Virtual Network (north package)
ovs_ovn-north_hidden:=
ovs_ovn-north_depends:=+openvswitch-ovsdb +openvswitch-ovn-common
ovs_ovn-north_files:=\
usr/share/openvswitch/ovn-nb.ovsschema \
usr/share/openvswitch/ovn-sb.ovsschema \
usr/bin/ovn-northd
$(eval $(call OvsPackageTemplate,ovn-north))
ovs_ovn-host_title:=Open Virtual Network (chassis package)
ovs_ovn-host_hidden:=
ovs_ovn-host_depends:=+openvswitch +openvswitch-ovn-common
ovs_ovn-host_files:=usr/bin/ovn-controller
$(eval $(call OvsPackageTemplate,ovn-host))
ovs_python_title:=Open vSwitch (Python library)
ovs_python_hidden:=
ovs_python_depends:=+PACKAGE_openvswitch-python:python +PACKAGE_openvswitch-python:python-six
define ovs_python_install
$$(INSTALL_DIR) $$(1)$$(PYTHON_PKG_DIR)
$$(CP) $$(PKG_INSTALL_DIR)/usr/share/openvswitch/python/ovs $$(1)$$(PYTHON_PKG_DIR)
endef
$(eval $(call OvsPackageTemplate,python))
$(foreach p,$(ovs_packages),\
$(eval $(call BuildPackage,$(p)))\
)
$(eval $(call KernelPackage,openvswitch))
$(eval $(call KernelPackage,openvswitch-gre))
$(eval $(call KernelPackage,openvswitch-vxlan))
$(eval $(call KernelPackage,openvswitch-geneve))