hostapd: build with LTO enabled (using jobserver for parallel build)
authorFelix Fietkau <nbd@nbd.name>
Tue, 10 Jul 2018 11:48:17 +0000 (13:48 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 10 Jul 2018 12:26:35 +0000 (14:26 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/network/services/hostapd/Makefile
package/network/services/hostapd/patches/500-lto-jobserver-support.patch [new file with mode: 0644]

index 5edc513e0e45b62219f8c920d3a14e931629dd70..cf0b0052195510ffea818616e42d5e3b2c7ac310 100644 (file)
@@ -457,8 +457,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
-TARGET_LDFLAGS += -Wl,--gc-sections
+TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto
+TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver -fuse-linker-plugin
 ifeq ($(findstring supplicant,$(BUILD_VARIANT)),)
   TARGET_LDFLAGS += -lubox -lubus
 endif
@@ -474,6 +474,7 @@ define Build/RunMake
                $(DRIVER_MAKEOPTS) \
                LIBS="$(TARGET_LDFLAGS)" \
                LIBS_c="$(TARGET_LDFLAGS_C)" \
+               AR="$(TARGET_CROSS)gcc-ar" \
                BCHECK= \
                $(2)
 endef
@@ -495,7 +496,7 @@ define Build/Compile/wpad
                MULTICALL=1 \
                wpa_cli wpa_supplicant_multi.a \
        )
-       $(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \
+       +export MAKEFLAGS="$(MAKE_JOBSERVER)"; $(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \
                $(TARGET_CFLAGS) \
                ./files/multicall.c \
                $(PKG_BUILD_DIR)/hostapd/hostapd_multi.a \
diff --git a/package/network/services/hostapd/patches/500-lto-jobserver-support.patch b/package/network/services/hostapd/patches/500-lto-jobserver-support.patch
new file mode 100644 (file)
index 0000000..a65ad9c
--- /dev/null
@@ -0,0 +1,50 @@
+--- a/hostapd/Makefile
++++ b/hostapd/Makefile
+@@ -1290,14 +1290,14 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
+       @$(AR) cr $@ hostapd_multi.o $(OBJS)
+ hostapd: $(BCHECK) $(OBJS)
+-      $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
++      +$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
+       @$(E) "  LD " $@
+ ifdef CONFIG_WPA_TRACE
+ OBJS_c += ../src/utils/trace.o
+ endif
+ hostapd_cli: $(OBJS_c)
+-      $(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
++      +$(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
+       @$(E) "  LD " $@
+ NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
+--- a/wpa_supplicant/Makefile
++++ b/wpa_supplicant/Makefile
+@@ -1921,23 +1921,23 @@ wpa_supplicant_multi.a: .config $(BCHECK
+       @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
+ wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
+-      $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
++      +$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
+       @$(E) "  LD " $@
+ eapol_test: $(OBJS_t)
+-      $(Q)$(LDO) $(LDFLAGS) -o eapol_test $(OBJS_t) $(LIBS)
++      +$(Q)$(LDO) $(LDFLAGS) -o eapol_test $(OBJS_t) $(LIBS)
+       @$(E) "  LD " $@
+ preauth_test: $(OBJS_t2)
+-      $(Q)$(LDO) $(LDFLAGS) -o preauth_test $(OBJS_t2) $(LIBS)
++      +$(Q)$(LDO) $(LDFLAGS) -o preauth_test $(OBJS_t2) $(LIBS)
+       @$(E) "  LD " $@
+ wpa_passphrase: $(OBJS_p)
+-      $(Q)$(LDO) $(LDFLAGS) -o wpa_passphrase $(OBJS_p) $(LIBS_p) $(LIBS)
++      +$(Q)$(LDO) $(LDFLAGS) -o wpa_passphrase $(OBJS_p) $(LIBS_p) $(LIBS)
+       @$(E) "  LD " $@
+ wpa_cli: $(OBJS_c)
+-      $(Q)$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
++      +$(Q)$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
+       @$(E) "  LD " $@
+ LIBCTRL += ../src/common/wpa_ctrl.o