gf2x has an sse2 use flag and configure will take --{en,dis}able-sse2 as an option. However if the target_cpu is x86_64 a sse2 tuned of gf2x_mul2.h will automatically be used resulting in a compilation error: USE="-sse2" ebuild /usr/portage/dev-libs/gf2x/gf2x-0.9.5.ebuild compile * gf2x-0.9.5.tar.gz RMD160 SHA1 SHA256 size ;-) ... [ ok ] * checking ebuild checksums ;-) ... [ ok ] * checking auxfile checksums ;-) ... [ ok ] * checking miscfile checksums ;-) ... [ ok ] * checking gf2x-0.9.5.tar.gz ;-) ... [ ok ] * Package: dev-libs/gf2x-0.9.5 * Repository: gentoo * Maintainer: sci-mathematics@gentoo.org * USE: amd64 elibc_glibc kernel_linux multilib userland_GNU * FEATURES: fakeroot preserve-libs sandbox splitdebug >>> Unpacking source... >>> Unpacking gf2x-0.9.5.tar.gz to /var/tmp/portage/dev-libs/gf2x-0.9.5/work >>> Source unpacked in /var/tmp/portage/dev-libs/gf2x-0.9.5/work >>> Preparing source in /var/tmp/portage/dev-libs/gf2x-0.9.5/work/gf2x-0.9.5 ... >>> Source prepared. >>> Configuring source in /var/tmp/portage/dev-libs/gf2x-0.9.5/work/gf2x-0.9.5 ... * econf: updating gf2x-0.9.5/config/config.guess with /usr/share/gnuconfig/config.guess * econf: updating gf2x-0.9.5/config/config.sub with /usr/share/gnuconfig/config.sub ./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --libdir=/usr/lib64 --disable-sse2 ABI=default checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for style of include used by make... GNU checking for x86_64-pc-linux-gnu-gcc... x86_64-pc-linux-gnu-gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether x86_64-pc-linux-gnu-gcc accepts -g... yes checking for x86_64-pc-linux-gnu-gcc option to accept ISO C89... none needed checking dependency style of x86_64-pc-linux-gnu-gcc... gcc3 checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for fgrep... /bin/grep -F checking for ld used by x86_64-pc-linux-gnu-gcc... /usr/x86_64-pc-linux-gnu/bin/ld checking if the linker (/usr/x86_64-pc-linux-gnu/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... yes checking for /usr/x86_64-pc-linux-gnu/bin/ld option to reload object files... -r checking for x86_64-pc-linux-gnu-objdump... x86_64-pc-linux-gnu-objdump checking how to recognize dependent libraries... pass_all checking for x86_64-pc-linux-gnu-ar... x86_64-pc-linux-gnu-ar checking for x86_64-pc-linux-gnu-strip... x86_64-pc-linux-gnu-strip checking for x86_64-pc-linux-gnu-ranlib... x86_64-pc-linux-gnu-ranlib checking command to parse /usr/bin/nm -B output from x86_64-pc-linux-gnu-gcc object... ok checking how to run the C preprocessor... x86_64-pc-linux-gnu-gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if x86_64-pc-linux-gnu-gcc supports -fno-rtti -fno-exceptions... no checking for x86_64-pc-linux-gnu-gcc option to produce PIC... -fPIC -DPIC checking if x86_64-pc-linux-gnu-gcc PIC flag -fPIC -DPIC works... yes checking if x86_64-pc-linux-gnu-gcc static flag -static works... yes checking if x86_64-pc-linux-gnu-gcc supports -c -o file.o... yes checking if x86_64-pc-linux-gnu-gcc supports -c -o file.o... (cached) yes checking whether the x86_64-pc-linux-gnu-gcc linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for x86_64-pc-linux-gnu-gcc... (cached) x86_64-pc-linux-gnu-gcc checking whether we are using the GNU C compiler... (cached) yes checking whether x86_64-pc-linux-gnu-gcc accepts -g... (cached) yes checking for x86_64-pc-linux-gnu-gcc option to accept ISO C89... (cached) none needed checking dependency style of x86_64-pc-linux-gnu-gcc... (cached) gcc3 checking for x86_64-pc-linux-gnu-g++... x86_64-pc-linux-gnu-g++ checking whether we are using the GNU C++ compiler... yes checking whether x86_64-pc-linux-gnu-g++ accepts -g... yes checking dependency style of x86_64-pc-linux-gnu-g++... gcc3 checking whether we are using the GNU C++ compiler... (cached) yes checking whether x86_64-pc-linux-gnu-g++ accepts -g... (cached) yes checking dependency style of x86_64-pc-linux-gnu-g++... (cached) gcc3 checking how to run the C++ preprocessor... x86_64-pc-linux-gnu-g++ -E checking for ld used by x86_64-pc-linux-gnu-g++... /usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64 checking if the linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) is GNU ld... yes checking whether the x86_64-pc-linux-gnu-g++ linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) supports shared libraries... yes checking for x86_64-pc-linux-gnu-g++ option to produce PIC... -fPIC -DPIC checking if x86_64-pc-linux-gnu-g++ PIC flag -fPIC -DPIC works... yes checking if x86_64-pc-linux-gnu-g++ static flag -static works... yes checking if x86_64-pc-linux-gnu-g++ supports -c -o file.o... yes checking if x86_64-pc-linux-gnu-g++ supports -c -o file.o... (cached) yes checking whether the x86_64-pc-linux-gnu-g++ linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking warning verbosity option... -Wall -W for C++ -Wall -W for C checking for x86_64-pc-linux-gnu-gcc option to accept ISO C99... -std=gnu99 checking whether x86_64-pc-linux-gnu-gcc -std=gnu99 and cc understand -c and -o together... yes checking size of unsigned long... 8 checking whether x86_64-pc-linux-gnu-gcc -std=gnu99 can compile sse-2 code... explicitly disabled, no checking the number of bits in an unsigned long... 64 using ABI="default" CC="x86_64-pc-linux-gnu-gcc -std=gnu99" CFLAGS="-O1 -march=native -pipe -ggdb -Wall -W" CPPFLAGS="" hwdir="x86_64" checking whether hardware/x86_64/ is right assuming 64-bits unsigned longs... yes configure: creating ./config.status config.status: creating version.sh config.status: creating Makefile config.status: creating tests/Makefile config.status: creating apps/Makefile config.status: creating tuning/Makefile config.status: creating gf2x/gf2x-config.h config.status: linking hardware/x86_64/gf2x-thresholds.h to gf2x/gf2x-thresholds.h config.status: linking hardware/generic64/gf2x_mul1.h to gf2x/gf2x_mul1.h config.status: linking hardware/x86_64/gf2x_mul2.h to gf2x/gf2x_mul2.h config.status: linking hardware/generic/gf2x_mul3.h to gf2x/gf2x_mul3.h config.status: linking hardware/generic/gf2x_mul4.h to gf2x/gf2x_mul4.h config.status: executing depfiles commands config.status: executing libtool commands >>> Source configured. >>> Compiling source in /var/tmp/portage/dev-libs/gf2x-0.9.5/work/gf2x-0.9.5 ... make -j12 VERBOSE=1 Making all in . make[1]: Entering directory `/var/tmp/portage/dev-libs/gf2x-0.9.5/work/gf2x-0.9.5' /bin/sh ./libtool --tag=CC --mode=compile x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT gf2x.lo -MD -MP -MF .deps/gf2x.Tpo -c -o gf2x.lo gf2x.c /bin/sh ./libtool --tag=CC --mode=compile x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT toom.lo -MD -MP -MF .deps/toom.Tpo -c -o toom.lo toom.c /bin/sh ./libtool --tag=CC --mode=compile x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT fft.lo -MD -MP -MF .deps/fft.Tpo -c -o fft.lo fft.c libtool: compile: x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT gf2x.lo -MD -MP -MF .deps/gf2x.Tpo -c gf2x.c -fPIC -DPIC -o .libs/gf2x.o libtool: compile: x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT toom.lo -MD -MP -MF .deps/toom.Tpo -c toom.c -fPIC -DPIC -o .libs/toom.o libtool: compile: x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT fft.lo -MD -MP -MF .deps/fft.Tpo -c fft.c -fPIC -DPIC -o .libs/fft.o In file included from gf2x/gf2x-small.h:94:0, from toom.c:32: ./gf2x/gf2x_mul2.h:40:2: error: #error "This code needs sse-2 support" In file included from gf2x/gf2x-small.h:94:0, from gf2x.c:31: ./gf2x/gf2x_mul2.h:40:2: error: #error "This code needs sse-2 support" make[1]: *** [gf2x.lo] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: *** [toom.lo] Error 1 libtool: compile: x86_64-pc-linux-gnu-gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./gf2x -O1 -march=native -pipe -ggdb -Wall -W -MT fft.lo -MD -MP -MF .deps/fft.Tpo -c fft.c -o fft.o >/dev/null 2>&1 mv -f .deps/fft.Tpo .deps/fft.Plo make[1]: Leaving directory `/var/tmp/portage/dev-libs/gf2x-0.9.5/work/gf2x-0.9.5' emerge --info Portage 2.2.0_alpha32 (default/linux/amd64/10.0, gcc-4.5.2, glibc-2.11.3-r0, 2.6.37-gentoo-r4 x86_64) ================================================================= System uname: Linux-2.6.37-gentoo-r4-x86_64-Intel-R-_Core-TM-_i7_CPU_970_@_3.20GHz-with-gentoo-2.0.2 Timestamp of tree: Wed, 11 May 2011 22:45:01 +0000 app-shells/bash: 4.1_p9 dev-java/java-config: 2.1.11-r3 dev-lang/python: 2.6.6-r2::sage-on-gentoo, 2.7.1-r1::sage-on-gentoo, 3.1.3-r1 dev-util/cmake: 2.8.4-r1 sys-apps/baselayout: 2.0.2 sys-apps/openrc: 0.8.2-r1 sys-apps/sandbox: 2.5 sys-devel/autoconf: 2.13, 2.65-r1 sys-devel/automake: 1.9.6-r3, 1.10.3, 1.11.1 sys-devel/binutils: 2.20.1-r1 sys-devel/gcc: 4.4.5, 4.5.2 sys-devel/gcc-config: 1.4.1-r1 sys-devel/libtool: 2.2.10 sys-devel/make: 3.81-r2 sys-kernel/linux-headers: 2.6.36.1 (virtual/os-headers) sys-libs/glibc: 2.11.3 Repositories: gentoo sunrise science sage-on-gentoo bicatali CRAN BlueFern Installed sets: ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="* -@EULA" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O1 -march=native -pipe -ggdb" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /var/lib/hsqldb" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-O1 -march=native -pipe -ggdb" DISTDIR="/usr/portage/distfiles" FEATURES="assume-digests binpkg-logs candy collision-protect distlocks ebuild-locks fakeroot fixlafiles fixpackages multilib-strict news parallel-fetch preserve-libs protect-owned sandbox sfperms split-log splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch" FFLAGS="" GENTOO_MIRRORS="http://mirrors.tds.net/gentoo http://distfiles.gentoo.org http://www.ibiblio.org/pub/Linux/distributions/gentoo ftp://mirrors.tds.net/gentoo http://gentoo.eliteitminds.com" LDFLAGS="-Wl,-O1 -Wl,--as-needed" LINGUAS="en_GB fr" MAKEOPTS="-j12 VERBOSE=1" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/var/lib/layman/sunrise /var/lib/layman/science /var/lib/layman/sage-on-gentoo /var/lib/layman/bicatali /var/lib/layman/CRAN /home/fbissey/Work/Overlays/BlueFern" SYNC="rsync://rsync.au.gentoo.org/gentoo-portage" USE="X a52 aac aalib acl acpi alsa amd64 amr ao apm asf audiofile berkdb bidi bootsplash branding bzip2 cairo cdda cddb cdf cdparanoia cg cli composite consolekit cracklib crypt cups curl cxx dbus declarative device-mapper dga dmi dri dts dv dvd dvdr dvdread encode exif expat ffmpeg fftw flac fontconfig foomaticdb fortran fpx gdbm geoip gif gimpprint glib glitz glut gmp graphviz gs gstreamer gtk gtk2 iconv icu id3tag idn imagemagick imlib imlib2 ipv6 ipython jack java jbig joystick jpeg jpeg2k kde kdehiddenvisibility kipi kontact kpathsea lame lapack latex lcms ldap libffi libsamplerate lzma lzo mad mathml matroska mikmod mime mmx mng modules motif mp3 mp4 mpeg mpi mplayer mudflap multilib musicbrainz ncurses netcdf network nls nptl nptlonly ogg openal openexr opengl pari24 pcre pdf perl png policykit portaudio posix ppds pppd ps python qt3support qt4 quicktime readline romio sdl secure-delete semantic-desktop session sndfile sox spell sqlite3 sse sse2 sse3 sse4 ssl ssse3 startup-notification svg sysfs szip t1lib tcl tcltk tcpd tetex tga theora thumbnail tiff tk truetype udev unicode usb v4l2 vcd vnc vorbis wavpack webkit wmf x264 xanim xattr xcb xcomposite xine xinerama xml xorg xpm xsl xv xvid xvmc zlib" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev keyboard mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en_GB fr" PHP_TARGETS="php5-3" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="vga nvidia nouveau" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Don't do that.
Is this true for 1.0 too? If not then I'll ask for stable of that version shortly.
(In reply to comment #2) > Is this true for 1.0 too? If not then I'll ask for stable of that version > shortly. It is unfortunately. Although you have a recent intel cpu you may escape it by chance and get pclmul instead. I have put an ebuild there: https://bitbucket.org/burcin/sage-prefix/changeset/0242206a4d8f#chg-dev-libs/gf2x/gf2x-1.0.ebuild But I am thinking we should just drop sse2 and pclmul and have a bindist flag instead. On x86 it would disable sse2 and on amd64 it would disable pclmul. My reasoning is that not using those is only useful if 1) implementation is buggy 2) we want to make distributable binaries What do you think?
Just to document the problem. There is a CHECK_SSE2_SUPPORT() defined in config/acinclude.m4 and it does what you expect and takes into account the configure option --disable-sse2. My first thought was the problem was there. But no that bit works as expected. The problem lies a bit further in the hardware platform detection - this is taken form configure.ac in 1.0: if test x$hwdir = x ; then # Our _default_ setting for hwdir is to use 8*sizeof(ulong). hwdir=generic$gf2x_wordsize # Yet there are several situations in which we select another directory. # This refined selection mechanism is impacted by the ABI= setting. case "$target_cpu" in # All 32-bit pentium patterns i?86|pentium*|athlon|prescott) if test "$gf2x_cv_cc_supports_sse2" = "no" ; then hwdir=x86_nosse2 else hwdir=x86_sse2 # Maybe on some funny platform from hell, we could get i386 yet have a # 64-bit cpu ? if test x$ABI = x64 ; then hwdir=x86_64 fi fi ;; core2|opteron|x86_64|nocona|k10) # Note: could set to something else if we have separate tuning files. if test "$gf2x_cv_cc_supports_pclmul" = "no" ; then hwdir=x86_64 else hwdir=x86_64_pclmul fi if test x$ABI = x32 ; then hwdir=x86_sse2 elif test x$ABI = xdefault ; then RUNTIME_ULONG_BITS() case x$gf2x_cv_ulongbits in x64|xdontknow) true ;; *) AC_MSG_WARN([The default ABI for this compiler has $gf2x_cv_ulongbits-bit unsigned longs, not 64-bit as the CPU supports. Using $gf2x_cv_ulongbits-bit]) hwdir=x86_sse2;; esac fi ;; esac else AC_MSG_NOTICE([Using supplied hwdir value $hwdir]) fi Notice that on x86 there is a check for gf2x_cv_cc_supports_sse2 and you can have hwdir be x86_sse2 or x86_nosse2 but for x86_64 in 0.9.5 there was only x86_64. In 1.0 above you can get x86_64 (which is sse2 enabled) or x86_64_pclmul instead if your cpu supports it. On x86_64 by default you get sse2 regardless of configure options and there is no hwdir alternatives that isn't either sse2 or pclmul.
Created attachment 279283 [details] ebuild proposal using bindist So I am attaching an ebuild proposal for gf2x-1.0 following the bindist idea. It would probably be useful to have some info about it in metadata.xml. Basically with the bindist flag enabled we make sure we have the lowest common denominator for that arch by disabling what can be. In other case we let the autodetection run its course as it otherwise can lead to conflict of configuration as explained above.
+*gf2x-1.0-r1 (08 Jul 2011) + + 08 Jul 2011; Thomas Kahle <tomka@gentoo.org> +gf2x-1.0-r1.ebuild: + Adding Francois Bissey's fix for bug 366945 +
(In reply to comment #6) > +*gf2x-1.0-r1 (08 Jul 2011) > + > + 08 Jul 2011; Thomas Kahle <tomka@gentoo.org> +gf2x-1.0-r1.ebuild: > + Adding Francois Bissey's fix for bug 366945 > + Francois, many thanks for all the research and the fix. You should become a dev and do these things yourself ;)
(In reply to comment #7) > (In reply to comment #6) > > +*gf2x-1.0-r1 (08 Jul 2011) > > + > > + 08 Jul 2011; Thomas Kahle <tomka@gentoo.org> +gf2x-1.0-r1.ebuild: > > + Adding Francois Bissey's fix for bug 366945 > > + > > Francois, many thanks for all the research and the fix. You should become a > dev and do these things yourself ;) I hope that once the situation stabilize with my new son I'll have some more time for quizzes and kick start my dev-bug again. Hopefully this time around the recruiter won't call at a time when 200 scripts to mark have landed on my desk.