On 12/05/2019 06:24, Ken Moffat via lfs-dev wrote: > As people probably know, I usually set my own CFLAGS when building > LFS (at a minimum, -O2 to get rid of most debug symbols). But I'm > now trying to compare the build times and the size of the > executables for "I did it my way" against using the default CFLAGS > from the individual packages (or from BLFS, or using releease builds > for cmake and meson). > > Got through chapter 5 ok, time was not a lot greater but the space > used by /tools was a lot bigger (2.4 GB instead of 851MB). But in > chapter 6 glibc was not happy: > > # error "glibc cannot be compiled without optimization" > > Looking on google, and trying to follow a link to the FAQ > specifically for this (apparently failed, but left me at hte FAQ) > all I can find is the old advice from Seth: if you use CFLAGS and > the build fails, people will suggest you try without those CFLAGS. > > Fine, and I remember suggestions to use -O3 for glibc from Greg > Schafer. So, I've added CFLAGS='-O2' for glibc if my own CFLAGS are > not set (and I had a similar fix which became ineffective when I > reworked how I set/pass my CFLAGS, at that time it was labelled as > being needed for at least x86_32). > > But unless I'm looking in the wrong place, I can't see any CFLAGS in > the book ? So, how do you all build glibc in chroot ? > > I'm guessing that --enable-stack-protector=strong might be what > enforces this requirement. > > Or have I somehow diverged too far from the book, and will shortly be > "not waving, but drowning" ? >
jhalfs default, which I use, and I guess others too, is to have CFLAGS unset. Note the defaults CFLAGS for glibc come frome Makeconfig: ---------------------------- override CFLAGS = -std=gnu11 -fgnu89-inline $(config-extra-cflags) \ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \ $(+extra-math-flags) \ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \ $(CFLAGS-$(@F)) $(tls-model) \ $(foreach lib,$(libof-$(basename $(@F))) \ $(libof-$(<F)) $(libof-$(@F)),$(CFLAGS-$(lib))) -------------------------- and "+cflags" contains either what has been passed as CFLAGS, or "-g -O2". The #error you are seeing comes from file include/libc-symbols.h. It flags the error if __OPTIMIZE__ is not defined when compiling. From gcc doc, __OPTIMIZE__ is defined to 1 whenever optimization is enabled (even -Os). From my glibc logs, almost all the calls to gcc have "-g -O2" in their command line. Ah, and they have also "-include ../include/libc-symbols.h". So, IIUC, if you pass a CFLAGS without -Osomething (explicit or implied), the error is triggered. BTW, I've been pulling my hair several times in my life for using -02 (zero two), instead of -O2 (letter O two)... Pierre -- http://lists.linuxfromscratch.org/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page