[ovs-dev] [PATCH ovn] Build OVN using external OVS directory
Numan Siddique
nusiddiq at redhat.com
Thu Aug 1 12:29:22 UTC 2019
On Thu, Aug 1, 2019 at 5:57 PM Lucas Alvares Gomes <lucasagomes at gmail.com>
wrote:
> Thanks Numan,
>
> I've manually tested it (using the snippet example in the commit
> message) locally in an env of mine and it works.
>
Thanks for the review. Right now this patch is failing in travis CI. It
runs "make distcheck" and it is failing
I am working on it.
Thanks
Numan
>
> On Wed, Jul 31, 2019 at 7:49 PM <nusiddiq at redhat.com> wrote:
> >
> > From: Numan Siddique <nusiddiq at redhat.com>
> >
> > With this patch we have to configure OVN to refer to external OVS
> source/build
> > directory instead of the ovs subtree.
> >
> > The new configuration options added are:
> > * --with-ovs-source=/path/to/ovs/source/dir
> > * --with-ovs-build=/path/to/ovs/build/dir
> >
> > Before configuring OVN, user should configure and compile OVS. If the
> user has
> > configured OVS on a different directory than the source dir, then
> 'with-ovs-build'
> > should be specified.
> >
> > If ovs-build dir is not defined, then ovs-source is used.
> >
> > An upcoming patch will delete the ovs subtree.
> >
> > Example usage:
> > $ # Clone OVS repo
> > $cd /home/foo/ovs
> > $./boot.sh
> > $mkdir _gcc
> > $cd _gcc && ../configure && cd ..
> > $make -C _gcc
> >
> > $ # Clone OVN repo
> > $cd /home/foo/ovn
> > $./boot.sh
> > $./configure --with-ovs-source=/home/foo/ovs/
> --with-ovs-build=/home/foo/ovs/_gcc
> > $make
> >
> > Signed-off-by: Numan Siddique <nusiddiq at redhat.com>
> > ---
> > .travis/linux-build.sh | 16 +++++++++--
> > Documentation/intro/install/general.rst | 32 +++++++++++++++++-----
> > Makefile.am | 24 +++++++----------
> > acinclude.m4 | 35 +++++++++++++++++++++++++
> > configure.ac | 29 ++++++++++----------
> > controller-vtep/automake.mk | 2 +-
> > include/ovn/version.h.in | 28 ++++++++++++++++++++
> > lib/ovsdb_automake.mk | 12 ++++-----
> > tests/automake.mk | 2 +-
> > 9 files changed, 136 insertions(+), 44 deletions(-)
> > create mode 100644 include/ovn/version.h.in
> >
> > diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
> > index a20474345..14c5413db 100755
> > --- a/.travis/linux-build.sh
> > +++ b/.travis/linux-build.sh
> > @@ -8,9 +8,21 @@ SPARSE_FLAGS=""
> > EXTRA_OPTS=""
> > TARGET="x86_64-native-linuxapp-gcc"
> >
> > +ovs_dir=$PWD/ovs_src
> > +
> > function configure_ovs()
> > {
> > + git clone https://github.com/openvswitch/ovs.git $ovs_dir
> > + pushd $ovs_dir
> > ./boot.sh && ./configure $* || { cat config.log; exit 1; }
> > + make -j4
> > + popd
> > +}
> > +
> > +function configure_ovn()
> > +{
> > + configure_ovs
> > + ./boot.sh && ./configure --with-ovs-source=$ovs_dir $* || { cat
> config.log; exit 1; }
> > }
> >
> > OPTS="$EXTRA_OPTS $*"
> > @@ -28,7 +40,7 @@ fi
> > if [ "$TESTSUITE" ]; then
> > # 'distcheck' will reconfigure with required options.
> > # Now we only need to prepare the Makefile without sparse-wrapped
> CC.
> > - configure_ovs
> > + configure_ovn
> >
> > export DISTCHECK_CONFIGURE_FLAGS="$OPTS"
> > if ! make distcheck -j4 TESTSUITEFLAGS="-j4 -k ovn" RECHECK=yes;
> then
> > @@ -37,7 +49,7 @@ if [ "$TESTSUITE" ]; then
> > exit 1
> > fi
> > else
> > - configure_ovs $OPTS
> > + configure_ovn $OPTS
> > make selinux-policy
> >
> > make -j4
> > diff --git a/Documentation/intro/install/general.rst
> b/Documentation/intro/install/general.rst
> > index 99d8fec04..dc1a347de 100644
> > --- a/Documentation/intro/install/general.rst
> > +++ b/Documentation/intro/install/general.rst
> > @@ -42,9 +42,8 @@ out. This is the right branch for general development.
> >
> > As of now there are no official OVN releases.
> >
> > -Although building OVN, also builds OVS, it is recommended to clone
> > -and build OVS from its own repo. Please see the Open vSwitch
> > -documentation to build and install OVS.
> > +Before building OVN you should configure and build OVS.
> > +Please see the Open vSwitch documentation to build and install OVS.
> >
> > .. _general-build-reqs:
> >
> > @@ -143,16 +142,24 @@ the "configure" script::
> >
> > $ ./boot.sh
> >
> > +Before configuring OVN, clone, configure and build Open vSwitch.
> > +
> > .. _general-configuring:
> >
> > Configuring
> > -----------
> >
> > -Configure the package by running the configure script. You can usually
> > -invoke configure without any arguments. For example::
> > +Configure the package by running the configure script. You need to
> > +invoke configure with atleast the argument --with-ovs-source.
> > +For example::
> > +
> > + $ ./configure --with-ovs-source=/path/to/ovs/source
> >
> > - $ ./configure
> > +If you have built Open vSwitch in a separate directory, then you
> > +need to provide that path in the option - --with-ovs-build.
> >
> > +As of now, OVN uses all the run time directory of Open vSwitch. This
> > +will be changed to ``ovn`` specific directories.
> > By default all files are installed under ``/usr/local``. OVN and Open
> vSwitch
> > also expects to find its database in ``/usr/local/etc/openvswitch`` by
> default.
> > If you want to install all files into, e.g., ``/usr`` and ``/var``
> instead of
> > @@ -272,6 +279,19 @@ you wish to link with jemalloc add it to LIBS::
> >
> > $ ./configure LIBS=-ljemalloc
> >
> > +Example usage::
> > + $ # Clone OVS repo
> > + $cd /home/foo/ovs
> > + $./boot.sh
> > + $mkdir _gcc
> > + $cd _gcc && ../configure && cd ..
> > + $make -C _gcc
> > +
> > + $ # Clone OVN repo
> > + $cd /home/foo/ovn
> > + $./boot.sh
> > + $./configure --with-ovs-source=/home/foo/ovs/
> --with-ovs-build=/home/foo/ovs/_gcc
> > +
> > .. _general-building:
> >
> > Building
> > diff --git a/Makefile.am b/Makefile.am
> > index 16d4d02e4..26ff83f92 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -7,7 +7,7 @@
> >
> > AUTOMAKE_OPTIONS = foreign subdir-objects
> > ACLOCAL_AMFLAGS = -I m4
> > -SUBDIRS = ovs
> > +#SUBDIRS = ovs
> >
> > OVS_SRCDIR=@ovs_srcdir@
> > OVS_BUILDDIR=@ovs_builddir@
> > @@ -22,9 +22,9 @@ AM_LDFLAGS += $(OVS_LDFLAGS)
> > AM_CPPFLAGS += -I $(top_srcdir)/include
> >
> > if WIN32
> > -AM_CPPFLAGS += -I $(top_srcdir)/ovs/include
> > -AM_CPPFLAGS += -I $(top_srcdir)/ovs/lib
> > -AM_CPPFLAGS += -I $(top_srcdir)/ovs
> > +AM_CPPFLAGS += -I $(OVS_SRCDIR)/include
> > +AM_CPPFLAGS += -I $(OVS_SRCDIR)/lib
> > +AM_CPPFLAGS += -I $(OVS_SRCDIR)
> > AM_CPPFLAGS += -I $(top_srcdir)/lib
> > AM_CPPFLAGS += $(PTHREAD_INCLUDES)
> > AM_CPPFLAGS += $(MSVC_CFLAGS)
> > @@ -33,6 +33,10 @@ AM_LDFLAGS += $(MSVC64_LDFLAGS)
> > PLATFORM = $(MSVC_PLATFORM)
> > endif
> >
> > +AM_CPPFLAGS += -I $(top_srcdir)/include
> > +AM_CPPFLAGS += -I $(top_srcdir)/ovn
> > +AM_CPPFLAGS += -I $(top_builddir)/include
> > +
> > AM_CPPFLAGS += -I $(OVS_SRCDIR)/include
> > AM_CPPFLAGS += -I $(OVS_BUILDDIR)/include
> > AM_CPPFLAGS += -I $(OVS_SRCDIR)/lib
> > @@ -113,8 +117,7 @@ EXTRA_DIST = \
> > ovn-nb.ovsschema \
> > ovn-nb.xml \
> > ovn-sb.ovsschema \
> > - ovn-sb.xml \
> > - ovs/
> > + ovn-sb.xml
> > bin_PROGRAMS =
> > sbin_PROGRAMS =
> > bin_SCRIPTS =
> > @@ -220,13 +223,6 @@ CLEAN_LOCAL += clean-pycov
> > ALL_LOCAL += dist-hook-git
> > dist-hook-git: distfiles
> > @if test -e $(srcdir)/.git && (git --version) >/dev/null 2>&1;
> then \
> > - (cd ovs && $(MAKE) distfiles); \
> > - (cat distfiles; sed 's|^|ovs/|' ovs/distfiles) | \
> > - LC_ALL=C sort -u > ovs-distfiles; \
> > - (cd ovs/datapath && $(MAKE) distfiles); \
> > - (cat distfiles; sed 's|^|ovs/datapath/|'
> ovs/datapath/distfiles) | \
> > - LC_ALL=C sort -u > datapath-distfiles; \
> > - LC_ALL=C sort -u ovs-distfiles datapath-distfiles >
> all-distfiles; \
> > (cd $(srcdir) && git ls-files) | grep -v '\.gitignore$$' | \
> > grep -v '\.gitattributes$$' | \
> > LC_ALL=C sort -u > all-gitfiles; \
> > @@ -242,7 +238,7 @@ dist-hook-git: distfiles
> > exit 1; \
> > fi \
> > fi
> > -CLEANFILES += ovs-distfiles datapath-distfiles all-distfiles
> all-gitfiles missing-distfiles
> > +CLEANFILES += all-distfiles all-gitfiles missing-distfiles
> > # The following is based on commands for the Automake "distdir" target.
> > distfiles: Makefile
> > @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
> > diff --git a/acinclude.m4 b/acinclude.m4
> > index 7604c92b8..b0211ed35 100644
> > --- a/acinclude.m4
> > +++ b/acinclude.m4
> > @@ -1206,3 +1206,38 @@ AC_DEFUN([OVS_CHECK_LINUX_HOST],
> > [ovs_cv_linux=true],
> > [ovs_cv_linux=false])])
> > AM_CONDITIONAL([LINUX], [$ovs_cv_linux])])
> > +
> > +dnl OVN_CHECK_OVS
> > +dnl
> > +dnl Check for OVS sources
> > +AC_DEFUN([OVN_CHECK_OVS], [
> > + AC_ARG_WITH([ovs-source],
> > + [AC_HELP_STRING([--ovs-source=/path/to/ovs/src/dir],
> > + [Specify the OVS src directory])])
> > + AC_ARG_WITH([ovs-build],
> > + [AC_HELP_STRING([--ovs-build=/path/to/ovs/build/dir],
> > + [Specify the OVS build directory])])
> > +
> > + AC_MSG_CHECKING([for OVS source directory])
> > + if test X"$with_ovs_source" != X; then
> > + OVSDIR=$with_ovs_source
> > + else
> > + AC_ERROR([OVS source dir path needs to be specified])
> > + fi
> > +
> > + OVSDIR=`eval echo "$OVSDIR"`
> > + AC_MSG_RESULT([$OVSDIR])
> > + AC_SUBST(OVSDIR)
> > +
> > + AC_MSG_CHECKING([for OVS build directory])
> > + if test X"$with_ovs_build" != X; then
> > + OVSBUILDDIR=$with_ovs_build
> > + else
> > + # If separate build dir is not specified, use src dir.
> > + OVSBUILDDIR=$OVSDIR
> > + fi
> > +
> > + OVSBUILDDIR=`eval echo "$OVSBUILDDIR"`
> > + AC_MSG_RESULT([$OVSBUILDDIR])
> > + AC_SUBST(OVSBUILDDIR)
> > +])
> > diff --git a/configure.ac b/configure.ac
> > index 180bbcd7c..83aca3f02 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -20,7 +20,7 @@ AC_CONFIG_HEADERS([config.h])
> > AC_CONFIG_TESTDIR([tests])
> > AM_INIT_AUTOMAKE([tar-pax])
> >
> > -AC_CONFIG_SUBDIRS([ovs])
> > +#AC_CONFIG_SUBDIRS([ovs])
> >
> > AC_PROG_CC_C99
> > AM_PROG_CC_C_O
> > @@ -64,23 +64,17 @@ m4_pattern_forbid([LT_INIT]) dnl Make autoconf fail
> if libtool is missing.
> > # the new version. This is the case when symbols have been modified
> or
> > # deleted. Bump current, set revision and age to 0.
> >
> > -m4_define([libopenvswitch_lt_current], [0])
> > -m4_define([libopenvswitch_lt_revision], [0])
> > -m4_define([libopenvswitch_lt_age], [0])
> > +m4_define([libovn_lt_current], [0])
> > +m4_define([libovn_lt_revision], [0])
> > +m4_define([libovn_lt_age], [0])
> >
> > -LT_CURRENT=libopenvswitch_lt_current
> > +LT_CURRENT=libovn_lt_current
> > AC_SUBST([LT_CURRENT])
> > -LT_REVISION=libopenvswitch_lt_revision
> > +LT_REVISION=libovn_lt_revision
> > AC_SUBST([LT_REVISION])
> > -LT_AGE=libopenvswitch_lt_age
> > +LT_AGE=libovn_lt_age
> > AC_SUBST([LT_AGE])
> >
> > -AC_SUBST([ovs_srcdir], ['${top_srcdir}/ovs'])
> > -AC_SUBST([ovs_builddir], ['${top_builddir}/ovs'])
> > -AC_SUBST([ovs_libdir], ['${top_builddir}/ovs/lib'])
> > -AC_SUBST([ovsdb_libdir], ['${top_builddir}/ovs/ovsdb'])
> > -AC_SUBST([ovs_mandir], ['${top_srcdir}/ovs/'])
> > -
> > AC_SEARCH_LIBS([pow], [m])
> > AC_SEARCH_LIBS([clock_gettime], [rt])
> > AC_SEARCH_LIBS([timer_create], [rt])
> > @@ -187,12 +181,19 @@ OVS_CHECK_LINUX
> > OVS_CHECK_LINUX_TC
> > OVS_CHECK_DPDK
> > OVS_CHECK_PRAGMA_MESSAGE
> > +OVN_CHECK_OVS
> > AC_SUBST([OVS_CFLAGS])
> > AC_SUBST([OVS_LDFLAGS])
> >
> > +AC_SUBST([ovs_srcdir], ['${OVSDIR}'])
> > +AC_SUBST([ovs_builddir], ['${OVSBUILDDIR}'])
> > +AC_SUBST([ovs_libdir], ['${OVSBUILDDIR}/lib'])
> > +AC_SUBST([ovsdb_libdir], ['${OVSBUILDDIR}/ovsdb'])
> > +AC_SUBST([ovs_mandir], ['${OVSDIR}'])
> > +
> > AC_CONFIG_FILES(Makefile)
> > AC_CONFIG_FILES(tests/atlocal)
> > -AC_CONFIG_FILES(ovs/include/openvswitch/version.h)
> > +AC_CONFIG_FILES(include/ovn/version.h)
> >
> > dnl This makes sure that include/openflow gets created in the build
> directory.
> > AC_CONFIG_COMMANDS([include/openflow/openflow.h.stamp])
> > diff --git a/controller-vtep/automake.mk b/controller-vtep/automake.mk
> > index a6810969f..a5779eba6 100644
> > --- a/controller-vtep/automake.mk
> > +++ b/controller-vtep/automake.mk
> > @@ -8,7 +8,7 @@ controller_vtep_ovn_controller_vtep_SOURCES = \
> > controller-vtep/ovn-controller-vtep.h \
> > controller-vtep/vtep.c \
> > controller-vtep/vtep.h
> > -controller_vtep_ovn_controller_vtep_LDADD = lib/libovn.la
> $(OVS_LIBDIR)/libopenvswitch.la ovs/vtep/libvtep.la
> > +controller_vtep_ovn_controller_vtep_LDADD = lib/libovn.la
> $(OVS_LIBDIR)/libopenvswitch.la $(OVSBUILDDIR)/vtep/libvtep.la
> > man_MANS += controller-vtep/ovn-controller-vtep.8
> > EXTRA_DIST += controller-vtep/ovn-controller-vtep.8.xml
> > CLEANFILES += controller-vtep/ovn-controller-vtep.8
> > diff --git a/include/ovn/version.h.in b/include/ovn/version.h.in
> > new file mode 100644
> > index 000000000..e27415ba1
> > --- /dev/null
> > +++ b/include/ovn/version.h.in
> > @@ -0,0 +1,28 @@
> > +/*
> > + * Copyright (c) 2014 Nicira, Inc.
> > + * Copyright (c) 2014 Cisco Systems, Inc.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at:
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +
> > +#ifndef OVN_VERSION_H
> > +#define OVN_VERSION_H 1
> > +
> > +#define OVN_PACKAGE_STRING "@PACKAGE_STRING@"
> > +#define OVN_PACKAGE_VERSION "@PACKAGE_VERSION@"
> > +
> > +#define OVN_LIB_VERSION @LT_CURRENT@
> > +#define OVN_LIB_REVISION @LT_REVISION@
> > +#define OVN_LIB_AGE @LT_AGE@
> > +
> > +#endif /* ovn/version.h */
> > diff --git a/lib/ovsdb_automake.mk b/lib/ovsdb_automake.mk
> > index f6fd5e8b3..73f236d1e 100644
> > --- a/lib/ovsdb_automake.mk
> > +++ b/lib/ovsdb_automake.mk
> > @@ -1,10 +1,10 @@
> > # ovsdb-idlc
> > -noinst_SCRIPTS += ovs/ovsdb/ovsdb-idlc
> > -EXTRA_DIST += ovs/ovsdb/ovsdb-idlc.in
> > -MAN_ROOTS += ovs/ovsdb/ovsdb-idlc.1
> > -CLEANFILES += ovs/ovsdb/ovsdb-idlc
> > +noinst_SCRIPTS += ${OVSDIR}/ovsdb/ovsdb-idlc
> > +EXTRA_DIST += ${OVSDIR}/ovsdb/ovsdb-idlc.in
> > +MAN_ROOTS += ${OVSDIR}/ovsdb/ovsdb-idlc.1
> > +CLEANFILES += ${OVSDIR}/ovsdb/ovsdb-idlc
> > SUFFIXES += .ovsidl .ovsschema
> > -OVSDB_IDLC = $(run_python) $(srcdir)/ovs/ovsdb/ovsdb-idlc.in
> > +OVSDB_IDLC = $(run_python) ${OVSDIR}/ovsdb/ovsdb-idlc.in
> > .ovsidl.c:
> > $(AM_V_GEN)$(OVSDB_IDLC) c-idl-source $< > $@.tmp && mv $@.tmp $@
> > .ovsidl.h:
> > @@ -21,5 +21,5 @@ CLEANFILES += $(OVSIDL_BUILT)
> > # However, current versions of Automake seem to output all variable
> > # assignments before any targets, so it doesn't seem to be a problem,
> > # at least for now.
> > -$(OVSIDL_BUILT): ovs/ovsdb/ovsdb-idlc.in
> > +$(OVSIDL_BUILT): ${OVSDIR}/ovsdb/ovsdb-idlc.in
> >
> > diff --git a/tests/automake.mk b/tests/automake.mk
> > index 5411772a4..255964fb7 100644
> > --- a/tests/automake.mk
> > +++ b/tests/automake.mk
> > @@ -51,7 +51,7 @@ SYSTEM_KMOD_TESTSUITE =
> $(srcdir)/tests/system-kmod-testsuite
> > SYSTEM_USERSPACE_TESTSUITE = $(srcdir)/tests/system-userspace-testsuite
> > DISTCLEANFILES += tests/atconfig tests/atlocal
> >
> > -AUTOTEST_PATH =
> ovs/utilities:ovs/vswitchd:ovs/ovsdb:ovs/vtep:tests:$(PTHREAD_WIN32_DIR_DLL):$(SSL_DIR):controller-vtep:northd:utilities:controller
> > +AUTOTEST_PATH =
> $(ovs_builddir)/utilities:$(ovs_builddir)/vswitchd:$(ovs_builddir)/ovsdb:$(ovs_builddir)/vtep:tests:$(PTHREAD_WIN32_DIR_DLL):$(SSL_DIR):controller-vtep:northd:utilities:controller
> >
> > check-local:
> > set $(SHELL) '$(TESTSUITE)' -C tests
> AUTOTEST_PATH=$(AUTOTEST_PATH); \
> > --
> > 2.21.0
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
> Acked-By: Lucas Alvares Gomes <lucasagomes at gmail.com>
>
More information about the dev
mailing list