I am trying to build Gem on Debian/stable with the default gcc 3.3.5 (Debian 1:3.3.5-13), and it dies with a compiler error. Its something to do with SSE2, because it works when I use the --disable- sse2 flag.
Here's the transcript:
pd@pd-debian-stable:src > ./configure --with-pd=/home/pd/auto-build/ pd-extended/pd && make checking for Base/configLinux.h.in... yes checking for g++... g++ 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 g++ accepts -g... yes checking for gcc... gcc checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for sin in -lm... yes checking for main in -lz... yes checking for dlopen in -ldl... yes checking how to run the C preprocessor... gcc -E checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include checking for gethostbyname... yes checking for connect... yes checking for remove... yes checking for shmat... yes checking for IceConnectionNumber in -lICE... yes checking for main in -lX11... yes checking for main in -lXext... yes checking for XF86VidModeGetAllModeLines in -lXxf86vm... yes checking for main in -lXext... (cached) yes checking for glInitNames in -lGL... yes checking for gluLookAt in -lGLU... yes checking for "OpenGL"-framework... no checking for "AGL"-framework... no checking for "Carbon"-framework... no checking for "QuickTime"-framework... no checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for PKG_IMAGEMAGICK___CFLAGS... checking for PKG_IMAGEMAGICK___LIBS... -L/usr/X11R6/lib -llcms -ltiff -lfreetype -ljasper -ljpeg -lpng -ldpstk -ldps -lXext -lXt -lSM -lICE -lX11 -lbz2 -lxml2 -lz -lm -lpthread -lMagick++ -lMagick checking for PKG_TIFF_CFLAGS... checking for PKG_TIFF_LIBS... checking for tiff-config... no checking for TIFFOpen in -ltiff... yes checking for PKG_JPEG_CFLAGS... checking for PKG_JPEG_LIBS... checking for jpeg-config... no checking for jpeg_read_header in -ljpeg... yes checking for PKG_LIBQUICKTIME_CFLAGS... checking for PKG_LIBQUICKTIME_LIBS... checking for libquicktime-config... no checking for quicktime_init in -lquicktime... yes checking for PKG_LQT_CFLAGS... checking for PKG_LQT_LIBS... checking for lqt-config... yes checking for PKG_MPEG3_CFLAGS... checking for PKG_MPEG3_LIBS... checking for mpeg3-config... no checking for mpeg3_check_sig in -lmpeg3... yes checking for PKG_MPEG_CFLAGS... checking for PKG_MPEG_LIBS... checking for mpeg-config... no checking for OpenMPEG in -lmpeg... yes checking for PKG_AVIFILE_CFLAGS... checking for PKG_AVIFILE_LIBS... checking for avifile-config... no checking for CreateIAviReadFile in -laviplay... no checking for PKG_FFMPEG_CFLAGS... checking for PKG_FFMPEG_LIBS... checking for ffmpeg-config... yes checking whether (AVStream)->codec is of type "*AVCodecContext"... no checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -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 linux/videodev.h usability... yes checking linux/videodev.h presence... yes checking for linux/videodev.h... yes checking for PKG_IEEE1394_CFLAGS... checking for PKG_IEEE1394_LIBS... checking for ieee1394-config... no checking for main in -ldv... yes checking for PKG_FTGL_CFLAGS... -I/usr/include/freetype2 checking for PKG_FTGL_LIBS... -lGLU -lGL -lfreetype -lz -lftgl checking for PKG_GLTT_CFLAGS... checking for PKG_GLTT_LIBS... checking for gltt-config... no checking for GLTTFont in -lgltt... no checking for pthread_create in -lpthread... yes checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include checking for ANSI C header files... (cached) yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking float.h usability... yes checking float.h presence... yes checking for float.h... yes checking for memory.h... (cached) yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for strings.h... (cached) yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking for unistd.h... (cached) yes checking for stdbool.h that conforms to C99... yes checking for _Bool... yes checking for an ANSI C-conforming const... yes checking for inline... inline checking for size_t... yes checking whether time.h and sys/time.h may both be included... yes checking for GLsizeiptrARB... no checking for unsigned int... yes checking size of unsigned int... 4 checking for void *... yes checking size of void *... 4 checking for error_at_line... yes checking for pid_t... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking whether gcc needs -traditional... no checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for getpagesize... yes checking for working mmap... yes checking for bzero... yes checking for floor... yes checking for gettimeofday... yes checking for memset... yes checking for munmap... yes checking for pow... yes checking for sqrt... yes checking for strchr... yes checking for strdup... yes checking for strrchr... yes checking for strstr... yes checking for lqt_add_video_track... no checking for glBindProgramARB... no disabling ARB-extensions checking for glBindProgramNV... yes checking m_pd.h usability... no checking m_pd.h presence... no checking for m_pd.h... no checking whether compiler accepts "-freg-struct-return"... yes enabling "register struct return" allows to make use of FreeFrame-effects without recompiling them might break things, if you are using several different compilers checking whether compiler accepts "-O3"... yes checking whether compiler accepts "-fno-builtin"... yes checking whether compiler accepts "-falign-loops=16 -funroll- loops"... yes checking whether compiler accepts "-ffast-math"... yes checking whether compiler accepts "-mmmx"... yes checking whether compiler accepts "-msse2"... yes checking whether linker accepts "-shared -Wl,-export-dynamic"... yes checking whether linker accepts "-bundle -undefined suppress - flat_namespace"... no checking for strip... strip checking if strip is GNU strip... yes checking for dos2unix... no configure: creating ./config.status config.status: creating Make.config config.status: creating Base/configLinux.h config.status: Base/configLinux.h is unchanged
Result: Target : Gem.pd_linux Objects : Base Controls Geos Manips Nongeos Particles Pixes openGL Vertex
Configuration: Compiler : g++ CXXFLAGS : -g -O2 -freg-struct-return -O3 -fno- builtin -falign-loops=16 -funroll-loops -ffast-math -mmmx -msse2 -I/ usr/X11R6/include : -I/usr/include/ffmpeg -I/usr/include/ ffmpeg -I/usr/include/quicktime -I/usr/include/freetype2 INCLUDES : -I/usr/include/FTGL -I/usr/include/ freetype2 -I/home/pd/auto-build/pd-extended/pd/src DEFINES :
LIBS : -ldv -lmpeg -lmpeg3 -lquicktime -ljpeg - ltiff -lGLU -lGL -lXext -lXxf86vm -lXext -lX11 -ldl -lz -lm -L/usr/ X11R6/lib -lpthread -L/home/pd/auto-build/pd-extended/pd/bin : -lGLU -lGL -lfreetype -lz -lftgl - lvorbis -lvorbisenc -ldts_pic -la52 -lz -lm -L/usr/lib -lquicktime - lgthread -lz -ldl -L/usr/X11R6/lib -llcms -ltiff -lfreetype -ljasper - ljpeg -lpng -ldpstk -ldps -lXext -lXt -lSM -lICE -lX11 -lbz2 -lxml2 - lz -lm -lpthread -lMagick++ -lMagick LDFLAGS : -shared -Wl,-export-dynamic : -L/usr/X11R6/lib
Strip : strip --strip-unneeded
Install path : /usr/local
pure-data: version : 0.39
used optional libraries:
font-rendering : FTGL
image-support use ImageMagick : yes use TIFF : yes use JPEG : yes video-support use mpeg : yes use mpeg-3 : yes use QuickTime : yes use aviplay : no use ffmpeg : yes input-support use v4l : yes use ieee1394 : yes
misc using ARB-extensions : no using NV-extensions : yes using reg-struct-ret : yes
Now run make ...
make -C Base -f ../Makefile.subdir -j4 make[1]: Entering directory `/home/pd/auto-build/pd-extended/Gem/src/ Base' g++ -c -fPIC -g -O2 -freg-struct-return -O3 -fno-builtin -falign- loops=16 -funroll-loops -ffast-math -mmmx -msse2 -I/usr/X11R6/ include -I/usr/include/ffmpeg -I/usr/include/ffmpeg -I/usr/include/ quicktime -I/usr/include/freetype2 -I.. -I/usr/include/FTGL -I/ usr/include/freetype2 -I/home/pd/auto-build/pd-extended/pd/src GemGLUtil.cpp -o GemGLUtil.o g++ -c -fPIC -g -O2 -freg-struct-return -O3 -fno-builtin -falign- loops=16 -funroll-loops -ffast-math -mmmx -msse2 -I/usr/X11R6/ include -I/usr/include/ffmpeg -I/usr/include/ffmpeg -I/usr/include/ quicktime -I/usr/include/freetype2 -I.. -I/usr/include/FTGL -I/ usr/include/freetype2 -I/home/pd/auto-build/pd-extended/pd/src GemPixConvertSSE2.cpp -o GemPixConvertSSE2.o g++ -c -fPIC -g -O2 -freg-struct-return -O3 -fno-builtin -falign- loops=16 -funroll-loops -ffast-math -mmmx -msse2 -I/usr/X11R6/ include -I/usr/include/ffmpeg -I/usr/include/ffmpeg -I/usr/include/ quicktime -I/usr/include/freetype2 -I.. -I/usr/include/FTGL -I/ usr/include/freetype2 -I/home/pd/auto-build/pd-extended/pd/src GemPixDualObj.cpp -o GemPixDualObj.o g++ -c -fPIC -g -O2 -freg-struct-return -O3 -fno-builtin -falign- loops=16 -funroll-loops -ffast-math -mmmx -msse2 -I/usr/X11R6/ include -I/usr/include/ffmpeg -I/usr/include/ffmpeg -I/usr/include/ quicktime -I/usr/include/freetype2 -I.. -I/usr/include/FTGL -I/ usr/include/freetype2 -I/home/pd/auto-build/pd-extended/pd/src GemPixImageLoad.cpp -o GemPixImageLoad.o GemPixConvertSSE2.cpp: In function `void RGBA_to_UYVY_SSE2(unsigned char*, unsigned int, unsigned char*)': GemPixConvertSSE2.cpp:200: internal compiler error: in push_reload, at reload.c :1315 Please submit a full bug report, with preprocessed source if appropriate. See URL:http://gcc.gnu.org/bugs.html for instructions. For Debian GNU/Linux specific bug reporting instructions, see URL:file:///usr/share/doc/gcc-3.3/README.Bugs. make[1]: *** [GemPixConvertSSE2.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make[1]: Leaving directory `/home/pd/auto-build/pd-extended/Gem/src/ Base' make: *** [Base] Error 2
------------------------------------------------------------------------
Looking at things from a more basic level, you can come up with a more direct solution... It may sound small in theory, but it in practice, it can change entire economies. - Amy Smith
On 9/13/06, Hans-Christoph Steiner hans@eds.org wrote:
GemPixConvertSSE2.cpp:200: internal compiler error: in push_reload, at reload.c :1315 Please submit a full bug report, with preprocessed source if appropriate. See URL:http://gcc.gnu.org/bugs.html for instructions. For Debian GNU/Linux specific bug reporting instructions, see URL:file:///usr/share/doc/gcc-3.3/README.Bugs
Looks like it tells you where to file a bug report for the compiler.
Build it without SSE or try another GCC version.
On Sep 13, 2006, at 4:22 PM, chris clepper wrote:
On 9/13/06, Hans-Christoph Steiner hans@eds.org wrote:
GemPixConvertSSE2.cpp:200: internal compiler error: in push_reload, at reload.c :1315 Please submit a full bug report, with preprocessed source if appropriate. See <URL: http://gcc.gnu.org/bugs.html%3E for instructions. For Debian GNU/Linux specific bug reporting instructions, see <URL:file:///usr/share/doc/gcc-3.3/README.Bugs >
Looks like it tells you where to file a bug report for the compiler.
Build it without SSE or try another GCC version.
This means that SSE2 will be disabled on all auto-builds until there is a system-wide method of specifying target CPUs. Perhaps there is another way around it.
.hc
------------------------------------------------------------------------
I spent 33 years and four months in active military service and during that period I spent most of my time as a high class muscle man for Big Business, for Wall Street and the bankers. - General Smedley Butler
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote:
This means that SSE2 will be disabled on all auto-builds until there is a system-wide method of specifying target CPUs. Perhaps there is another way around it.
There are precisely two SSE functions in GEM - not a huge loss. You could also use a compiler that doesn't choke on the code. Your choice.
On Sep 14, 2006, at 11:08 AM, chris clepper wrote:
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote: This means that SSE2 will be disabled on all auto-builds until there is a system-wide method of specifying target CPUs. Perhaps there is another way around it.
There are precisely two SSE functions in GEM - not a huge loss. You could also use a compiler that doesn't choke on the code. Your choice.
Or it could be disabled by default, so that its easy to build and there would be much less time wasted for everyone trying to build Gem.
.hc
------------------------------------------------------------------------
Terrorism is not an enemy. It cannot be defeated. It's a tactic. It's about as sensible to say we declare war on night attacks and expect we're going to win that war. We're not going to win the war on terrorism. - retired U.S. Army general, William Odom
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote:
Or it could be disabled by default, so that its easy to build and there would be much less time wasted for everyone trying to build Gem.
I don't think it is unreasonable to have requirement for a compiler that is not busted in order to build GEM.
On Sep 14, 2006, at 1:09 PM, chris clepper wrote:
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote:
Or it could be disabled by default, so that its easy to build and there would be much less time wasted for everyone trying to build Gem.
I don't think it is unreasonable to have requirement for a compiler that is not busted in order to build GEM.
That's the compiler that's used by Debian/stable, so I think its reasonable thing to support. Unless someone knows a better way to support Debian/stable.
.hc
------------------------------------------------------------------------
News is what people want to keep hidden and everything else is publicity. - Bill Moyers
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote:
That's the compiler that's used by Debian/stable, so I think its reasonable thing to support.
Not if the compiler doesn't work properly.
Unless someone knows a better way to support Debian/stable.
apt-get install non-busted-compiler
On Thu, 14 Sep 2006, chris clepper wrote:
On 9/14/06, Hans-Christoph Steiner hans@eds.org wrote:
Or it could be disabled by default, so that its easy to build and there would be much less time wasted for everyone trying to build Gem.
I don't think it is unreasonable to have requirement for a compiler that is not busted in order to build GEM.
When it comes to SIMD, most GCC compilers used in the last few years have had a bunch of problems. Pick a random Linux computer now and chances are that the GCC installed on it is broken about SIMD. This includes some popular 4.x releases. This makes your requirement less reasonable than if busted compilers were rare.
That's why I instruct people to build pd devel_0_39 using the simd=0 option, else it most likely will spit out "Arithmetic Exception (core dumped)" during compilation, on most any Linux machine I've had access to.
OTOH, some people find it very normal to build GCC themselves... I don't, and I've had trouble with that: apart from being a big program, long to compile, I don't know how to make several libstdc++ versions _not_ conflict with each other.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montréal QC Canada
Hans-Christoph Steiner wrote:
Build it without SSE or try another GCC version.
This means that SSE2 will be disabled on all auto-builds until there is
how come?
a system-wide method of specifying target CPUs. Perhaps there is another way around it.
./configure --disable-sse2
apart from that, you might really want to send a bug-report to the gcc-developers... (i don't have any debian/stable systems here to do it myself, and i don't want to go back there just to trigger a bug)
mgf.adsr IOhannes
On Sep 15, 2006, at 6:45 AM, IOhannes m zmoelnig wrote:
Hans-Christoph Steiner wrote:
Build it without SSE or try another GCC version.
This means that SSE2 will be disabled on all auto-builds until there is
how come?
a system-wide method of specifying target CPUs. Perhaps there is another way around it.
Your answer is in the above line. Feel free to implement something that will manage building for different CPUs for the whole shebang. That would be very nice and probably not too hard. Its mostly already there for the Pd-extended build stuff. It would mostly be a matter of sending the write gcc options to the pd and Gem builds.
./configure --disable-sse2
apart from that, you might really want to send a bug-report to the gcc-developers... (i don't have any debian/stable systems here to do it myself, and i don't want to go back there just to trigger a bug)
The gcc bug submission process is onerous, and since I don't know that code base, it would probably take me 12 hours to figure everything out.
How about having --disable-sse2 as the default? It would save a lot of people a lot of time on support requests if ./configure && make compiled Gem on the bulk of systems. Plus it would make incorporating Gem in the auto-builds much cleaner and less error prone. Devs who need custom setups can easily put ./configure -- enable-foo --enable-bar in a little script, for example.
.hc
------------------------------------------------------------------------
Man has survived hitherto because he was too ignorant to know how to realize his wishes. Now that he can realize them, he must either change them, or perish. -William Carlos Williams
Hans-Christoph Steiner wrote:
On Sep 15, 2006, at 6:45 AM, IOhannes m zmoelnig wrote:
Hans-Christoph Steiner wrote:
Build it without SSE or try another GCC version.
This means that SSE2 will be disabled on all auto-builds until there is
how come?
a system-wide method of specifying target CPUs. Perhaps there is another way around it.
Your answer is in the above line. Feel free to implement something that will manage building for different CPUs for the whole shebang. That would be very nice and probably not too hard. Its mostly already there for the Pd-extended build stuff. It would mostly be a matter of sending the write gcc options to the pd and Gem builds.
./configure --disable-sse2
i still don't understand, what's the problem with disabling sse2 in the autobuild-scripts for Gem alone (you call Gem's configure anyhow)
(at least i don't see any answer in "[...] until there is a system-wide mehtod of specifying target CPUs. Perhaps there is another way around it")
mfg.dra IOhannes
On Sep 15, 2006, at 2:27 PM, IOhannes m zmoelnig wrote:
Hans-Christoph Steiner wrote:
On Sep 15, 2006, at 6:45 AM, IOhannes m zmoelnig wrote:
Hans-Christoph Steiner wrote:
Build it without SSE or try another GCC version.
This means that SSE2 will be disabled on all auto-builds until there is
how come?
a system-wide method of specifying target CPUs. Perhaps there is another way around it.
Your answer is in the above line. Feel free to implement something that will manage building for different CPUs for the whole shebang. That would be very nice and probably not too hard. Its mostly already there for the Pd-extended build stuff. It would mostly be a matter of sending the write gcc options to the pd and Gem builds.
./configure --disable-sse2
i still don't understand, what's the problem with disabling sse2 in the autobuild-scripts for Gem alone (you call Gem's configure anyhow)
(at least i don't see any answer in "[...] until there is a system- wide mehtod of specifying target CPUs. Perhaps there is another way around it")
It would be nice if there was just one line in packages/Makefile that just ran:
./configure --with-pd=/path/to/pd
As it is now, there has to be a separate target for each platform since "./configure" alone doesn't work, and the options to get it working are different on each platform. I.e. Apple needs --without- ImageMagick, Debian needs --disable-sse2, etc. Its ugly and ugliness seems to always lead to problems down the line. It works for now tho.
Also, having the Pd-extended build system just call "./configure" without extra options would mean that you could change the default build options for the auto-builders without having to touch packages/ Makefile. You would just change the defaults in configure.ac.
.hc
------------------------------------------------------------------------
Man has survived hitherto because he was too ignorant to know how to realize his wishes. Now that he can realize them, he must either change them, or perish. -William Carlos Williams