[openwrt/openwrt] tools: add options to optimize host binaries

LEDE Commits lede-commits at lists.infradead.org
Sun May 4 09:25:07 PDT 2025


ansuel pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/e8b470139c78db269f0ac4908662d7aa9c4586ed

commit e8b470139c78db269f0ac4908662d7aa9c4586ed
Author: Konstantin Demin <rockdrilla at gmail.com>
AuthorDate: Fri May 2 23:47:01 2025 +0300

    tools: add options to optimize host binaries
    
    Mains goals are:
    - reduce binary size of host tools;
    - reduce i/o load on build host;
    - increase performance of host tools being built.
    
    Signed-off-by: Konstantin Demin <rockdrilla at gmail.com>
    Link: https://github.com/openwrt/openwrt/pull/18659
    Signed-off-by: Christian Marangi <ansuelsmth at gmail.com>
---
 config/Config-devel.in | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++
 rules.mk               | 15 ++++++++++----
 2 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/config/Config-devel.in b/config/Config-devel.in
index cbac91c09d..3fe78f325b 100644
--- a/config/Config-devel.in
+++ b/config/Config-devel.in
@@ -62,6 +62,60 @@ menuconfig DEVEL
 		  Compile all host host tools even if not needed. This is needed to prepare a
 		  universal precompiled host tools archive to use in another buildroot.
 
+	menuconfig OPTIMIZE_HOST_TOOLS
+		bool "Host Tools compile options" if DEVEL
+
+		if OPTIMIZE_HOST_TOOLS
+
+		config HOST_FLAGS_OPT
+			string "Host Tools optimization flags"
+			default "-O2"
+			help
+			  Compiler flags which are used to build host tools.
+
+			  E.g.: "-O2", "-O3 -fno-tree-vectorize".
+
+			  Default is "-O2".
+
+		config HOST_TOOLS_STRIP
+			bool "Strip Host Tools"
+			help
+			  Instructs compiler/linker to use flags from HOST_FLAGS_STRIP
+			  in order to reduce binary size of host tools.
+
+		config HOST_FLAGS_STRIP
+			string "Host Tools compiler/linker flags for stripping symbols"
+			depends on HOST_TOOLS_STRIP
+			default "-Wl,-s"
+			help
+			  Compiler flags which are used to strip symbols from host tools.
+
+			  Each flag should be prefixed with "-Wl," string
+			  because compiler (GCC) passes this value to linker.
+
+			  Default is "-Wl,-s" which means "strip all symbols" - specifically,
+			  debug symbols and other symbols not needed for relocation processing.
+
+		comment "Host Tools miscellaneous flags"
+
+		config HOST_EXTRA_CFLAGS
+			string "Host Tools extra CFLAGS"
+			default ""
+
+		config HOST_EXTRA_CXXFLAGS
+			string "Host Tools extra CXXFLAGS"
+			default ""
+
+		config HOST_EXTRA_CPPFLAGS
+			string "Host Tools extra CPPFLAGS"
+			default ""
+
+		config HOST_EXTRA_LDFLAGS
+			string "Host Tools extra LDFLAGS"
+			default ""
+
+		endif
+
 	config BUILD_SUFFIX
 		string "Build suffix to append to the target BUILD_DIR variable" if DEVEL
 		default ""
diff --git a/rules.mk b/rules.mk
index dbc448e1a4..ccf97fe7b7 100644
--- a/rules.mk
+++ b/rules.mk
@@ -278,12 +278,19 @@ PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config
 
 export PKG_CONFIG
 
+HOST_FLAGS_OPT:=$(call qstrip,$(CONFIG_HOST_FLAGS_OPT))
+HOST_FLAGS_STRIP:=$(call qstrip,$(CONFIG_HOST_FLAGS_STRIP))
+HOST_EXTRA_CFLAGS:=$(call qstrip,$(CONFIG_HOST_EXTRA_CFLAGS))
+HOST_EXTRA_CXXFLAGS:=$(call qstrip,$(CONFIG_HOST_EXTRA_CXXFLAGS))
+HOST_EXTRA_CPPFLAGS:=$(call qstrip,$(CONFIG_HOST_EXTRA_CPPFLAGS))
+HOST_EXTRA_LDFLAGS:=$(call qstrip,$(CONFIG_HOST_EXTRA_LDFLAGS))
+
 HOSTCC:=$(STAGING_DIR_HOST)/bin/gcc
 HOSTCXX:=$(STAGING_DIR_HOST)/bin/g++
-HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include)
-HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
-HOST_CXXFLAGS:=$(HOST_CFLAGS)
-HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib)
+HOST_CPPFLAGS:=$(strip -I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include) $(HOST_EXTRA_CPPFLAGS))
+HOST_CFLAGS:=$(strip $(HOST_FLAGS_OPT) $(HOST_EXTRA_CFLAGS) $(HOST_CPPFLAGS) $(HOST_FLAGS_STRIP))
+HOST_CXXFLAGS:=$(strip $(HOST_CFLAGS) $(HOST_EXTRA_CXXFLAGS))
+HOST_LDFLAGS:=$(strip -L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib) $(HOST_EXTRA_LDFLAGS) $(HOST_FLAGS_STRIP))
 
 BUILD_KEY=$(TOPDIR)/key-build
 BUILD_KEY_APK_SEC=$(TOPDIR)/private-key.pem




More information about the lede-commits mailing list