mirror of
https://github.com/apache/httpd.git
synced 2025-07-23 00:50:44 +00:00
Add an --enable-reduced-exports configure option to link libmain.a
using ld's --whole-archive mode and avoid building exports.c entirely. This reduces the size of a minimal httpd binary by 18% on Linux/x86_64 (687K to 560K) with no difference to the set of symbols available to modules. This option is only appropriate to use if using a shared libapr* build, hence is non-default. * configure.in: Add --enable-reduced-exports; disable httpdunit build if used. Define AP_FORCE_EXPORTS if not enabled (default) in place of AP_USING_AUTOCONF. * server/main.c (ap_suck_in_APR): Only build if AP_FORCE_EXPORTS is defined. * Makefile.in: Link libmain.la using LIBMAIN_LIB. * server/Makefile.in: Conditionally build exports.c into libmain. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1861685 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -4,8 +4,13 @@ CLEAN_SUBDIRS = test
|
||||
|
||||
PROGRAM_NAME = $(progname)
|
||||
PROGRAM_SOURCES = modules.c
|
||||
PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
|
||||
PROGRAM_LDADD = buildmark.o $(HTTPD_LDFLAGS) $(PROGRAM_LDDEPS) $(HTTPD_LIBS) $(EXTRA_LIBS) $(AP_LIBS) $(LIBS)
|
||||
PROGRAM_PRELINK = $(COMPILE) -c $(top_srcdir)/server/buildmark.c
|
||||
PROGRAM_LDDEPS = \
|
||||
$(BUILTIN_LIBS) \
|
||||
$(MPM_LIB) \
|
||||
$(LIBMAIN_LIB) \
|
||||
os/$(OS_DIR)/libos.la
|
||||
PROGRAM_DEPENDENCIES = \
|
||||
$(BUILTIN_LIBS) \
|
||||
$(MPM_LIB) \
|
||||
|
@ -84,4 +84,6 @@ exec sed "
|
||||
/^APR_INCLUDEDIR.*$/s,.*,APR_INCLUDEDIR = ${APR_INCLUDEDIR},
|
||||
/^APU_INCLUDEDIR.*$/s,.*,APU_INCLUDEDIR = ${APU_INCLUDEDIR},
|
||||
/^LIBTOOL.*$/s,/[^ ]*/libtool \(.*\),${APR_LIBTOOL} @LTFLAGS@,
|
||||
/^EXPORTS_DOT_C/d
|
||||
/^LIBMAIN_LIB/d
|
||||
"
|
||||
|
27
configure.in
27
configure.in
@ -703,6 +703,28 @@ fi
|
||||
APACHE_SUBST(PICFLAGS)
|
||||
APACHE_SUBST(PILDFLAGS)
|
||||
|
||||
ap_reduced_exports=no
|
||||
EXPORTS_DOT_C=exports.c
|
||||
LIBMAIN_LIB=server/libmain.la
|
||||
APACHE_SUBST(EXPORTS_DOT_C)
|
||||
APACHE_SUBST(LIBMAIN_LIB)
|
||||
|
||||
AC_ARG_ENABLE(reduced-exports,
|
||||
APACHE_HELP_STRING(--enable-reduced-exports,Reduce binary size if using shared APR libraries),
|
||||
[
|
||||
if test "$enableval" = "yes" -a "$GCC" = "yes"; then
|
||||
ap_reduced_exports=yes
|
||||
fi
|
||||
])
|
||||
|
||||
if test "$ap_reduced_exports" = "yes"; then
|
||||
EXPORTS_DOT_C=
|
||||
LIBMAIN_LIB="-Wl,--whole-archive,server/.libs/libmain.a,--no-whole-archive"
|
||||
AC_MSG_NOTICE([Using reduced symbol exports])
|
||||
else
|
||||
AC_DEFINE(AP_FORCE_EXPORTS, 1, [Force symbol exports for dependent libraries])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(valgrind,
|
||||
[ --with-valgrind[[=DIR]] Enable code to reduce valgrind false positives
|
||||
(optionally: set path to valgrind headers) ],
|
||||
@ -722,7 +744,7 @@ AC_ARG_WITH(valgrind,
|
||||
dnl Enable the unit test executable if Check is installed.
|
||||
dnl TODO: at the moment, only pkg-config discovery is supported.
|
||||
AC_MSG_CHECKING([for Check to enable unit tests])
|
||||
if test "x$PKGCONFIG" != "x" && `$PKGCONFIG --atleast-version='0.9.12' check`; then
|
||||
if test "x$PKGCONFIG" != "x" -a "$AP_FORCE_EXPORTS" = "yes" && `$PKGCONFIG --atleast-version='0.9.12' check`; then
|
||||
UNITTEST_CFLAGS=`$PKGCONFIG --cflags check`
|
||||
UNITTEST_LIBS=`$PKGCONFIG --libs check`
|
||||
other_targets="$other_targets test/httpdunit"
|
||||
@ -864,9 +886,6 @@ APACHE_SUBST(AP_LIBS)
|
||||
APACHE_SUBST(AP_BUILD_SRCLIB_DIRS)
|
||||
APACHE_SUBST(AP_CLEAN_SRCLIB_DIRS)
|
||||
|
||||
AC_DEFINE(AP_USING_AUTOCONF, 1,
|
||||
[Using autoconf to configure Apache])
|
||||
|
||||
if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
|
||||
AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1,
|
||||
[This platform doesn't suffer from the thundering herd problem])
|
||||
|
@ -12,7 +12,7 @@ LTLIBRARY_SOURCES = \
|
||||
connection.c listen.c util_mutex.c \
|
||||
mpm_common.c mpm_unix.c mpm_fdqueue.c \
|
||||
util_charset.c util_cookies.c util_debug.c util_xml.c \
|
||||
util_filter.c util_pcre.c util_regex.c exports.c \
|
||||
util_filter.c util_pcre.c util_regex.c $(EXPORTS_DOT_C) \
|
||||
scoreboard.c error_bucket.c protocol.c core.c request.c provider.c \
|
||||
eoc_bucket.c eor_bucket.c core_filters.c \
|
||||
util_expr_parse.c util_expr_scan.c util_expr_eval.c \
|
||||
|
@ -861,7 +861,7 @@ static void usage(process_rec *process)
|
||||
return !OK;
|
||||
}
|
||||
|
||||
#ifdef AP_USING_AUTOCONF
|
||||
#ifdef AP_FORCE_EXPORTS
|
||||
/* This ugly little hack pulls any function referenced in exports.c into
|
||||
* the web server. exports.c is generated during the build, and it
|
||||
* has all of the APR functions specified by the apr/apr.exports and
|
||||
|
Reference in New Issue
Block a user