Files
openwrt/tools/elfutils/Makefile
T
John Crispin cd322612cc tools: cache the configure results of ten autotools tools
These ten hold up the wall clock on their own. Their configure stages
run while nothing else does, because the tools build in dependency
order. Measured over a full build, cold cache against warm:

  sed        21.68 s -> 1.22 s
  m4         21.48 s -> 1.22 s
  findutils  19.47 s -> 1.56 s
  tar        17.75 s -> 1.47 s
  cpio       14.28 s -> 1.26 s
  bison      12.81 s -> 1.29 s
  patch      12.16 s -> 1.31 s
  elfutils   26.58 s -> 15.47 s

Each of the ten configures the same way with a warm cache as it does
without one. The check runs configure three times, without a cache, with
a cold cache and with a warm cache, and compares every file that
configure generates between the first and the last. ncurses fails that
check; these do not.

The only difference left is ac_ct_AR and ac_ct_RANLIB, which a cold run
fills through the fallback path of AC_CHECK_TOOL and a warm run leaves
empty. AR and RANLIB are correct in both, and no generated Makefile
reads the ac_ct_ form.

tools/cmake keeps its 33 s, the longest configure stage in the build. It
bootstraps with its own script rather than autoconf, so this does not
reach it.

Signed-off-by: John Crispin <john@phrozen.org>
2026-09-22 18:18:58 +02:00

137 lines
4.6 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-only
include $(TOPDIR)/rules.mk
PKG_NAME:=elfutils
PKG_VERSION:=0.192
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://sourceware.org/$(PKG_NAME)/ftp/$(PKG_VERSION)
PKG_HASH:=616099beae24aba11f9b63d86ca6cc8d566d968b802391334c91df54eab416b4
PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=COPYING COPYING-GPLV2 COPYING-LGPLV3
PKG_CPE_ID:=cpe:/a:elfutils_project:elfutils
PKG_FIXUP:=autoreconf
PKG_PROGRAMS:=elflint findtextrel elfcmp unstrip stack elfcompress elfclassify srcfiles
PKG_SUBDIRS := \
config \
lib \
libelf \
libcpu \
backends \
libebl \
libdwelf \
libdwfl \
libdw \
src
PKG_GNULIB_BASE:=libgnu
PKG_GNULIB_ARGS = \
--dir=$(HOST_BUILD_DIR) \
--libtool \
--avoid=reallocarray \
--import
PKG_GNULIB_MODS = \
argp \
fallocate-posix \
fnmatch-gnu \
fts \
obstack-printf-posix \
progname \
strchrnul \
tsearch
HOST_BUILD_PARALLEL:=1
HOST_CONFIGURE_CACHE:=1
include $(INCLUDE_DIR)/host-build.mk
export $(PKG_GNULIB_BASE)=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/.libs/$(PKG_GNULIB_BASE).a
export $(PKG_GNULIB_BASE)_exitfail=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-exitfail.o
export $(PKG_GNULIB_BASE)_fallocate-posix=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-posix_fallocate.o
export $(PKG_GNULIB_BASE)_mbszero=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-mbszero.o
export $(PKG_GNULIB_BASE)_obstack=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-obstack.o
export $(PKG_GNULIB_BASE)_obstack-printf=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-obstack_printf.o
export $(PKG_GNULIB_BASE)_printf-args=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-printf-args.o
export $(PKG_GNULIB_BASE)_printf-frexp=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-printf-frexp.o
export $(PKG_GNULIB_BASE)_printf-frexpl=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-printf-frexpl.o
export $(PKG_GNULIB_BASE)_printf-parse=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-printf-parse.o
export $(PKG_GNULIB_BASE)_tsearch=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-tsearch.o
export $(PKG_GNULIB_BASE)_vasnprintf=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-vasnprintf.o
export $(PKG_GNULIB_BASE)_xsize=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-xsize.o
HOST_MAKE_FLAGS += \
am__CONFIG_DISTCLEAN_FILES= \
DEFAULT_INCLUDES='-iquote . -I$$$$(top_builddir) -I$$$$(top_srcdir)/$(PKG_GNULIB_BASE)' \
AM_LDFLAGS='$$$$(STACK_USAGE_NO_ERROR)' \
LIBS+='$$$$(if $$$$(findstring $(lastword $(PKG_SUBDIRS)),$$$$(subdir)), $$$$($(PKG_GNULIB_BASE)))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_exitfail))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_fallocate-posix))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_mbszero))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_obstack))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_obstack-printf))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_printf-args))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_printf-frexp))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_printf-frexpl))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_printf-parse))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_tsearch))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_vasnprintf))' \
LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_xsize))' \
REPLACE_FCNTL=0 REPLACE_FREE=0 REPLACE_FSTAT=0 REPLACE_OPEN=0 \
REPLACE_OBSTACK=0 REPLACE_OBSTACK_PRINTF=0 \
bin_PROGRAMS='$(PKG_PROGRAMS)' EXEEXT=
HOST_CPPFLAGS += "'-I$$$$(top_srcdir)/lib'"
ifeq ($(HOST_OS),Darwin)
HOST_CFLAGS += -I/opt/homebrew/include
endif
HOST_CFLAGS += -Wno-error -fPIC -std=gnu17
HOST_CONFIGURE_ARGS += \
--enable-maintainer-mode \
--without-libintl-prefix \
--without-libiconv-prefix \
--disable-debuginfod \
--disable-libdebuginfod \
--disable-nls \
--disable-shared \
--enable-static \
--without-lzma \
--without-bzlib \
--without-zstd
ifeq ($(HOST_OS),Darwin)
HOST_CONFIGURE_ARGS += --disable-symbol-versioning
endif
HOST_CONFIGURE_VARS += \
ac_cv_search_argp_parse=yes \
ac_cv_search_fts_close=yes \
ac_cv_search__obstack_free=yes \
ac_cv_buildid=yes
Hooks/HostConfigure/Pre := Host/Gnulib/Prepare $(Hooks/HostConfigure/Pre)
Hooks/HostCompile/Pre := Host/Gnulib/Compile $(Hooks/HostCompile/Pre)
define Host/Configure
$(call Host/Configure/Default)
$(call Host/Uninstall)
endef
define Host/Uninstall
-$(call Host/Compile/Default,uninstall)
-$(call Host/Compile/Default,maintainer-clean) # Clean bootstrap files from the release
endef
$(eval $(call HostBuild))