Tôi đang sử dụng Gentoo Linux .
Đây là chuỗi công cụ của tôi:
sys-kernel/linux-headers-3.9
sys-devel/binutils-2.23.1 USE="cxx nls zlib -multislot -multitarget -static-libs {-test} -vanilla"
sys-devel/gcc-4.7.3-r1:4.7 USE="cxx fortran gtk lto mudflap (multilib) nls nptl openmp (-altivec) -doc (-fixed-point) -gcj -go -graphite (-hardened) (-libssp) -multislot -nopie -nossp -objc -objc++ -objc-gc -regression-test -vanilla"
sys-libs/glibc-2.17:2.2 USE="(multilib) -debug -gd (-hardened) -nscd -profile (-selinux) -suid -systemtap -vanilla"
Đây là CFLAGS của tôi:
$ cat /etc/portage/make.conf
CFLAGS="-march=core-avx-i -mtune=core-avx-i -O2 -pipe -flto"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
# etc...
Cả thế giới được xây dựng với LTO , ngoại trừ một vài gói:
$ cat /etc/portage/package.env
dev-lang/perl no-lto
dev-libs/elfutils no-lto
dev-lang/spidermonkey no-lto
dev-libs/glib no-lto
sys-devel/llvm no-lto
media-libs/mesa no-lto
media-libs/alsa-lib no-lto
sys-apps/preload no-lto
app-text/aspell no-lto
app-text/rarian no-lto
sys-power/upower no-lto
net-libs/farstream no-lto
dev-python/notify-python no-lto
x11-libs/wxGTK no-lto
media-video/avidemux no-lto
media-gfx/inkscape no-lto
x11-base/xorg-server no-lto
x11-drivers/xf86-video-intel no-lto
net-libs/webkit-gtk no-lto
mail-client/thunderbird no-lto
$ cat /etc/portage/env/no-lto
CFLAGS="${CFLAGS} -fno-lto"
CXXFLAGS="${CXXFLAGS} -fno-lto"
LDFLAGS="${LDFLAGS} -fno-lto"
Trên một số blog tôi nhận thấy các tác giả thiết lập LDFLAGS trong tệp make.conf của họ, tôi đã không làm điều đó.
Hệ điều hành đặt các LDFLAGS này theo cấu hình đã chọn:
$ emerge --info | grep LDFLAGS
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
Các nhà phát triển và bảo trì Gentoo không khuyên bạn nên thay đổi chúng
Tôi muốn đặt các dòng này trong make.conf
tệp của mình , sau đó xây dựng lại chuỗi công cụ và thế giới:
CFLAGS="-march=core-avx-i -mtune=core-avx-i -O2 -pipe -flto -Wl,-flto"
LDFLAGS="-Wl,-flto -Wl,-O2"
Sẽ có bất kỳ sự khác biệt trong hiệu suất / ổn định?
Là những khác biệt có giá trị thời gian cần thiết để biên dịch lại toàn bộ thế giới?
Tôi muốn nghe đề xuất, giải thích, thực tiễn tốt hơn từ người dùng / người bảo trì / lập trình viên / quản trị viên có kinh nghiệm của Gentoo ...
Cảm ơn bạn rất nhiều trước!
--as-needed
tự động được thay thế bởi -Wl,-flto -Wl,-O2
?
-march
là một superset của -mtune
. Có cả hai là vô nghĩa.
emerge --info
là những gì đã được đặt, do đó, việc đặt cùng một giá trị rõ ràng không thay đổi bất cứ điều gì. Câu hỏi này có thể có nhiều hơn về chủ đề trên unix.stackexchange.com vì vậy đừng nhầm lẫn khi nó được chuyển đến đó (tài khoản từ cả hai trang web được hợp nhất nếu bạn đăng ký với cùng một xác thực),