From 2a24fbc1bb28764c3577f3a9e108614cd2e108b2 Mon Sep 17 00:00:00 2001 From: wangchunyang Date: Fri, 26 Jul 2024 12:54:56 +0800 Subject: [PATCH] Enable LTO By Default --- brp-strip-lto | 17 ++ lto_flag | 5 + lto_white_list | 536 +++++++++++++++++++++++++++++++++++++++++++++++++ macros | 6 +- 4 files changed, 563 insertions(+), 1 deletion(-) create mode 100644 brp-strip-lto create mode 100755 lto_flag create mode 100644 lto_white_list diff --git a/brp-strip-lto b/brp-strip-lto new file mode 100644 index 0000000..3df672a --- /dev/null +++ b/brp-strip-lto @@ -0,0 +1,17 @@ +#!/usr/bin/sh +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +STRIP=${1:-strip} +NCPUS=${RPM_BUILD_NCPUS:-1} + +case `uname -a` in +Darwin*) exit 0 ;; +*) ;; +esac + +# Strip ELF binaries +find "$RPM_BUILD_ROOT" -type f -name '*.[ao]' \! -regex "$RPM_BUILD_ROOT/*usr/lib/debug.*" -print0 | \ + eu-elfclassify --not-program --not-library --not-linux-kernel-module --stdin0 --print0 | xargs -0 -r -P$NCPUS -n32 sh -c "$STRIP -p -R .gnu.lto_* -R .gnu.debuglto_* -N __gnu_lto_v1 \"\$@\"" ARG0 diff --git a/lto_flag b/lto_flag new file mode 100755 index 0000000..53e3adb --- /dev/null +++ b/lto_flag @@ -0,0 +1,5 @@ +#!/bin/sh +current_spec=`cat /.build.command` +if grep -Fxq "$current_spec" "/lib/rpm/openEuler/lto_white_list"; then + echo "-flto -ffat-lto-objects" +fi diff --git a/lto_white_list b/lto_white_list new file mode 100644 index 0000000..780be19 --- /dev/null +++ b/lto_white_list @@ -0,0 +1,536 @@ +adcli.spec +aide.spec +amanda.spec +annobin.spec +apr.spec +argon2.spec +at.spec +atf.spec +attr.spec +audit.spec +augeas.spec +authselect.spec +autogen.spec +avahi.spec +babeltrace.spec +bind.spec +bison.spec +bolt.spec +booth.spec +brotli.spec +byacc.spec +bzip2.spec +cairomm.spec +certmonger.spec +cfitsio.spec +CharLS.spec +check.spec +chkconfig.spec +chrony.spec +chrpath.spec +ck.spec +clamav.spec +clevis.spec +clucene.spec +cmake.spec +cockpit.spec +courier-unicode.spec +cppcheck.spec +cpp-httplib.spec +cracklib.spec +createrepo_c.spec +cronie.spec +cryptsetup.spec +cups.spec +cups-filters.spec +curl.spec +dav1d.spec +dbus-broker.spec +dbus-glib.spec +dbxtool.spec +dhcp.spec +dialog.spec +ding-libs.spec +discount.spec +dos2unix.spec +dosfstools.spec +double-conversion.spec +dovecot.spec +doxygen.spec +dropwatch.spec +drpm.spec +d-spy.spec +dwz.spec +e2fsprogs.spec +enca.spec +entr.spec +environment-modules.spec +erlang-sd_notify.spec +espeak-ng.spec +ethtool.spec +exempi.spec +exiv2.spec +expat.spec +findutils.spec +flac.spec +flatbuffers.spec +flex.spec +fmt.spec +fping.spec +freetype.spec +freexl.spec +fribidi.spec +gawk.spec +gc.spec +gdb.spec +gdbm.spec +gdisk.spec +GeoIP.spec +geos.spec +gettext.spec +ghostscript.spec +git.spec +gjs.spec +glade.spec +glib-networking.spec +glm.spec +glslang.spec +glusterfs.spec +gmp.spec +gnome-autoar.spec +gnupg2.spec +gobject-introspection.spec +gperftools.spec +GraphicsMagick.spec +graphite2.spec +graphviz.spec +greatsql.spec +grep.spec +groff.spec +grubby.spec +gsl.spec +gsm.spec +gtest.spec +gzip.spec +harfbuzz.spec +hdf.spec +hdf5.spec +httpd.spec +http-parser.spec +hwloc.spec +ibus-libpinyin.spec +icu.spec +ilmbase.spec +Imath.spec +iniparser.spec +ipcalc.spec +iproute.spec +iptables.spec +isomd5sum.spec +jansson.spec +jbig2dec.spec +jbigkit.spec +jemalloc.spec +jimtcl.spec +jose.spec +jq.spec +json-c.spec +jsoncpp.spec +Judy.spec +kbd.spec +krb5.spec +kyua.spec +lame.spec +lcms2.spec +libabigail.spec +libadwaita.spec +libaec.spec +libarchive.spec +libart_lgpl.spec +libass.spec +libatomic_ops.spec +libb2.spec +libbsd.spec +libcap.spec +libcap-ng.spec +libcdio.spec +libcdio-paranoia.spec +libcomps.spec +libconfuse.spec +libcue.spec +libdatrie.spec +libdbi.spec +libdnf.spec +libdrm.spec +libdwarf.spec +libEMF.spec +libev.spec +libevent.spec +libffado.spec +libfprint.spec +libgexiv2.spec +libgit2.spec +libglvnd.spec +libgta.spec +libhandy.spec +libidn.spec +libidn2.spec +libiscsi.spec +libisoburn.spec +libjpeg-turbo.spec +libkcapi.spec +libkeepalive.spec +libldb.spec +liblouis.spec +libmaxminddb.spec +libmbim.spec +libmd.spec +libmemcached.spec +libmetalink.spec +libmodplug.spec +libmodulemd.spec +libnftnl.spec +libnma.spec +libnvme.spec +libogg.spec +libopenraw.spec +libpinyin.spec +libpipeline.spec +libplist.spec +libpwquality.spec +libqb.spec +libquvi.spec +librabbitmq.spec +libraqm.spec +librdkafka.spec +librepo.spec +libreswan.spec +librevenge.spec +libsamplerate.spec +libseccomp.spec +libsemanage.spec +libserf.spec +libsexy.spec +libshumate.spec +libsndfile.spec +libsodium.spec +libsolv.spec +libspectre.spec +libspiro.spec +libssh.spec +libssh2.spec +libtalloc.spec +libtasn1.spec +libtdb.spec +libtevent.spec +libtiff.spec +libunwind.spec +libusb.spec +libusbmuxd.spec +libuser.spec +libutempter.spec +libuv.spec +libvirt.spec +libvirt-python.spec +libvorbis.spec +libwacom.spec +libwbxml.spec +libx86emu.spec +libyaml.spec +libyubikey.spec +libzip.spec +lilv.spec +lldb.spec +lmdb.spec +logrotate.spec +lshw.spec +lsof.spec +lua-expat.spec +lua-filesystem.spec +lua-lpeg.spec +luksmeta.spec +lzip.spec +lzo.spec +m2crypto.spec +m4.spec +malcontent.spec +man-db.spec +mcpp.spec +mdadm.spec +mecab.spec +metis.spec +mksh.spec +mod_auth_openidc.spec +mod_http2.spec +mokutil.spec +mongo-c-driver.spec +mozjs102.spec +mpfr.spec +mpich.spec +mysql.spec +nasm.spec +netcf.spec +nethogs.spec +netpbm.spec +net-snmp.spec +newt.spec +nfs-utils.spec +nftables.spec +nghttp2.spec +ninja-build.spec +nodejs.spec +npth.spec +nspr.spec +nss_wrapper.spec +nss-mdns.spec +nss-pam-ldapd.spec +nss-pem.spec +ntp.spec +numpy.spec +ocl-icd.spec +oddjob.spec +oniguruma.spec +opencc.spec +OpenEXR.spec +openhpi.spec +open-isns.spec +openmpi.spec +openscap.spec +opensp.spec +openssh.spec +openvpn.spec +openvswitch.spec +p11-kit.spec +pacemaker.spec +pam_krb5.spec +pam_wrapper.spec +pango.spec +passwd.spec +patchelf.spec +patchutils.spec +pavucontrol.spec +pcre2.spec +perl-autovivification.spec +perl-B-COW.spec +perl-BSD-Resource.spec +perl-Class-XSAccessor.spec +perl-Clone.spec +perl-Compress-Bzip2.spec +perl-Compress-Raw-Bzip2.spec +perl-Compress-Raw-Zlib.spec +perl-Crypt-DES.spec +perl-Crypt-IDEA.spec +perl-Curses.spec +perl-Data-Dumper.spec +perl-Data-UUID.spec +perl-DateTime.spec +perl-DB_File.spec +perl-DBD-MariaDB.spec +perl-DBD-MySQL.spec +perl-DBD-Pg.spec +perl-DBD-SQLite.spec +perl-Devel-CallChecker.spec +perl-Devel-Caller.spec +perl-Devel-LexAlias.spec +perl-Digest-MD5.spec +perl-Digest-SHA.spec +perl-Digest-SHA1.spec +perl-Digest-SHA3.spec +perl-Encode-EUCJPASCII.spec +perl-Encode-JIS2K.spec +perl-FCGI.spec +perl-Filter.spec +perl-GD.spec +perl-Glib.spec +perl-GSSAPI.spec +perl-HTML-Parser.spec +perl-IO-Tty.spec +perl-IPC-SysV.spec +perl-libintl-perl.spec +perl-List-MoreUtils-XS.spec +perl-Math-BigInt-FastCalc.spec +perl-MIME-Base64.spec +perl-NetAddr-IP.spec +perl-Package-Stash-XS.spec +perl-PerlIO-utf8_strict.spec +perl-PkgConfig-LibPkgConf.spec +perl-Scalar-List-Utils.spec +perl-Socket.spec +perl-Socket6.spec +perl-Storable.spec +perl-Sub-Identify.spec +perl-Sub-Name.spec +perl-Syntax-Keyword-Try.spec +perl-Sys-CPU.spec +perl-Sys-MemInfo.spec +perl-Sys-Syslog.spec +perl-TermReadKey.spec +perl-Test-LeakTrace.spec +perl-Text-Soundex.spec +perl-threads-shared.spec +perl-Time-HiRes.spec +perl-Unicode-Collate.spec +perl-Unicode-LineBreak.spec +perl-Unicode-Normalize.spec +perl-XML-LibXSLT.spec +perl-YAML-LibYAML.spec +phonon.spec +pigz.spec +pipewire.spec +pkgconf.spec +pngquant.spec +poco.spec +polkit-pkla-compat.spec +poppler.spec +popt.spec +postgresql.spec +postgresql-odbc.spec +procenv.spec +proj.spec +protobuf2.spec +protobuf-c.spec +pulseaudio.spec +pycairo.spec +pyparted.spec +PyQt4.spec +python3.spec +python-argon2-cffi-bindings.spec +python-bcrypt.spec +python-cffi.spec +python-cheetah.spec +python-ethtool.spec +python-greenlet.spec +python-kiwisolver.spec +python-lazy-object-proxy.spec +python-markupsafe.spec +python-netifaces.spec +python-pillow.spec +python-psycopg2.spec +python-pycryptodomex.spec +python-pycurl.spec +python-pymongo.spec +python-pynacl.spec +python-pyrsistent.spec +python-simplejson.spec +python-systemd.spec +python-urwid.spec +python-zope-interface.spec +python-zstandard.spec +pyxattr.spec +qpid-proton.spec +qrencode.spec +qscintilla.spec +qt6-qttools.spec +quota.spec +raptor2.spec +rcs.spec +realmd.spec +recode.spec +rhash.spec +rpm.spec +rrdtool.spec +rsync.spec +rsyslog.spec +ruby.spec +ruby-augeas.spec +rubygem-bcrypt.spec +rubygem-bindex.spec +rubygem-bootsnap.spec +rubygem-ffi.spec +rubygem-hiredis.spec +rubygem-idn.spec +rubygem-msgpack.spec +rubygem-nio4r.spec +rubygem-nokogiri.spec +rubygem-pg.spec +rubygem-racc.spec +rubygem-rdiscount.spec +rubygem-redcarpet.spec +rubygem-RedCloth.spec +rubygem-regexp_property_values.spec +rubygem-ruby-shadow.spec +rubygem-sqlite3.spec +rubygem-thin.spec +rubygem-unf_ext.spec +rubygem-websocket-driver.spec +rust.spec +satyr.spec +sbc.spec +sendmail.spec +setools.spec +sg3_utils.spec +slang.spec +snappy.spec +socat.spec +socket_wrapper.spec +softhsm.spec +sox.spec +soxr.spec +squid.spec +sratom.spec +srt.spec +sscg.spec +strace.spec +subunit.spec +swtpm.spec +symlinks.spec +sysbench.spec +sysfsutils.spec +sysprof.spec +sysstat.spec +systemd.spec +taglib.spec +tang.spec +tar.spec +tcl.spec +tclx.spec +tcp_wrappers.spec +tcsh.spec +teckit.spec +telepathy-glib.spec +tigervnc.spec +time.spec +timedatex.spec +tipcutils.spec +tokyocabinet.spec +tpm2-tools.spec +ttembed.spec +ub-dhcp.spec +uchardet.spec +uid_wrapper.spec +unbound.spec +units.spec +unrtf.spec +unzip.spec +uriparser.spec +usbguard.spec +userspace-rcu.spec +ustr.spec +utf8proc.spec +util-linux.spec +uuid.spec +varnish.spec +vid.stab.spec +vino.spec +virt-what.spec +volume_key.spec +wget.spec +wxGTK3.spec +xcb-util.spec +xcb-util-image.spec +xcb-util-keysyms.spec +xcb-util-wm.spec +xcb-util-xrm.spec +xdelta.spec +xmlstarlet.spec +xmlto.spec +xorg-x11-server.spec +xorg-x11-xauth.spec +xxhash.spec +yajl.spec +yelp.spec +ykpers.spec +zenity.spec +zeromq.spec +zstd.spec + diff --git a/macros b/macros index 3cd2655..b3fcdb5 100644 --- a/macros +++ b/macros @@ -173,6 +173,7 @@ %__brp_ldconfig /usr/lib/rpm/brp-ldconfig %__brp_compress /usr/lib/rpm/brp-compress %__brp_strip /usr/lib/rpm/brp-strip %{__strip} +%__brp_strip_lto /usr/lib/rpm/brp-strip-lto %{__strip} %__brp_strip_comment_note /usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump} %__brp_strip_static_archive /usr/lib/rpm/brp-strip-static-archive %{__strip} %__brp_python_bytecompile /usr/lib/rpm/brp-python-bytecompile "%{__python}" "%{?_python_bytecompile_errors_terminate_build}" "%{?_python_bytecompile_extra}" @@ -185,6 +186,7 @@ %{?__brp_strip} \ %{?__brp_strip_comment_note} \ } \ + [ "%{_lto_cflags}"x != x ] && %{?__brp_strip_lto} \ %{?__brp_strip_static_archive} \ %{?py_auto_byte_compile:%{?__brp_python_bytecompile}} \ %{?__brp_python_hardlink} \ @@ -261,7 +263,9 @@ %_ld_as_needed 1 %_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed} -%_general_options -O2 -g -grecord-gcc-switches -pipe -fstack-protector-strong %[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ] +%_get_lto_cflags %(/lib/rpm/openEuler/lto_flag) +%_lto_cflags %{_get_lto_cflags} +%_general_options -O2 %{_lto_cflags} -g -grecord-gcc-switches -pipe -fstack-protector-strong %[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ] %_warning_options -Wall -Werror=format-security %_preprocessor_defines -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -- 2.43.0