Sfoglia il codice sorgente

config: add a knob to use the mold linker for packages

Building it requires gcc >= 10.2 or clang >= 12.

Using sstrip with its -z argument can produce non-working binaries, like
a segfaulting `getrandom`, so don't allow that combination.

Signed-off-by: Andre Heider <[email protected]>
Andre Heider 2 anni fa
parent
commit
65a716bb95
2 ha cambiato i file con 26 aggiunte e 1 eliminazioni
  1. 14 1
      config/Config-build.in
  2. 12 0
      config/check-hostcxx.sh

+ 14 - 1
config/Config-build.in

@@ -159,6 +159,19 @@ menu "Global build settings"
 		  Adds LTO flags to the CFLAGS and LDFLAGS.
 		  Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-lto
 
+	config MOLD
+		depends on (aarch64 || arm || i386 || i686 || m68k || powerpc || powerpc64 || sh4 || x86_64)
+		depends on !GCC_USE_VERSION_11
+		def_bool $(shell, ./config/check-hostcxx.sh 10 2 12)
+
+	config USE_MOLD
+		bool
+		prompt "Use the mold linker for all packages"
+		depends on MOLD
+		help
+		  Link packages with mold, a modern linker
+		  Packages can opt-out via setting PKG_BUILD_FLAGS:=no-mold
+
 	config IPV6
 		def_bool y
 
@@ -200,7 +213,7 @@ menu "Global build settings"
 
 	config SSTRIP_DISCARD_TRAILING_ZEROES
 		bool "Strip trailing zero bytes"
-		depends on USE_SSTRIP
+		depends on USE_SSTRIP && !USE_MOLD
 		default y
 		help
 		  Use sstrip's -z option to discard trailing zero bytes

+ 12 - 0
config/check-hostcxx.sh

@@ -0,0 +1,12 @@
+cat << EOF | "$STAGING_DIR_HOST/bin/g++" -c -x c++ -o /dev/null - >/dev/null 2>&1
+#if __clang__
+  #if __clang_major__ < $3
+    #error "clang too old"
+  #endif
+#else
+  #if __GNUC__ < $1 || (__GNUC__ == $1 && (__GNUC_MINOR__ < $2))
+    #error "gcc too old"
+  #endif
+#endif
+EOF
+[ $? -eq 0 ] && echo y || echo n