Skip to contentSkip to conversation

recipe to build gcc3.0 as a cross-compiler for NUE

Linux-ia64 Stephane Eranian 1 participant 1 message Jun 22, 2001

lore
Share & tools
lore
#0 lore raw

Hi,

Here is the recipe to build binutils (2.11) and gcc-3.0 release as cross compile tools for NUE.

IMPORTANT:
- the recipe assumes you have installed the latest release of NUE (dated May 2001). More specifically, you need to have nue-fs-1.2

- The recipe will replace your default gcc-2.96 with gcc-3.0. So careful if you want to roll back.

- So far it has been tested for compiling kernels. No tests have been done to see if it works for applications.

- Please read carefully the recipe, especially the step involving xlimits.h

Enjoy,

+--------------------------------------------------------------------+
| Ste'phane ERANIAN                       | Email [email protected] |
| Hewlett-Packard Laboratories            |                          |
| 1501, Page Mill Road MS 1U-15           |                          |
| Palo  Alto, CA 94303-096                |                          |
| USA                                     |                          |
| Tel : (650) 857-7174                    |                          |
| Fax : (650) 857-5548                    |                          |
+--------------------------------------------------------------------+
		---------------------------------------------------
		Recipe to build gcc-3.0 as a cross-compiler for NUE
		---------------------------------------------------
			  (c) 2001 Hewlett-Packard Company

Pre-requirements:
- We suppose you have installed the latest release of NUE and especially the nue-fs-1.2 RPM

- have access to an installed NUE filesystem specifically /nue/usr/include)

- use a Linux/x86 host that runs with GLIBC-2.1. RH7.1 does not qualify here. But RH7 or RH6.x should work.

- have the gcc-3.0 release and latest binutils (like 2.11.90) tar files.

- you will need to install inside NUE, therefore need root privilege

Configuration:
- we suppose a NUE installation is accessible in /nue

- we suppose that the directory used to compile binutils and gcc is also visible inside NUE. This means that it must all directories must be created with a path that begins with /nue.

For instance, I can unpack and build the toolchain in /nue/home/eranian/toolchain and when I enter NUE, the directory is accessible at /home/eranian/toolchain.

1/ BUILDING BINUTILS

- you must start with the binutils because they are needed by gcc3 later on.

- untar the binutils in a good directory for you. We suppose this creates a directory called binutils.

- create a directory called binutils-build. It is not recommended to build the binutils in the directory where you have the sources.

- cd binutils-build

- execute the configure command as follows:

% ../binutils/configure --target=ia64-hp-linux --prefix=/usr

- type make

- once it is over, you need to remake ld for shared library support:

% cd ld
% make clean
% make LIB_PATH=/lib:/usr/lib:/usr/local/lib/:/usr/ia64-hp-linux/lib % cd ..

- enter NUE (we suppose you will stay in the same directory, in this case)

- as root make install:

# make install

2/ BUILDING GCC3 as a cross-compiler for NUE

- untar gcc3 source code. We suppose this creates a directory called gcc-3.0

- edit gcc-3.0/gcc/config/i386/xm-i386.h and add the following 2 lines:

#define HOST_BITS_PER_WIDE_INT 64
#define HOST_WIDE_INT long long

IMPORTANT: this is a gross hack that it meant to enable the cross compile from a 32bits host to a 64bits target. This hack is very specific to building for Linux/ia64 target and MUST be removed from the file, should the source code be used for other purposes.

- create a build directory called gcc-build. gcc3.0 does not build from the directory where the sources are unpacked.

- cd gcc-build

- execute the configure command as follows:

% ../gcc-3.0/configure --target=ia64-hp-linux --prefix=/usr --enable-threads=posix

- type make

- It fails with:

gcc-build/gcc/xgcc -B/home/eranian/toolchain/gcc-build/gcc/ -B/usr/ia64-hp-linux/bin/ -B/usr/ia64-hp-linux/lib/ -isystem /usr/ia64-hp-linux/include -c -o crtbegin.o -x assembler-with-cpp ../../gcc-3.0/gcc/config/ia64/crtbegin.asm
as: unrecognized option `-x'
make[1]: *** [crtbegin.o] Error 1
make[1]: Leaving directory `/home/eranian/toolchain/gcc-build/gcc'
make: *** [all-gcc] Error 2

- cd gcc

- type the following:

% ln -s /nue/usr/bin/ia64-hp-linux-as as

- Remove the generated xlimits.h. It is not the correct one. It will be regenerated correctly later.

% rm xlimits.h

- stay in the gcc directory and type make again

% make TCFLAGS="-g -O2 -I/nue/usr/include" SYSTEM_HEADER_DIR=/nue/usr/include

- It will compile a few files and then die as follows:

make[1]: ia64-hp-linux-ar: Command not found

- Type the following:

% ln -s /nue/usr/bin/ia64-hp-linux-ar .
% ln -s /nue/usr/bin/ia64-hp-linux-nm .

- restart make:
% make TCFLAGS="-g -O2 -I/nue/usr/include" SYSTEM_HEADER_DIR=/nue/usr/include

- It will die again saying:

collect2: cannot find `ld'

- Create the symlink:

% ln -s /nue/usr/bin/ia64-hp-linux-ld ld

- Type make:
% make TCFLAGS="-g -O2 -I/nue/usr/include" SYSTEM_HEADER_DIR=/nue/usr/include

- It will stop again:

gcc-build/gcc/ld: cannot open crti.o: No such file or directory

- Create additional symlinks

% ln -s /nue/usr/lib/crti.o .
% ln -s /nue/usr/lib/crtn.o .
% ln -s /nue/usr/lib/libc.a .

- Type make again to restart:
% make TCFLAGS="-g -O2 -I/nue/usr/include" SYSTEM_HEADER_DIR=/nue/usr/include

- it will stop again:

as: unrecognized option `-Qy'

- remove as and ld (which we created earlier)

% rm as ld

- continue with make

% make TCFLAGS="-g -O2 -I/nue/usr/include" SYSTEM_HEADER_DIR=/nue/usr/include

- You should go all the way to the end now

- enter NUE (we suppose you will stay in the gcc directory)

- as root make install:

# make install

IMPORTANT: This will partially replace the default 2.96 install. However the /usr/lib/gcc-lib/ia64-hp-linux/2.96-ia64-000717 is preserved. Unfortunately, there is no easy way to make a non-destructive install.