From 75625af541fd128f51079d0ffe5ef24645b8f421 Mon Sep 17 00:00:00 2001 From: Darik Horn Date: Sun, 13 Apr 2014 12:51:15 -0400 Subject: [PATCH] Create libsoftether.so and dynamically link the userland. Sharing object code between vpnbridge, vpnclient, vpnserver, and vpncmd reduces the binary size of SoftEther by 85% and its administrative memory footprint by 50%. --- configure.ac | 1 + src/Makefile.am | 7 +++++-- src/libsoftether/Makefile.am | 34 ++++++++++++++++++++++++++++++++++ src/vpnbridge/Makefile.am | 3 +-- src/vpnclient/Makefile.am | 3 +-- src/vpncmd/Makefile.am | 3 +-- src/vpnserver/Makefile.am | 3 +-- 7 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 src/libsoftether/Makefile.am diff --git a/configure.ac b/configure.ac index 4a3fc2ba..94639c44 100644 --- a/configure.ac +++ b/configure.ac @@ -30,6 +30,7 @@ AC_CONFIG_FILES([ src/Mayaqua/Makefile src/Cedar/Makefile src/hamcorebuilder/Makefile + src/libsoftether/Makefile src/bin/hamcore/Makefile src/vpnserver/Makefile src/vpnclient/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index dc745426..1d041d47 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,5 +22,8 @@ SUBDIRS = Mayaqua Cedar # This is a nodist helper. SUBDIRS += hamcorebuilder -# These are final build products. -SUBDIRS += bin/hamcore vpnserver vpnclient vpnbridge vpncmd +# These are shared components. +SUBDIRS += libsoftether bin/hamcore + +# These are the final build products. +SUBDIRS += vpnserver vpnclient vpnbridge vpncmd diff --git a/src/libsoftether/Makefile.am b/src/libsoftether/Makefile.am new file mode 100644 index 00000000..601920d9 --- /dev/null +++ b/src/libsoftether/Makefile.am @@ -0,0 +1,34 @@ +# Copyright 2014 Darik Horn +# +# This file is part of SoftEther. +# +# SoftEther is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 2 of the License, or (at your option) +# any later version. +# +# SoftEther is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# SoftEther. If not, see . + + +include $(top_srcdir)/autotools/softether.am + +lib_LTLIBRARIES = \ + libsoftether.la + +libsoftether_la_SOURCES = + +libsoftether_la_LDFLAGS = \ + -avoid-version + +libsoftether_la_LIBTOOLFLAGS = \ + --tag=disable-static + +libsoftether_la_LIBADD = \ + $(top_builddir)/src/Mayaqua/libmayaqua.la \ + $(top_builddir)/src/Cedar/libcedar.la diff --git a/src/vpnbridge/Makefile.am b/src/vpnbridge/Makefile.am index 35fe043d..fb91dd2d 100644 --- a/src/vpnbridge/Makefile.am +++ b/src/vpnbridge/Makefile.am @@ -25,5 +25,4 @@ vpnbridge_SOURCES = \ vpnbridge.c vpnbridge_LDADD = \ - $(top_builddir)/src/Mayaqua/libmayaqua.la \ - $(top_builddir)/src/Cedar/libcedar.la + $(top_builddir)/src/libsoftether/libsoftether.la diff --git a/src/vpnclient/Makefile.am b/src/vpnclient/Makefile.am index 1aa55330..c225c416 100644 --- a/src/vpnclient/Makefile.am +++ b/src/vpnclient/Makefile.am @@ -25,5 +25,4 @@ vpnclient_SOURCES = \ vpncsvc.c vpnclient_LDADD = \ - $(top_builddir)/src/Mayaqua/libmayaqua.la \ - $(top_builddir)/src/Cedar/libcedar.la + $(top_builddir)/src/libsoftether/libsoftether.la diff --git a/src/vpncmd/Makefile.am b/src/vpncmd/Makefile.am index d8042aa2..271affb0 100644 --- a/src/vpncmd/Makefile.am +++ b/src/vpncmd/Makefile.am @@ -25,5 +25,4 @@ vpncmd_SOURCES = \ vpncmd.c vpncmd_LDADD = \ - $(top_builddir)/src/Mayaqua/libmayaqua.la \ - $(top_builddir)/src/Cedar/libcedar.la + $(top_builddir)/src/libsoftether/libsoftether.la diff --git a/src/vpnserver/Makefile.am b/src/vpnserver/Makefile.am index c1c33570..1f7b7f98 100644 --- a/src/vpnserver/Makefile.am +++ b/src/vpnserver/Makefile.am @@ -25,5 +25,4 @@ vpnserver_SOURCES = \ vpnserver.c vpnserver_LDADD = \ - $(top_builddir)/src/Mayaqua/libmayaqua.la \ - $(top_builddir)/src/Cedar/libcedar.la + $(top_builddir)/src/libsoftether/libsoftether.la