From da3700988d9e34e380bae21ee23d5458a7e972b4 Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Thu, 2 Feb 2023 21:16:21 +0100 Subject: [PATCH] treewide: add support for "gc-sections" in PKG_BUILD_FLAGS This reduces open coding and allows to easily add a knob to enable it treewide, where chosen packages can still opt-out via "no-gc-sections". Note: libnl, mbedtls and opkg only used the CFLAGS part without the LDFLAGS counterpart. That doesn't help at all if the goal is to produce smaller binaries. I consider that an accident, and this fixes it. Note: there are also packages using only the LDFLAGS part. I didn't touch those, as gc might have been disabled via CFLAGS intentionally. Signed-off-by: Andre Heider --- include/package.mk | 7 ++++++- package/boot/kexec-tools/Makefile | 5 ++--- package/libs/libevent2/Makefile | 6 ++++-- package/libs/libnl/Makefile | 4 +++- package/libs/mbedtls/Makefile | 3 +-- package/libs/openssl/Makefile | 5 ++--- package/network/config/firewall/Makefile | 6 ++++-- package/network/services/dropbear/Makefile | 6 +++--- package/network/services/hostapd/Makefile | 6 ++++-- package/network/services/ppp/Makefile | 5 +++-- package/network/utils/iproute2/Makefile | 6 ++++-- package/network/utils/iptables/Makefile | 5 +---- package/network/utils/iw/Makefile | 6 ++++-- package/network/utils/tcpdump/Makefile | 4 +--- package/network/utils/umbim/Makefile | 5 ++--- package/network/utils/uqmi/Makefile | 5 +---- package/system/opkg/Makefile | 3 ++- package/utils/e2fsprogs/Makefile | 4 ++-- package/utils/mdadm/Makefile | 4 +--- package/utils/mtd-utils/Makefile | 4 +--- 20 files changed, 51 insertions(+), 48 deletions(-) diff --git a/include/package.mk b/include/package.mk index a1717a603d..4d97cda00f 100644 --- a/include/package.mk +++ b/include/package.mk @@ -30,7 +30,7 @@ ifneq ($(strip $(PKG_USE_MIPS16)),1) PKG_BUILD_FLAGS+=no-mips16 endif -__unknown_flags=$(filter-out no-iremap no-mips16,$(PKG_BUILD_FLAGS)) +__unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections,$(PKG_BUILD_FLAGS)) ifneq ($(__unknown_flags),) $(error unknown PKG_BUILD_FLAGS: $(__unknown_flags)) endif @@ -51,6 +51,11 @@ ifdef CONFIG_USE_MIPS16 TARGET_CXXFLAGS += -mips16 -minterlink-mips16 endif endif +ifeq ($(call pkg_build_flag,gc-sections,0),1) + TARGET_CFLAGS+= -ffunction-sections -fdata-sections + TARGET_CXXFLAGS+= -ffunction-sections -fdata-sections + TARGET_LDFLAGS+= -Wl,--gc-sections +endif include $(INCLUDE_DIR)/hardening.mk include $(INCLUDE_DIR)/prereq.mk diff --git a/package/boot/kexec-tools/Makefile b/package/boot/kexec-tools/Makefile index 0cb7688a24..7f06ec7d64 100644 --- a/package/boot/kexec-tools/Makefile +++ b/package/boot/kexec-tools/Makefile @@ -17,6 +17,8 @@ PKG_HASH:=7fe36a064101cd5c515e41b2be393dce3ca88adce59d6ee668e0af7c0c4570cd PKG_CONFIG_DEPENDS := CONFIG_KEXEC_ZLIB CONFIG_KEXEC_LZMA +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk define Package/kexec-tools/Default @@ -82,9 +84,6 @@ CONFIGURE_ARGS = \ $(if $(CONFIG_KEXEC_LZMA),--with,--without)-lzma \ TARGET_LD="$(TARGET_CROSS)ld" -TARGET_CFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections - CONFIGURE_VARS += \ BUILD_CC="$(HOSTCC)" \ TARGET_CC="$(TARGET_CC)" diff --git a/package/libs/libevent2/Makefile b/package/libs/libevent2/Makefile index 85c159c2a6..50dd19bf00 100644 --- a/package/libs/libevent2/Makefile +++ b/package/libs/libevent2/Makefile @@ -26,6 +26,8 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_libevent2-pthreads \ CONFIG_PACKAGE_libevent2-mbedtls +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -112,8 +114,8 @@ define Package/libevent2-pthreads/description threading & locking. endef -TARGET_CFLAGS += $(FPIC) -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed -flto +TARGET_CFLAGS += $(FPIC) -flto +TARGET_LDFLAGS += -Wl,--as-needed -flto CMAKE_OPTIONS += \ -DEVENT__DISABLE_BENCHMARK:BOOL=ON \ diff --git a/package/libs/libnl/Makefile b/package/libs/libnl/Makefile index 71b043a9e5..56549dcc0a 100644 --- a/package/libs/libnl/Makefile +++ b/package/libs/libnl/Makefile @@ -20,6 +20,8 @@ PKG_CPE_ID:=cpe:/a:libnl_project:libnl PKG_INSTALL:=1 PKG_FIXUP:=autoreconf +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk define Package/libnl/default @@ -80,7 +82,7 @@ define Package/libnl/description message construction and parsing, object caching system, etc. endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections $(FPIC) +TARGET_CFLAGS += $(FPIC) CONFIGURE_ARGS += \ --disable-debug diff --git a/package/libs/mbedtls/Makefile b/package/libs/mbedtls/Makefile index 7c167e2296..f49bb24de6 100644 --- a/package/libs/mbedtls/Makefile +++ b/package/libs/mbedtls/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mbedtls PKG_VERSION:=2.28.2 PKG_RELEASE:=2 -PKG_BUILD_FLAGS:=no-mips16 +PKG_BUILD_FLAGS:=no-mips16 gc-sections PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)? @@ -121,7 +121,6 @@ This package contains mbedtls helper programs for private key and CSR generation (gen_key, cert_req) endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) CMAKE_OPTIONS += \ diff --git a/package/libs/openssl/Makefile b/package/libs/openssl/Makefile index 7918d40347..9fe5da9dd3 100644 --- a/package/libs/openssl/Makefile +++ b/package/libs/openssl/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openssl PKG_VERSION:=3.0.8 PKG_RELEASE:=4 -PKG_BUILD_FLAGS:=no-mips16 +PKG_BUILD_FLAGS:=no-mips16 gc-sections PKG_BUILD_PARALLEL:=1 @@ -339,8 +339,7 @@ define Build/Configure ) endef -TARGET_CFLAGS += $(FPIC) -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections +TARGET_CFLAGS += $(FPIC) define Build/Compile +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ diff --git a/package/network/config/firewall/Makefile b/package/network/config/firewall/Makefile index e4a3ad97f7..95e2ae4b67 100644 --- a/package/network/config/firewall/Makefile +++ b/package/network/config/firewall/Makefile @@ -21,6 +21,8 @@ PKG_LICENSE:=ISC PKG_CONFIG_DEPENDS := CONFIG_IPV6 +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -42,8 +44,8 @@ define Package/firewall/conffiles /etc/firewall.user endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -flto +TARGET_CFLAGS += -flto +TARGET_LDFLAGS += -flto CMAKE_OPTIONS += $(if $(CONFIG_IPV6),,-DDISABLE_IPV6=1) define Package/firewall/install diff --git a/package/network/services/dropbear/Makefile b/package/network/services/dropbear/Makefile index ddd19bfa55..1b3fdad067 100644 --- a/package/network/services/dropbear/Makefile +++ b/package/network/services/dropbear/Makefile @@ -23,7 +23,7 @@ PKG_CPE_ID:=cpe:/a:matt_johnston:dropbear_ssh_server PKG_BUILD_PARALLEL:=1 PKG_ASLR_PIE_REGULAR:=1 -PKG_BUILD_FLAGS:=no-mips16 +PKG_BUILD_FLAGS:=no-mips16 gc-sections PKG_FIXUP:=autoreconf PKG_FLAGS:=nonshared @@ -142,8 +142,8 @@ DB_OPT_CONFIG = \ DROPBEAR_SVR_AGENTFWD|CONFIG_DROPBEAR_AGENTFORWARD|1|0 \ -TARGET_CFLAGS += -DARGTYPE=3 -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver +TARGET_CFLAGS += -DARGTYPE=3 -flto +TARGET_LDFLAGS += -flto=jobserver db_opt_add =echo '\#define $(1) $(2)' >> $(PKG_BUILD_DIR)/localoptions.h db_opt_replace =$(ESED) 's,^(\#define $(1)) .*$$$$,\1 $(2),g' $(PKG_BUILD_DIR)/sysoptions.h diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 889f145504..1b077530e1 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -32,6 +32,8 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_DRIVER_11AX_SUPPORT \ CONFIG_WPA_ENABLE_WEP +PKG_BUILD_FLAGS:=gc-sections + EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl SUPPLICANT_PROVIDERS:= @@ -585,8 +587,8 @@ TARGET_CPPFLAGS := \ -D_GNU_SOURCE \ $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY)) -TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver -fuse-linker-plugin -lubox -lubus +TARGET_CFLAGS += -flto +TARGET_LDFLAGS += -flto=jobserver -fuse-linker-plugin -lubox -lubus ifdef CONFIG_PACKAGE_kmod-cfg80211 TARGET_LDFLAGS += -lm -lnl-tiny diff --git a/package/network/services/ppp/Makefile b/package/network/services/ppp/Makefile index 8476204e14..48f2091a1f 100644 --- a/package/network/services/ppp/Makefile +++ b/package/network/services/ppp/Makefile @@ -26,6 +26,7 @@ PKG_VERSION:=$(PKG_RELEASE_VERSION).git-$(PKG_SOURCE_DATE) PKG_BUILD_DEPENDS:=libpcap PKG_ASLR_PIE_REGULAR:=1 +PKG_BUILD_FLAGS:=gc-sections PKG_BUILD_PARALLEL:=1 PKG_INSTALL:=1 @@ -192,8 +193,8 @@ $(call Build/Configure/Default,, \ $(PKG_BUILD_DIR)/pppd/plugins/pppoatm/linux/ endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -flto -fuse-linker-plugin +TARGET_CFLAGS += -flto +TARGET_LDFLAGS += -flto -fuse-linker-plugin MAKE_FLAGS += COPTS="$(TARGET_CFLAGS)" \ PRECOMPILED_FILTER=1 \ diff --git a/package/network/utils/iproute2/Makefile b/package/network/utils/iproute2/Makefile index 302d57bf8b..b3a809e0b5 100644 --- a/package/network/utils/iproute2/Makefile +++ b/package/network/utils/iproute2/Makefile @@ -19,6 +19,8 @@ PKG_BUILD_DEPENDS:=iptables PKG_LICENSE:=GPL-2.0 PKG_CPE_ID:=cpe:/a:iproute2_project:iproute2 +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/nls.mk @@ -171,8 +173,8 @@ define Build/Configure > $(PKG_BUILD_DIR)/include/SNAPSHOT.h endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -Wl,--as-needed +TARGET_CFLAGS += -flto +TARGET_LDFLAGS += -Wl,--as-needed TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny MAKE_FLAGS += \ diff --git a/package/network/utils/iptables/Makefile b/package/network/utils/iptables/Makefile index e96cfa0b16..0d6d76fc08 100644 --- a/package/network/utils/iptables/Makefile +++ b/package/network/utils/iptables/Makefile @@ -20,6 +20,7 @@ PKG_FIXUP:=autoreconf PKG_FLAGS:=nonshared PKG_INSTALL:=1 +PKG_BUILD_FLAGS:=gc-sections PKG_BUILD_PARALLEL:=1 PKG_LICENSE:=GPL-2.0 PKG_CPE_ID:=cpe:/a:netfilter_core_team:iptables @@ -591,12 +592,8 @@ TARGET_CPPFLAGS := \ TARGET_CFLAGS += \ -I$(PKG_BUILD_DIR)/include \ -I$(LINUX_DIR)/user_headers/include \ - -ffunction-sections -fdata-sections \ -DNO_LEGACY -TARGET_LDFLAGS += \ - -Wl,--gc-sections - CONFIGURE_ARGS += \ --enable-shared \ --enable-static \ diff --git a/package/network/utils/iw/Makefile b/package/network/utils/iw/Makefile index eb3a9ba091..1eb3cd721a 100644 --- a/package/network/utils/iw/Makefile +++ b/package/network/utils/iw/Makefile @@ -18,6 +18,8 @@ PKG_HASH:=f167bbe947dd53bb9ebc0c1dcef5db6ad73ac1d6084f2c6f9376c5c360cc4d4e PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk define Package/iw @@ -55,8 +57,8 @@ ifeq ($(BUILD_VARIANT),full) endif MAKE_FLAGS += \ - CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -ffunction-sections -fdata-sections" \ - LDFLAGS="$(TARGET_LDFLAGS) -Wl,--gc-sections -flto" \ + CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS) -flto" \ NL1FOUND="" NL2FOUND=Y \ NLLIBNAME="libnl-tiny" \ LIBS="-lm -lnl-tiny" \ diff --git a/package/network/utils/tcpdump/Makefile b/package/network/utils/tcpdump/Makefile index 827a66e860..e07e9feb6d 100644 --- a/package/network/utils/tcpdump/Makefile +++ b/package/network/utils/tcpdump/Makefile @@ -20,6 +20,7 @@ PKG_LICENSE:=BSD-3-Clause PKG_CPE_ID:=cpe:/a:tcpdump:tcpdump PKG_INSTALL:=1 +PKG_BUILD_FLAGS:=gc-sections PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk @@ -48,9 +49,6 @@ CONFIGURE_ARGS += \ --without-crypto \ $(call autoconf_bool,CONFIG_IPV6,ipv6) -TARGET_CFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections - ifeq ($(BUILD_VARIANT),mini) TARGET_CFLAGS += -DTCPDUMP_MINI CONFIGURE_ARGS += --disable-smb diff --git a/package/network/utils/umbim/Makefile b/package/network/utils/umbim/Makefile index 3563949c67..1a09984a43 100644 --- a/package/network/utils/umbim/Makefile +++ b/package/network/utils/umbim/Makefile @@ -14,6 +14,7 @@ PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= PKG_FLAGS:=nonshared +PKG_BUILD_FLAGS:=gc-sections include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -32,9 +33,7 @@ define Package/umbim/description endef TARGET_CFLAGS += \ - -I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections - -TARGET_LDFLAGS += -Wl,--gc-sections + -I$(STAGING_DIR)/usr/include define Package/umbim/install $(INSTALL_DIR) $(1)/sbin diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile index 02265d400c..989e7c11b6 100644 --- a/package/network/utils/uqmi/Makefile +++ b/package/network/utils/uqmi/Makefile @@ -14,6 +14,7 @@ PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:= PKG_FLAGS:=nonshared +PKG_BUILD_FLAGS:=gc-sections include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -33,13 +34,9 @@ endef TARGET_CFLAGS += \ -I$(STAGING_DIR)/usr/include \ - -ffunction-sections \ - -fdata-sections \ -Wno-error=dangling-pointer \ -Wno-error=maybe-uninitialized -TARGET_LDFLAGS += -Wl,--gc-sections - CMAKE_OPTIONS += \ -DDEBUG=1 diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile index 83c9dab1b0..1841e190e6 100644 --- a/package/system/opkg/Makefile +++ b/package/system/opkg/Makefile @@ -28,6 +28,8 @@ PKG_CONFIG_DEPENDS += \ HOST_BUILD_DEPENDS:=libubox/host +PKG_BUILD_FLAGS:=gc-sections + include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk @@ -57,7 +59,6 @@ define Package/opkg/conffiles /etc/opkg/customfeeds.conf endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections EXTRA_CFLAGS += $(TARGET_CPPFLAGS) CMAKE_OPTIONS += \ diff --git a/package/utils/e2fsprogs/Makefile b/package/utils/e2fsprogs/Makefile index e6c5cfe75c..cd9b10e175 100644 --- a/package/utils/e2fsprogs/Makefile +++ b/package/utils/e2fsprogs/Makefile @@ -23,6 +23,7 @@ PKG_BUILD_DEPENDS:=util-linux e2fsprogs/host PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 +PKG_BUILD_FLAGS:=gc-sections include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk @@ -142,7 +143,7 @@ $(call Package/e2fsprogs) DEPENDS:= +e2fsprogs endef -TARGET_CFLAGS += $(FPIC) -ffunction-sections -fdata-sections -flto +TARGET_CFLAGS += $(FPIC) -flto TARGET_LDFLAGS += -flto @@ -171,7 +172,6 @@ define Build/Compile V=$(if $(findstring c,$(OPENWRT_VERBOSE)),1,) \ subst +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ - LDFLAGS=-Wl,--gc-sections \ BUILDCC="$(HOSTCC)" \ DESTDIR="$(PKG_INSTALL_DIR)" \ ELF_OTHER_LIBS="$(TARGET_LDFLAGS) -luuid" \ diff --git a/package/utils/mdadm/Makefile b/package/utils/mdadm/Makefile index 553728194e..1828a88972 100644 --- a/package/utils/mdadm/Makefile +++ b/package/utils/mdadm/Makefile @@ -19,6 +19,7 @@ PKG_MAINTAINER:=Felix Fietkau PKG_CPE_ID:=cpe:/a:mdadm_project:mdadm PKG_BUILD_PARALLEL:=1 +PKG_BUILD_FLAGS:=gc-sections include $(INCLUDE_DIR)/package.mk @@ -43,7 +44,6 @@ define Package/mdadm/conffiles endef TARGET_CFLAGS += \ - -ffunction-sections -fdata-sections \ -DHAVE_STDINT_H -DNO_COROSYNC -DNO_DLM -DUSE_PTHREADS \ -DCONFFILE='\"/var/etc/mdadm.conf\"' \ -DMAP_DIR='\"/var/run/mdadm\"' \ @@ -53,8 +53,6 @@ TARGET_CFLAGS += \ TARGET_CXFLAGS = -DNO_LIBUDEV -TARGET_LDFLAGS += -Wl,--gc-sections - MAKE_FLAGS += \ CHECK_RUN_DIR=0 \ CXFLAGS="$(TARGET_CXFLAGS)" diff --git a/package/utils/mtd-utils/Makefile b/package/utils/mtd-utils/Makefile index afbfbceff5..bd53e071d5 100644 --- a/package/utils/mtd-utils/Makefile +++ b/package/utils/mtd-utils/Makefile @@ -19,6 +19,7 @@ PKG_INSTALL:=1 PKG_FIXUP:=autoreconf PKG_FLAGS:=nonshared +PKG_BUILD_FLAGS:=gc-sections PKG_BUILD_DEPENDS:=util-linux @@ -64,9 +65,6 @@ CONFIGURE_ARGS += \ --without-zstd \ --without-lzo -TARGET_CFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections - define Package/ubi-utils/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) \