1 |
On 2014-12-07 11:37, Michał Górny wrote: |
2 |
> Hello, developers and users. |
3 |
> |
4 |
> As some of you know, the toolchain packages in Gentoo suffer from |
5 |
> lack-of-sanity issues and their maintainers are completely unwilling to |
6 |
> improve things. I have finally decided to start working on a fork of |
7 |
> the sys-devel/gcc ebuilds, and I have some bits ready for initial |
8 |
> testing in 'mgorny' repo, so I would like to know your opinion. |
9 |
> |
10 |
> |
11 |
> Before you start, the shortcomings are: |
12 |
> |
13 |
> 1. No cross-compilation support. If the project proves being a success |
14 |
> it will be readded at some point. However, I will likely fork glibc |
15 |
> first and work on a sane crossdev alternative. |
16 |
> |
17 |
> 2. No gcj support. Since the ebuild has been forked out of |
18 |
> toolchain.eclass, and the gcj support suffers a lot of issues there, I |
19 |
> decided there's no point in copying the code. Not sure if anybody |
20 |
> actually uses it, and if it is actually useful for anything but will |
21 |
> probably get reintroduced one day [above 'if' applies too]. |
22 |
> |
23 |
> 3. No bootstrapping, fallbacks and possible some other random feature |
24 |
> support. The goal was pretty much to get gcc compiling first, and avoid |
25 |
> awful lot of effort if things prove to have no future. |
26 |
> |
27 |
> 4. Hardened is not tested. I think I have copied all the needed code |
28 |
> and fixed some stuff but I have no clue if it still works ;). |
29 |
> |
30 |
> |
31 |
> Now, the major changes are: |
32 |
> |
33 |
> 1. Most of the insanity removed. No more toolchain.eclass. The ebuild |
34 |
> has just the code for the current gcc version. You can read it and know |
35 |
> what it does, you don't have to parse a few dozen version conditionals, |
36 |
> runtime conditionals and random crap code that doesn't do anything in |
37 |
> some gcc versions. In fact, I think I removed most of the no-op code. |
38 |
> And now you can actually change something in the ebuild without caring |
39 |
> for gcc3.4, or without breaking stuff for stable ebuilds. |
40 |
> |
41 |
> 2. USE flags are supposed to work. I've replaced the cases when they |
42 |
> were silently ignored with REQUIRED_USE. I've also removed the silent |
43 |
> removals when they didn't work -- so if your current toolchain is |
44 |
> broken, things may actually fail instead of giving your different gcc |
45 |
> than you wanted. Probably deserves explanatory pkg_pretend() at some |
46 |
> point, with messages like 'disable USE=-foo because your toolchain is |
47 |
> broken'. |
48 |
> |
49 |
> 3. Things simplified where they could have been simplified. For |
50 |
> example, I removed the big gcc executable moving function and replaced |
51 |
> it with --enable-version-specific-runtime-libs. It was enabled in |
52 |
> toolchain.eclass with a comment 'If we enable it on non-Darwin we screw |
53 |
> up the behaviour this eclass relies on.' So yep, precious cargo cult -- |
54 |
> why enable something that would require you to remove your useless |
55 |
> complex function?! |
56 |
> |
57 |
> 4. Added gx86-multilib love. Now you have abi_* flags to control |
58 |
> the compiler runtime. Of course, since gcc is a pile of random modules |
59 |
> not fit for one another it has different code for different targets. In |
60 |
> particular, on mips you can't do two ABIs -- either single one |
61 |
> (non-multilib) or all three of them (--enable-multilib). |
62 |
> |
63 |
> 5. Added multilib gcc wrappers. Long story short, multilib gcc now |
64 |
> shows up in gcc-config alike crossdev -- but unlike i686 crossdev, it |
65 |
> doesn't screw up your system! Of course, the final implementation may |
66 |
> differ since it's an early idea but it works. Now distcc happily builds |
67 |
> stuff for your x86 clients. |
68 |
> |
69 |
> 6. Added missing dependencies. Yep, USE flags now, say, pull in doxygen |
70 |
> rather than silently skipping doc build when it's not installed... |
71 |
> |
72 |
> 7. Disabled bootstrap by default (and in fact completely for now). It |
73 |
> is not *that* useful, and means time savings (and distcc support): |
74 |
> |
75 |
> Thu Nov 6 20:39:31 2014 >>> sys-devel/gcc-4.9.2 |
76 |
> merge time: 1 hour, 56 minutes and 43 seconds. |
77 |
> |
78 |
> Sun Dec 7 10:46:08 2014 >>> sys-devel/gcc-4.9.2-r100 |
79 |
> merge time: 34 minutes and 55 seconds. |
80 |
> |
81 |
> |
82 |
> If you're interested in testing it, 'layman -a mgorny' and enjoy. I'd |
83 |
> appreciate any bug reports, except for those covering things i've |
84 |
> already listed as missing :). Any further comments will be very helpful |
85 |
> in deciding on the way forward. |
86 |
> |
87 |
> If there is a real interest in my fork, I will probably move it to gx86 |
88 |
> as sys-devel/gcc-mgorny. I will also be happy to work on replacing |
89 |
> the new versions of original sys-devel/gcc completely. With QA process |
90 |
> against toolchain.eclass if necessary. |
91 |
|
92 |
Thanks, I've tried this on ~amd64. It builds in 10 minutes (wow!), |
93 |
tested to build some core stuff with it: |
94 |
kernel 3.17, glibc, coreutils, openssl, ssh... |
95 |
|
96 |
All seems to work fine. I'll try to recompile the whole machine with it. |
97 |
|
98 |
After emerge, there are these notices: |
99 |
* QA Notice: command not found: |
100 |
* |
101 |
* /var/tmp/portage/sys-devel/gcc-4.9.2-r100/temp/environment: line |
102 |
3110: pax-mark: command not found |
103 |
* /var/tmp/portage/sys-devel/gcc-4.9.2-r100/temp/environment: line |
104 |
3111: pax-mark: command not found |
105 |
|
106 |
# emerge -pvq gcc |
107 |
[ebuild R ] sys-devel/gcc-4.9.2-r100 USE="cxx fortran nls nptl |
108 |
openmp pie sanitize (-altivec) -doc (-fixed-point) -go -graphite |
109 |
(-hardened) (-libssp) -objc -objc++ -objc-gc {-test} -vanilla" |
110 |
ABI_X86="(64) -32 (-x32)" |
111 |
|
112 |
Portage 2.2.14 (python 2.7.8-final-0, default/linux/amd64/13.0/desktop, |
113 |
gcc-4.9.2, glibc-2.20, 3.17.5-gentoo x86_64) |
114 |
================================================================= |
115 |
System uname: |
116 |
Linux-3.17.5-gentoo-x86_64-Intel-R-_Core-TM-_i5-3570_CPU_@_3.40GHz-with-gentoo-2.2 |
117 |
KiB Mem: 15908668 total, 12616592 free |
118 |
KiB Swap: 0 total, 0 free |
119 |
Timestamp of tree: Tue, 09 Dec 2014 02:45:01 +0000 |
120 |
ld GNU ld (Gentoo 2.24 p1.4) 2.24 |
121 |
app-shells/bash: 4.3_p30-r1 |
122 |
dev-java/java-config: 2.2.0 |
123 |
dev-lang/perl: 5.20.1-r3 |
124 |
dev-lang/python: 2.7.8, 3.2.5-r4, 3.3.5-r1, 3.4.2 |
125 |
dev-util/cmake: 3.0.2 |
126 |
dev-util/pkgconfig: 0.28-r2 |
127 |
sys-apps/baselayout: 2.2 |
128 |
sys-apps/openrc: 0.13.6 |
129 |
sys-apps/sandbox: 2.6-r1 |
130 |
sys-devel/autoconf: 2.13, 2.69 |
131 |
sys-devel/automake: 1.14.1 |
132 |
sys-devel/binutils: 2.24-r3 |
133 |
sys-devel/gcc: 4.8.3, 4.9.2-r100::mgorny |
134 |
sys-devel/gcc-config: 1.8 |
135 |
sys-devel/libtool: 2.4.3-r2 |
136 |
sys-devel/make: 4.1-r1 |
137 |
sys-kernel/linux-headers: 3.17-r1 (virtual/os-headers) |
138 |
sys-libs/glibc: 2.20 |
139 |
ACCEPT_KEYWORDS="amd64 ~amd64" |
140 |
ACCEPT_LICENSE="*" |
141 |
CBUILD="x86_64-pc-linux-gnu" |
142 |
CFLAGS="-mtune=native -O2 -pipe" |
143 |
CHOST="x86_64-pc-linux-gnu" |
144 |
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt" |
145 |
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d |
146 |
/etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release |
147 |
/etc/php/apache2-php5.5/ext-active/ /etc/php/apache2-php5.6/ext-active/ |
148 |
/etc/php/cgi-php5.5/ext-active/ /etc/php/cgi-php5.6/ext-active/ |
149 |
/etc/php/cli-php5.5/ext-active/ /etc/php/cli-php5.6/ext-active/ |
150 |
/etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" |
151 |
CXXFLAGS="-mtune=native -O2 -pipe" |
152 |
DISTDIR="/usr/portage/distfiles" |
153 |
FCFLAGS="-O2 -pipe" |
154 |
FEATURES="assume-digests binpkg-logs config-protect-if-modified |
155 |
distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch |
156 |
preserve-libs protect-owned sandbox sfperms strict unknown-features-warn |
157 |
unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync |
158 |
xattr" |
159 |
FFLAGS="-O2 -pipe" |
160 |
GENTOO_MIRRORS="http://tux.rainside.sk/gentoo/" |
161 |
LDFLAGS="-Wl,-O1 -Wl,--as-needed" |
162 |
MAKEOPTS="-j4" |
163 |
PKGDIR="/usr/portage/packages" |
164 |
PORTAGE_CONFIGROOT="/" |
165 |
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times |
166 |
--omit-dir-times --compress --force --whole-file --delete --stats |
167 |
--human-readable --timeout=180 --exclude=/distfiles --exclude=/local |
168 |
--exclude=/packages" |
169 |
PORTAGE_TMPDIR="/var/tmp" |
170 |
PORTDIR="/usr/portage" |
171 |
USE="X a52 aac acl acpi alsa amd64 berkdb bindist branding bzip2 cairo |
172 |
cdda cdr cli consolekit cracklib crypt cups cxx dbus dri dts dvd dvdr |
173 |
emboss encode exif fam firefox flac fortran gdbm gif glamor gpm gtk |
174 |
iconv jpeg lcms ldap libnotify mad mmx mng modules mp3 mp4 mpeg multilib |
175 |
ncurses nls nptl ogg opengl openmp pam pango pcre pdf png policykit ppds |
176 |
qt3support qt4 readline sdl session sse sse2 ssl startup-notification |
177 |
svg tcpd tiff truetype udev udisks unicode upower usb vorbis wxwidgets |
178 |
x264 xattr xcb xml xv xvid zlib" ABI_X86="64" ALSA_CARDS="ali5451 |
179 |
als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 |
180 |
es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident |
181 |
usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="authn_core |
182 |
authz_core authz_host dir mime unixd socache_shmcb log_config rewrite |
183 |
vhost_alias log_forensic proxy proxy_fcgi info status deflate filter |
184 |
auth_digest authn_file authz_user access_compat actions alias auth_basic |
185 |
authn_alias authn_anon env expires headers mime_magic negotiation |
186 |
reqtimeout setenvif unique_id version cgi" CALLIGRA_FEATURES="kexi words |
187 |
flow plan sheets stage tables krita karbon braindump author" |
188 |
CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool |
189 |
swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate |
190 |
evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom |
191 |
oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing |
192 |
tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64 pc" |
193 |
INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz |
194 |
cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" |
195 |
LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" |
196 |
LINGUAS="en" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6 |
197 |
php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 |
198 |
python3_3" QEMU_SOFTMMU_TARGETS="x86_64 i386" QEMU_USER_TARGETS="x86_64 |
199 |
i386" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="intel |
200 |
i128" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset |
201 |
ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark |
202 |
ipmark dhcpmac delude chaos account" |
203 |
Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, |
204 |
LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, |
205 |
PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON |