From efad24f5a07241a24f91dc304df0fd43527fd666 Mon Sep 17 00:00:00 2001 From: Thierry Laurion Date: Tue, 30 Aug 2022 22:40:52 -0400 Subject: [PATCH] WiP: have modules built to be optimized for space (-Os) Adresses @easrentai suggestion to pass modules build optimization for space here: https://github.com/osresearch/heads/issues/590#issuecomment-821788703 Uniformized module's $(CROSS_TOOLS) being passed as environment variable, prior of ./configure call Limitations: - busybox don't seem to take Os into consideration when applied, no change to module yet. - kexec applies both O2 and Os, no change to module yet. - Kernel is already optimized for size (CONFIG_CC_OPTIMIZE_FOR_SIZE as Kconfig option), and kernel modules stripped prior of inserted in initrd, compressed with xz. Nothing else can be done here unless lto Next steps: - Go LTO for kernel and modules? But, I was not successful going that way in the past, maybe musl-cross-make has changed. - Not sure if I read correctly, but -Oz may have happened under GCC 12.1, but not sure if apple relative or FSS GCC. Opened an issue over musl-cross-make, but the project is conservative on used GCC version. Attempt to contribute to #590 by reducing payload's footprint --- modules/cairo | 2 +- modules/cryptsetup | 4 +++- modules/cryptsetup2 | 4 +++- modules/gpg | 4 +++- modules/gpg2 | 4 +++- modules/libassuan | 4 +++- modules/libgcrypt | 4 +++- modules/libgpg-error | 4 +++- modules/libksba | 4 +++- modules/libpng | 1 + modules/lvm2 | 1 + modules/mbedtls | 1 + modules/pinentry | 4 +++- modules/pixman | 1 + modules/tpmtotp | 2 +- modules/util-linux | 4 +++- modules/zlib | 1 + 17 files changed, 37 insertions(+), 12 deletions(-) diff --git a/modules/cairo b/modules/cairo index f281166dc..b4970652a 100644 --- a/modules/cairo +++ b/modules/cairo @@ -7,8 +7,8 @@ cairo_url := https://www.cairographics.org/releases/$(cairo_tar) cairo_hash := 8c90f00c500b2299c0a323dd9beead2a00353752b2092ead558139bd67f7bf16 cairo_configure := \ + CFLAGS="-DCAIRO_NO_MUTEX=1 -Os" \ $(CROSS_TOOLS) \ - CFLAGS="-DCAIRO_NO_MUTEX=1 -O3" \ ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix="/" \ diff --git a/modules/cryptsetup b/modules/cryptsetup index 0f89ee804..f4f534556 100644 --- a/modules/cryptsetup +++ b/modules/cryptsetup @@ -10,8 +10,10 @@ cryptsetup_hash := af2b04e8475cf40b8d9ffd97a1acfa73aa787c890430afd89804fb544d6ad # Use an empty prefix so that the executables will not include the # build path. -cryptsetup_configure := ./configure \ +cryptsetup_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix "/" \ --disable-gcrypt-pbkdf2 \ diff --git a/modules/cryptsetup2 b/modules/cryptsetup2 index bfb1446b6..b7ffd8d43 100644 --- a/modules/cryptsetup2 +++ b/modules/cryptsetup2 @@ -10,8 +10,10 @@ cryptsetup2_hash := 3bca4ffe39e2f94cef50f6ea65acb873a6dbce5db34fc6bcefe38b6d095e # Use an empty prefix so that the executables will not include the # build path. -cryptsetup2_configure := ./configure \ +cryptsetup2_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix "/" \ --disable-rpath \ diff --git a/modules/gpg b/modules/gpg index 4d4df3dea..e6b8f2c52 100644 --- a/modules/gpg +++ b/modules/gpg @@ -17,8 +17,10 @@ gpg_hash := 6b47a3100c857dcab3c60e6152e56a997f2c7862c1b8b2b25adf3884a1ae2276 # Force a different host/build setting so that it detects a cross compile. # Otherwise it wil try to run tests. # -gpg_configure := ./configure \ +gpg_configure := \ + CFLAGS="-Os" \ $(CROSS_TOOLS) \ + ./configure \ --build $(MUSL_ARCH)-elf-linux \ --host $(MUSL_ARCH)-linux-musl \ --with-libusb="$(INSTALL)" \ diff --git a/modules/gpg2 b/modules/gpg2 index aaeb6fade..e2f6175c7 100644 --- a/modules/gpg2 +++ b/modules/gpg2 @@ -11,8 +11,10 @@ gpg2_hash := 61e83278fb5fa7336658a8b73ab26f379d41275bb1c7c6e694dd9f9a6e8e76ec # be generated with the correct paths, but then re-write them when # we use the install target so that they will be copied to the correct # location. -gpg2_configure := ./configure \ +gpg2_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ CPPFLAGS="-I$(INSTALL)/include/libusb-1.0" \ --host $(MUSL_ARCH)-linux-musl \ --with-libusb="$(INSTALL)" \ diff --git a/modules/libassuan b/modules/libassuan index 4d8dd5547..816f11364 100644 --- a/modules/libassuan +++ b/modules/libassuan @@ -6,8 +6,10 @@ libassuan_tar := libassuan-$(libassuan_version).tar.bz2 libassuan_url := https://gnupg.org/ftp/gcrypt/libassuan/$(libassuan_tar) libassuan_hash := 91bcb0403866b4e7c4bc1cc52ed4c364a9b5414b3994f718c70303f7f765e702 -libassuan_configure := ./configure \ +libassuan_configure := \ + CFLAGS="-Os" \ $(CROSS_TOOLS) \ + ./configure \ --host $(MUSL_ARCH)-linux-musl \ --prefix "/" \ --disable-static \ diff --git a/modules/libgcrypt b/modules/libgcrypt index e64307e2c..13eb671b1 100644 --- a/modules/libgcrypt +++ b/modules/libgcrypt @@ -6,8 +6,10 @@ libgcrypt_tar := libgcrypt-$(libgcrypt_version).tar.bz2 libgcrypt_url := https://gnupg.org/ftp/gcrypt/libgcrypt/$(libgcrypt_tar) libgcrypt_hash := 0cba2700617b99fc33864a0c16b1fa7fdf9781d9ed3509f5d767178e5fd7b975 -libgcrypt_configure := ./configure \ +libgcrypt_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host=$(MUSL_ARCH)-linux-musl \ --prefix "/" \ --disable-static \ diff --git a/modules/libgpg-error b/modules/libgpg-error index 9919eee2f..4d978d744 100644 --- a/modules/libgpg-error +++ b/modules/libgpg-error @@ -6,8 +6,10 @@ libgpg-error_tar := libgpg-error-$(libgpg-error_version).tar.bz2 libgpg-error_url := https://gnupg.org/ftp/gcrypt/libgpg-error/$(libgpg-error_tar) libgpg-error_hash := b32d6ff72a73cf79797f7f2d039e95e9c6f92f0c1450215410840ab62aea9763 -libgpg-error_configure := ./configure \ +libgpg-error_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --prefix "/" \ --host=$(MUSL_ARCH)-linux-musl \ --disable-static \ diff --git a/modules/libksba b/modules/libksba index 6961f68d7..1cf0ae3ca 100644 --- a/modules/libksba +++ b/modules/libksba @@ -6,8 +6,10 @@ libksba_tar := libksba-$(libksba_version).tar.bz2 libksba_url := https://gnupg.org/ftp/gcrypt/libksba/$(libksba_tar) libksba_hash := bfe6a8e91ff0f54d8a329514db406667000cb207238eded49b599761bfca41b6 -libksba_configure := ./configure \ +libksba_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host $(MUSL_ARCH)-linux-musl \ --prefix "/" \ --disable-static \ diff --git a/modules/libpng b/modules/libpng index 6fd23dc9f..dd2f4edcc 100644 --- a/modules/libpng +++ b/modules/libpng @@ -8,6 +8,7 @@ libpng_hash := 574623a4901a9969080ab4a2df9437026c8a87150dfd5c235e28c94b212964a7 libpng_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix="/" \ diff --git a/modules/lvm2 b/modules/lvm2 index 74f3e3be3..4bf9f172b 100644 --- a/modules/lvm2 +++ b/modules/lvm2 @@ -10,6 +10,7 @@ lvm2_hash := 23a3d1cddd41b3ef51812ebf83e9fa491f502fe74130d4263be327a91914660d # so we force it via the configure cache. lvm2_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ PKG_CONFIG=/bin/false \ MODPROBE_CMD=/bin/false \ ac_cv_func_malloc_0_nonnull=yes \ diff --git a/modules/mbedtls b/modules/mbedtls index 6bcc0fa36..200b75f6b 100644 --- a/modules/mbedtls +++ b/modules/mbedtls @@ -12,6 +12,7 @@ mbedtls_configure := mbedtls_target := \ SHARED=1 \ + CFLAGS="-Os" \ DESTDIR=$(INSTALL) \ $(CROSS_TOOLS) \ $(MAKE_JOBS) \ diff --git a/modules/pinentry b/modules/pinentry index 6f6ef91ee..7fa92cdfe 100644 --- a/modules/pinentry +++ b/modules/pinentry @@ -13,8 +13,10 @@ pinentry_hash := 68076686fa724a290ea49cdf0d1c0c1500907d1b759a3bcbfbec0293e8f5657 # be generated with the correct paths, but then re-write them when # we use the install target so that they will be copied to the correct # location. -pinentry_configure := ./configure \ +pinentry_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host $(MUSL_ARCH)-linux-musl \ --prefix "/" \ --enable-pinentry-tty \ diff --git a/modules/pixman b/modules/pixman index cbacd73fa..828696f93 100644 --- a/modules/pixman +++ b/modules/pixman @@ -8,6 +8,7 @@ pixman_hash := 21b6b249b51c6800dc9553b65106e1e37d0e25df942c90531d4c3997aa20a88e pixman_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix="/" \ diff --git a/modules/tpmtotp b/modules/tpmtotp index 433df8ceb..1ce561d05 100644 --- a/modules/tpmtotp +++ b/modules/tpmtotp @@ -13,7 +13,7 @@ tpmtotp_hash := 1082f2b0e4af833e04220dddedcc21a39eb39ee4dc5668bb010e7bcc795c606c tpmtotp_target := \ $(CROSS_TOOLS) \ - CFLAGS="-I$(INSTALL)/include" \ + CFLAGS="-I$(INSTALL)/include -Os" \ LDFLAGS="-L$(INSTALL)/lib" \ tpmtotp_output := \ diff --git a/modules/util-linux b/modules/util-linux index 0a0442f94..804ae56ea 100644 --- a/modules/util-linux +++ b/modules/util-linux @@ -6,8 +6,10 @@ util-linux_tar := util-linux-$(util-linux_version).tar.xz util-linux_url := https://www.kernel.org/pub/linux/utils/util-linux/v2.29/$(util-linux_tar) util-linux_hash := accea4d678209f97f634f40a93b7e9fcad5915d1f4749f6c47bee6bf110fe8e3 -util-linux_configure := ./configure \ +util-linux_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ + ./configure \ --host $(MUSL_ARCH)-elf-linux \ --prefix "/" \ --oldincludedir "$(INSTALL)/include" \ diff --git a/modules/zlib b/modules/zlib index 89602a0b4..09025cefa 100644 --- a/modules/zlib +++ b/modules/zlib @@ -9,6 +9,7 @@ zlib_hash := c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 zlib_configure := \ $(CROSS_TOOLS) \ + CFLAGS="-Os" \ ./configure \ --prefix="/" \