Windows XP 2002 for the Itanium: Unbridled rage

jandeboevrie2 pts0 comments

Windows XP 2002 for the Itanium: Unbridled rage | Virtually Fun

-->

--><br>--><br>--><br>-->

Skip to primary content

Windows XP ia64 build 2600 in all it’s glory<br>This is exciting news, there is a fork of Qemu that has workable Itanium Merced emulation, and it’s good enough to run Windows XP/2003! Enter Malte Kuhlmann ‘s Qemu fork of syunnPC‘s AI Itanium infused Qemu fork.

I’m sure at some point there will be some kind of merger. As always things move fast when they are interesting.

At any rate, I had nothing but incredible issues getting this to build. I should have written the steps down for the Qemu Alpha for that can run Alph64 Windows! … .however I didn’t so I kind of lost (hopefully temperarily) the recipies needed.

Instead, I’m jumping back to my mac mini, as of course macOS is just enough UNIX to be useful but mainstream enough to have real application. And part of the reason is that I wanted to build the firmware as I had a feeling that this was some important ‘lockstep’ thing I was missing.

Building cross compilers isn’t that new for me or this blog. As a matter of fact, I’ve got two at the moment from other various projects:

jsteve@Jasons-Mac-mini gcc % /usr/local/os2/bin/i386-pc-linux-gnuaout-gcc -v<br>Reading specs from /usr/local/os2/lib/gcc-lib/i386-pc-linux-gnuaout/2.8.1/specs<br>gcc version 2.8.1<br>jsteve@Jasons-Mac-mini gcc % /usr/local/i586-linux2/bin/i586-linux-gcc -v<br>Reading specs from /usr/local/i586-linux2/lib/gcc-lib/i586-linux/2.8.1/specs<br>gcc version 2.8.1<br>Since GCC 2.8.1 seems to run ‘okay’ as a macOS arm64 binary to cross compile to the i386… But that’s not for here. Since this is a ‘modern’ build, there was no need for any funny business. Things just worked. Surprisngly, I know. Obviously for people years later this won’t hold true.

Binutils

Nothing much to see or say, just used binutils 2.46.0, and it configured/built out of the box. Nice.

../binutils-2.46.0/configure --target=ia64-linux-gnu --prefix=/usr/local/ia64-linux-gnu<br>GCC

This is a bit weird as, the Itanium is not a dying platform, but a very dead one. Although thanks to a single user, René Rebe keeping the flame alive, I just chose to use the mentioned version, 15 to see if it still works. Spoiler, it did!

Building on macOS also means I do have homebrew installed, and that instead of building so many dependancies from hand, I could just brew the dependancies for GCC. That did make configuring it a little more involved.

../gcc-15.3.0/configure \<br>--target=ia64-linux-gnu \<br>--prefix=/usr/local/ia64-linux-gnu \<br>--disable-bootstrap \<br>--disable-multilib \<br>--enable-languages=c \<br>--with-gmp=/opt/homebrew \<br>--with-mpfr=/opt/homebrew \<br>--with-mpc=/opt/homebrew \<br>CPPFLAGS="-I/opt/homebrew/include" \<br>LDFLAGS="-L/opt/homebrew/lib"<br>There is some weird duplicate define of fdopen that throws off the build, thanks to zlib. I know wtf.

In file included from ../../gcc-15.3.0/zlib/zutil.c:10:<br>In file included from ../../gcc-15.3.0/zlib/gzguts.h:21:<br>In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h:61:<br>/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_stdio.h:322:7: error:<br>expected ')'<br>322 | FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, _...<br>| ^<br>../../gcc-15.3.0/zlib/zutil.h:140:33: note: expanded from<br>macro 'fdopen'<br>140 | # define fdopen(fd,mode) NULL /* No fdopen() */<br>The fix, of course is to comment out line 140 of zutil.h

After that, it’ll mostly build, (remember to have the binutils binary in your path!<br>export PATH=/usr/local/ia64-linux-gnu/bin:$PATH )

It’ll complain about missing pthread as it want’s to build all the Linux stuff, but we don’t care.

In file included from ../../../gcc-15.3.0/libgcc/gthr.h:157,<br>from ../../../gcc-15.3.0/libgcc/libgcov-interface.c:27:<br>./gthr-default.h:35:10: fatal error: pthread.h: No such file or directory<br>35 | #include<br>| ^~~~~~~~~~~<br>compilation terminated.<br>I did have to manually copy libgcc.a however.

cp ia64-linux-gnu/libgcc/libgcc.a /usr/local/ia64-linux-gnu/ia64-linux-gnu/lib/libgcc.a'.<br>Then just cd to the gcc directory and run a make install.

And with that, I’ve now got an Itanium cross compiler, to build the firmware!.

jsteve@Jasons-Mac-mini gcc % /usr/local/ia64-linux-gnu/bin/ia64-linux-gnu-gcc -v<br>Using built-in specs.<br>COLLECT_GCC=/usr/local/ia64-linux-gnu/bin/ia64-linux-gnu-gcc<br>COLLECT_LTO_WRAPPER=/usr/local/ia64-linux-gnu/libexec/gcc/ia64-linux-gnu/15.3.0/lto-wrapper<br>Target: ia64-linux-gnu<br>Configured with: ../gcc-15.3.0/configure --target=ia64-linux-gnu --prefix=/usr/local/ia64-linux-gnu --disable-bootstrap --disable-multilib --enable-languages=c --with-gmp=/opt/homebrew --with-mpfr=/opt/homebrew --with-mpc=/opt/homebrew CPPFLAGS=-I/opt/homebrew/include LDFLAGS=-L/opt/homebrew/lib<br>Thread model: posix<br>Supported LTO compression algorithms: zlib<br>gcc version 15.3.0 (GCC)<br>Neat!

Qemu

I’ve defiantly homebrewed some dependencies in the past, but I’ll be damned if I know what exactly.

First get the source (as of this...

linux ia64 local homebrew from build

Related Articles