mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +00:00
Build: Add support for shared libraries and versioning.
These changes allow for the building of shared libraries by providing the --enable-shared option to configure. In particular, lib/libopenvwitch.so, lib/libsflow.so, ofproto/libofproto.so, and ovsdb/libovsdb.so will be built. Original behavior of building static remains the same. Additionally, versioning is introduced to each of the libraries objects paving the way for APIs to be built around them. A detailed comment outlining the rules for changing a version number is provided in configure.ac. Note that at this time, the version number is set to 1.0.0, no API is specified yet, and there are no requirements to maintain any sort of compatibility in any of the libraries. Signed-off-by: Scott Mann <smann@noironetworks.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
parent
86f35fb5c6
commit
7f2f24e379
1
.gitignore
vendored
1
.gitignore
vendored
@ -16,6 +16,7 @@
|
||||
*.pyc
|
||||
*.so
|
||||
*.suo
|
||||
**/*.sym
|
||||
*~
|
||||
*,cover
|
||||
.#*
|
||||
|
@ -24,6 +24,8 @@ function install_dpdk()
|
||||
cd dpdk-1.7.1
|
||||
find ./ -type f | xargs sed -i 's/max-inline-insns-single=100/max-inline-insns-single=400/'
|
||||
sed -ri 's,(CONFIG_RTE_BUILD_COMBINE_LIBS=).*,\1y,' config/common_linuxapp
|
||||
sed -ri '/CONFIG_RTE_LIBNAME/a CONFIG_RTE_BUILD_FPIC=y' config/common_linuxapp
|
||||
sed -ri '/EXECENV_CFLAGS = -pthread -fPIC/{s/$/\nelse ifeq ($(CONFIG_RTE_BUILD_FPIC),y)/;s/$/\nEXECENV_CFLAGS = -pthread -fPIC/}' mk/exec-env/linuxapp/rte.vars.mk
|
||||
make config CC=gcc T=x86_64-native-linuxapp-gcc
|
||||
make CC=gcc RTE_KERNELDIR=$KERNELSRC
|
||||
echo "Installed DPDK source in $(pwd)"
|
||||
|
1
AUTHORS
1
AUTHORS
@ -131,6 +131,7 @@ Samuel Ghinet sghinet@cloudbasesolutions.com
|
||||
Sanjay Sane ssane@nicira.com
|
||||
Saurabh Shah ssaurabh@nicira.com
|
||||
Scott Lowe scott.lowe@scottlowe.org
|
||||
Scott Mann sdmnix@gmail.com
|
||||
Selvamuthukumar smkumar@merunetworks.com
|
||||
Shan Wei davidshan@tencent.com
|
||||
Shih-Hao Li shli@nicira.com
|
||||
|
43
configure.ac
43
configure.ac
@ -43,6 +43,41 @@ AC_SYS_LARGEFILE
|
||||
LT_INIT([disable-shared])
|
||||
m4_pattern_forbid([LT_INIT]) dnl Make autoconf fail if libtool is missing.
|
||||
|
||||
# The following explanation may help to understand the use of the
|
||||
# version number fields: current, revision, and age.
|
||||
#
|
||||
# Consider that there are three possible kinds of reactions from
|
||||
# users of your library to changes in a shared library:
|
||||
#
|
||||
# 1. Programs using the previous version may use the new version as drop-in
|
||||
# replacement, and programs using the new version can also work with the
|
||||
# previous one. In other words, no recompiling nor relinking is needed.
|
||||
# In short, there are no changes to any symbols, no symbols removed,
|
||||
# and no symbols added. In this case, bump revision only, don't touch
|
||||
# current nor age.
|
||||
#
|
||||
# 2. Programs using the previous version may use the new version as drop-in
|
||||
# replacement, but programs using the new version may use APIs not
|
||||
# present in the previous one. In other words, new symbols have been
|
||||
# added and a program linking against the new version may fail with
|
||||
# “unresolved symbols.” If linking against the old version at runtime:
|
||||
# set revision to 0, bump current and age.
|
||||
#
|
||||
# 3. Programs may need to be changed, recompiled, relinked in order to use
|
||||
# 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], [1])
|
||||
m4_define([libopenvswitch_lt_revision], [0])
|
||||
m4_define([libopenvswitch_lt_age], [0])
|
||||
|
||||
LT_CURRENT=libopenvswitch_lt_current
|
||||
AC_SUBST([LT_CURRENT])
|
||||
LT_REVISION=libopenvswitch_lt_revision
|
||||
AC_SUBST([LT_REVISION])
|
||||
LT_AGE=libopenvswitch_lt_age
|
||||
AC_SUBST([LT_AGE])
|
||||
|
||||
AC_SEARCH_LIBS([pow], [m])
|
||||
AC_SEARCH_LIBS([clock_gettime], [rt])
|
||||
AC_SEARCH_LIBS([timer_create], [rt])
|
||||
@ -94,7 +129,13 @@ OVS_CHECK_LINUX_HOST
|
||||
AX_FUNC_POSIX_MEMALIGN
|
||||
|
||||
OVS_CHECK_INCLUDE_NEXT([stdio.h string.h])
|
||||
AC_CONFIG_FILES([lib/stdio.h lib/string.h])
|
||||
AC_CONFIG_FILES([
|
||||
lib/stdio.h
|
||||
lib/string.h
|
||||
ovsdb/libovsdb.sym
|
||||
ofproto/libofproto.sym
|
||||
lib/libsflow.sym
|
||||
lib/libopenvswitch.sym])
|
||||
|
||||
OVS_ENABLE_OPTION([-Wall])
|
||||
OVS_ENABLE_OPTION([-Wextra])
|
||||
|
@ -13,7 +13,9 @@ if WIN32
|
||||
lib_libopenvswitch_la_LIBADD += ${PTHREAD_LIBS}
|
||||
endif
|
||||
|
||||
lib_libopenvswitch_la_LDFLAGS = -release $(VERSION)
|
||||
lib_libopenvswitch_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||
-Wl,--version-script=$(top_builddir)/lib/libopenvswitch.sym
|
||||
|
||||
lib_libopenvswitch_la_SOURCES = \
|
||||
lib/aes128.c \
|
||||
@ -291,7 +293,9 @@ nodist_lib_libopenvswitch_la_SOURCES = \
|
||||
CLEANFILES += $(nodist_lib_libopenvswitch_la_SOURCES)
|
||||
|
||||
lib_LTLIBRARIES += lib/libsflow.la
|
||||
lib_libsflow_la_LDFLAGS = -release $(VERSION)
|
||||
lib_libsflow_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||
-Wl,--version-script=$(top_builddir)/lib/libsflow.sym
|
||||
lib_libsflow_la_SOURCES = \
|
||||
lib/sflow_api.h \
|
||||
lib/sflow.h \
|
||||
|
4
lib/libopenvswitch.sym.in
Normal file
4
lib/libopenvswitch.sym.in
Normal file
@ -0,0 +1,4 @@
|
||||
libopenvswitch_@LT_CURRENT@ {
|
||||
global:
|
||||
*;
|
||||
};
|
4
lib/libsflow.sym.in
Normal file
4
lib/libsflow.sym.in
Normal file
@ -0,0 +1,4 @@
|
||||
libsflow_@LT_CURRENT@ {
|
||||
global:
|
||||
*;
|
||||
};
|
@ -471,9 +471,15 @@ set_program_name__(const char *argv0, const char *version, const char *date,
|
||||
|
||||
assert_single_threaded();
|
||||
free(program_name);
|
||||
/* Remove libtool prefix, if it is there */
|
||||
if (strncmp(basename, "lt-", 3) == 0) {
|
||||
char *tmp_name = basename;
|
||||
basename = xstrdup(basename + 3);
|
||||
free(tmp_name);
|
||||
}
|
||||
program_name = basename;
|
||||
free(program_version);
|
||||
|
||||
free(program_version);
|
||||
if (!strcmp(version, VERSION)) {
|
||||
program_version = xasprintf("%s (Open vSwitch) "VERSION"\n"
|
||||
"Compiled %s %s\n",
|
||||
|
@ -6,7 +6,9 @@
|
||||
# without warranty of any kind.
|
||||
|
||||
lib_LTLIBRARIES += ofproto/libofproto.la
|
||||
ofproto_libofproto_la_LDFLAGS = -release $(VERSION)
|
||||
ofproto_libofproto_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||
-Wl,--version-script=$(top_builddir)/ofproto/libofproto.sym
|
||||
ofproto_libofproto_la_SOURCES = \
|
||||
ofproto/bond.c \
|
||||
ofproto/bond.h \
|
||||
|
4
ofproto/libofproto.sym.in
Normal file
4
ofproto/libofproto.sym.in
Normal file
@ -0,0 +1,4 @@
|
||||
libofproto_@LT_CURRENT@ {
|
||||
global:
|
||||
*;
|
||||
};
|
@ -1,6 +1,8 @@
|
||||
# libovsdb
|
||||
lib_LTLIBRARIES += ovsdb/libovsdb.la
|
||||
ovsdb_libovsdb_la_LDFLAGS = -release $(VERSION)
|
||||
ovsdb_libovsdb_la_LDFLAGS = \
|
||||
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
|
||||
-Wl,--version-script=$(top_builddir)/ovsdb/libovsdb.sym
|
||||
ovsdb_libovsdb_la_SOURCES = \
|
||||
ovsdb/column.c \
|
||||
ovsdb/column.h \
|
||||
|
4
ovsdb/libovsdb.sym.in
Normal file
4
ovsdb/libovsdb.sym.in
Normal file
@ -0,0 +1,4 @@
|
||||
libovsdb_@LT_CURRENT@ {
|
||||
global:
|
||||
*;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user