Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
howtos:pic32mx_tools_on_solaris [2012/09/16 11:41] admin |
howtos:pic32mx_tools_on_solaris [2023/11/29 17:44] (current) admin [Stage 3 - deploy gcc and g++ with newlib suport] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Deploy binutils 2.22 ====== | + | ====== Deploy PIC32MX gcc toolchain on Solaris ====== |
+ | * The toolchain **binutils-2.36**, **gcc-10.3.0**, **newlib-1.4** no longer works after upgrade from **SRU62** to **SRU63**, since **libisl** was upgraded from version **15** to version **23**. Re-compilation with libisl 23 fixed the problem. | ||
+ | * The toolchain no longer works on s11u4sru37 due to missing /usr/lib/libmpc.so.2 and /usr/lib/libmpfr.so.1 libraries - /opt/mipsel/libexec/gcc/mipsel/4.5.2/cc1 depends on them. Reason being the libraries were upgraded to /usr/lib/limpc.so.3 and /usr/lib/libmpfr.so.4 respectively. | ||
+ | To workaround the issue, missing libraries were copied from s11u4sru30 where both old as well as new versions of those libraries are available. | ||
+ | Also, new tool chain has been built based on binutils 2.36, gcc 10.3.0, newlib 4.1.0. | ||
+ | ===== binutils 2.36 ===== | ||
+ | * start building new one | ||
+ | <code> | ||
+ | $ export PATH=/usr/gnu/bin:$PATH | ||
+ | $ mkdir ~/projects/gcc-mips-10.3.0/ | ||
+ | $ cd ~/projects/gcc-mips-10.3.0/ | ||
+ | $ wget http://ftp.gnu.org/gnu/binutils/binutils-2.36.tar.gz -O /tmp/binutils-2.36.tar.gz | ||
+ | $ tar xvpf /tmp/binutils-2.36.tar.gz | ||
+ | $ mkdir build-binutils-el-2.36 | ||
+ | $ cd build-binutils-el-2.36 | ||
+ | $ ../binutils-2.36/configure --target=mipsel --prefix=/opt/mipsel | ||
+ | $ make | ||
+ | $ sudo make install | ||
+ | </code> | ||
+ | |||
+ | ===== binutils 2.37 ===== | ||
+ | * man pages were not built - instead use binutils 2.36 | ||
+ | |||
+ | * save existing toolchain and prepare for building new one | ||
+ | <code> | ||
+ | $ mv ~/projects/gcc-mips/ ~/projects/gcc-mips-ok/ | ||
+ | # mv /data/apps-local/mipsel /data/apps-local/mipsel-ok | ||
+ | # mkdir /data/apps-local/mipsel | ||
+ | </code> | ||
+ | * start building new one | ||
+ | <code> | ||
+ | $ export PATH=/usr/gnu/bin:$PATH | ||
+ | $ mkdir ~/projects/gcc-mips/ | ||
+ | $ cd ~/projects/gcc-mips/ | ||
+ | $ wget http://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.gz -O /tmp/binutils-2.37.tar.gz | ||
+ | $ tar xvpf /tmp/binutils-2.37.tar.gz | ||
+ | $ mkdir build-binutils-el | ||
+ | $ cd build-binutils-el | ||
+ | $ ../binutils-2.37/configure --target=mipsel --prefix=/opt/mipsel | ||
+ | $ make | ||
+ | $ sudo make install | ||
+ | </code> | ||
+ | ===== gcc 10.3.0 with newlib 4.1.0 ===== | ||
+ | * prepare working area | ||
+ | <code> | ||
+ | $ cd ~/projects/gcc-mips-10.3.0/ | ||
+ | $ mkdir build-gcc-el-10.3.0 | ||
+ | $ mkdir build-newlib-el-4.1.0 | ||
+ | </code> | ||
+ | * download and unpack | ||
+ | <code> | ||
+ | $ wget http://ftp.gnu.org/gnu/gcc/gcc-10.3.0/gcc-10.3.0.tar.gz -O /tmp/gcc-10.3.0.tar.gz | ||
+ | $ tar xvpf /tmp/gcc-10.3.0.tar.gz | ||
+ | $ wget ftp://sourceware.org/pub/newlib/newlib-4.1.0.tar.gz -O /tmp/newlib-4.1.0.tar.gz | ||
+ | $ tar xvpf /tmp/newlib-4.1.0.tar.gz | ||
+ | </code> | ||
+ | * build and install (tools will be installed into /opt/mipsel/ directory). Building gcc with newlib is done in three steps. | ||
+ | ===== Stage 1 - build bootstrap gcc ===== | ||
+ | <code> | ||
+ | $ cd build-gcc-el-10.3.0 | ||
+ | $ ../gcc-10.3.0/configure --target=mipsel --prefix=/opt/mipsel-10.3.0 --without-headers --with-gnu-as --with-gnu-ld --with-newlib --enable-languages=c --with-local-prefix=/opt/mipsel --with-native-system-header-dir=/opt/mipsel/include/ --disable-nls --disable-shared --enable-multilib --disable-decimal-float -disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath | ||
+ | $ make | ||
+ | $ sudo make install | ||
+ | </code> | ||
+ | * **--enable-multilib** - builds several variants of libraries (big-endian, little-endian hard-float and soft-float). Default is little-endian hard-float. | ||
+ | <code> | ||
+ | $ /opt/mipsel-10.3.0/bin/mipsel-gcc -print-multi-lib | ||
+ | .; | ||
+ | soft-float;@msoft-float | ||
+ | eb;@EB | ||
+ | soft-float/eb;@msoft-float@EB | ||
+ | $ | ||
+ | </code> | ||
+ | ===== Stage 2 - deploy newlib ===== | ||
+ | * newlib requires mips-cc | ||
+ | <code> | ||
+ | # cd /opt/mipsel-10.3.0/bin | ||
+ | # ln -s mipsel-gcc mipsel-cc | ||
+ | </code> | ||
+ | * build and install | ||
+ | <code>$ export PATH=/opt/mipsel-10.3.0/bin:$PATH | ||
+ | $ cd ~/projects/gcc-mips-10.3.0/build-newlib-el-4.1.0 | ||
+ | $ ../newlib-4.1.0/configure --target=mipsel --prefix=/opt/mipsel-10.3.0 | ||
+ | $ make ; echo $? | ||
+ | ... | ||
+ | mipsel-cc -B/home/dambi/projects/gcc-mips/build-newlib-el/mipsel/newlib/ -isystem /home/dambi/projects/gcc-mips/build[27/1919] | ||
+ | l/mipsel/newlib/targ-include -isystem /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include -B/home/dambi/projects/gcc-mips/build-newlib-el/mipsel/libgloss/mips -L/home/dambi/projects/gcc-mips/build-newlib-el/mipsel/libgloss/libnosys -L/home/d | ||
+ | ambi/projects/gcc-mips/newlib-4.1.0/libgloss/mips -DPACKAGE_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\" -DPACKAGE_VERSION= | ||
+ | \"4.1.0\" -DPACKAGE_STRING=\"newlib\ 4.1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I. -I../../../../../newlib-4.1.0/new | ||
+ | lib/libc/stdlib -fno-builtin -DMISSING_SYSCALL_NAMES -DHAVE_INIT_FINI -g -O2 -c -o lib_a-dtoa.o `test -f 'dtoa.c' || echo '../../../../../newlib-4.1.0/newlib/libc/stdlib/'`dtoa.c | ||
+ | In file included from ../../../../../newlib-4.1.0/newlib/libc/stdlib/mprec.h:29, | ||
+ | from ../../../../../newlib-4.1.0/newlib/libc/stdlib/dtoa.c:33: | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:152:2: error: #error "double and long double are the s | ||
+ | ame size but LDBL_EQ_DBL is not defined" | ||
+ | 152 | #error "double and long double are the same size but LDBL_EQ_DBL is not defined" | ||
+ | | ^~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:195:3: error: unknown type name '__ieee_ext_field_type | ||
+ | ' | ||
+ | 195 | __ieee_ext_field_type ext_fracl : EXT_FRACLBITS; | ||
+ | | ^~~~~~~~~~~~~~~~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:195:38: error: 'EXT_FRACLBITS' undeclared here (not in | ||
+ | a function); did you mean 'EXT_FRACBITS'? | ||
+ | 195 | __ieee_ext_field_type ext_fracl : EXT_FRACLBITS; | ||
+ | | ^~~~~~~~~~~~~ | ||
+ | | EXT_FRACBITS | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:195:26: error: bit-field 'ext_fracl' width not an inte | ||
+ | ger constant | ||
+ | 195 | __ieee_ext_field_type ext_fracl : EXT_FRACLBITS; | ||
+ | | ^~~~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:196:3: error: unknown type name '__ieee_ext_field_type | ||
+ | ' | ||
+ | 196 | __ieee_ext_field_type ext_frach : EXT_FRACHBITS; | ||
+ | | ^~~~~~~~~~~~~~~~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:196:38: error: 'EXT_FRACHBITS' undeclared here (not in | ||
+ | a function); did you mean 'EXT_FRACBITS'? | ||
+ | 196 | __ieee_ext_field_type ext_frach : EXT_FRACHBITS; | ||
+ | | ^~~~~~~~~~~~~ | ||
+ | | EXT_FRACBITS | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:196:26: error: bit-field 'ext_frach' width not an inte | ||
+ | ger constant | ||
+ | 196 | __ieee_ext_field_type ext_frach : EXT_FRACHBITS; | ||
+ | | ^~~~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:197:3: error: unknown type name '__ieee_ext_field_type | ||
+ | ' | ||
+ | 197 | __ieee_ext_field_type ext_exp : EXT_EXPBITS; | ||
+ | | ^~~~~~~~~~~~~~~~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:197:38: error: 'EXT_EXPBITS' undeclared here (not in a | ||
+ | function); did you mean 'EXT_EXP_BIAS'? | ||
+ | 197 | __ieee_ext_field_type ext_exp : EXT_EXPBITS; | ||
+ | | ^~~~~~~~~~~ | ||
+ | | EXT_EXP_BIAS | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:197:26: error: bit-field 'ext_exp' width not an integer constant | ||
+ | 197 | __ieee_ext_field_type ext_exp : EXT_EXPBITS; | ||
+ | | ^~~~~~~ | ||
+ | /home/dambi/projects/gcc-mips/newlib-4.1.0/newlib/libc/include/ieeefp.h:198:3: error: unknown type name '__ieee_ext_field_type' | ||
+ | 198 | __ieee_ext_field_type ext_sign : 1; | ||
+ | | ^~~~~~~~~~~~~~~~~~~~~ | ||
+ | make[5]: *** [Makefile:734: lib_a-dtoa.o] Error 1 | ||
+ | make[5]: Leaving directory '/data/smb/users/dambi/projects/gcc-mips/build-newlib-el/mipsel/newlib/libc/stdlib' | ||
+ | make[4]: *** [Makefile:683: all-recursive] Error 1 | ||
+ | make[4]: Leaving directory '/data/smb/users/dambi/projects/gcc-mips/build-newlib-el/mipsel/newlib/libc' | ||
+ | make[3]: *** [Makefile:641: all-recursive] Error 1 | ||
+ | make[3]: Leaving directory '/data/smb/users/dambi/projects/gcc-mips/build-newlib-el/mipsel/newlib' | ||
+ | make[2]: *** [Makefile:452: all] Error 2 | ||
+ | make[2]: Leaving directory '/data/smb/users/dambi/projects/gcc-mips/build-newlib-el/mipsel/newlib' | ||
+ | make[1]: *** [Makefile:8492: all-target-newlib] Error 2 | ||
+ | make[1]: Leaving directory '/data/smb/users/dambi/projects/gcc-mips/build-newlib-el' | ||
+ | make: *** [Makefile:879: all] Error 2 | ||
+ | 2 | ||
+ | </code> | ||
+ | |||
+ | * **LDBL_EQ_DBL** not defined in some header files | ||
+ | <code> | ||
+ | $ pwd | ||
+ | ~/projects/gcc-mips-10.3.0/build-newlib-el-4.1.0 | ||
+ | $ ggrep -Rl LDBL_EQ ./ | ||
+ | ./mipsel/newlib/targ-include/newlib.h | ||
+ | ./mipsel/newlib/newlib.h | ||
+ | ./mipsel/soft-float/newlib/targ-include/newlib.h | ||
+ | ./mipsel/soft-float/newlib/config.log | ||
+ | ./mipsel/soft-float/newlib/config.status | ||
+ | ./mipsel/soft-float/newlib/newlib.h | ||
+ | ./mipsel/soft-float/eb/newlib/newlib.h | ||
+ | ./mipsel/soft-float/eb/newlib/targ-include/newlib.h | ||
+ | ./mipsel/soft-float/eb/newlib/config.log | ||
+ | ./mipsel/soft-float/eb/newlib/config.status | ||
+ | ./mipsel/eb/newlib/config.log | ||
+ | ./mipsel/eb/newlib/targ-include/newlib.h | ||
+ | ./mipsel/eb/newlib/newlib.h | ||
+ | ./mipsel/eb/newlib/config.status | ||
+ | </code> | ||
+ | * define **LDBL_EQ_DBL** in files where it is not defined | ||
+ | <code> | ||
+ | $ vim -p ./mipsel/newlib/targ-include/newlib.h ./mipsel/newlib/newlib.h | ||
+ | $ make ; echo $? | ||
+ | $ sudo make install | ||
+ | </code> | ||
+ | |||
+ | ===== Stage 3 - deploy gcc and g++ with newlib suport ===== | ||
+ | <code> | ||
+ | $ cd ~/projects/gcc-mips-10.3.0/build-gcc-el-10.3.0 | ||
+ | $ ../gcc-10.3.0/configure --target=mipsel --prefix=/opt/mipsel-10.3.0 --with-gnu-as --with-gnu-ld --with-newlib --enable-languages=c,c++ --with-local-prefix=/opt/mipsel --with-native-system-header-dir=/opt/mipsel/include --disable-nls --disable-shared --enable-multilib --disable-decimal-float -disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath | ||
+ | $ make -j 10 ; echo $? | ||
+ | $ sudo make install | ||
+ | </code> | ||
+ | ===== binutils 2.22 ===== | ||
* prepare working area | * prepare working area | ||
<code> | <code> | ||
Line 18: | Line 203: | ||
$ sudo make install | $ sudo make install | ||
</code> | </code> | ||
- | ====== Deploy gcc 4.5.2 with newlib 1.20.0 ====== | + | ===== gcc 4.5.2 with newlib 1.20.0 ===== |
* prepare working area | * prepare working area | ||
<code> | <code> | ||
Line 27: | Line 212: | ||
* download and unpack | * download and unpack | ||
<code> | <code> | ||
- | $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.gz /tmp/gcc-4.5.2.tar.gz | + | $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.gz -O /tmp/gcc-4.5.2.tar.gz |
$ tar xvpf /tmp/gcc-4.5.2.tar.gz | $ tar xvpf /tmp/gcc-4.5.2.tar.gz | ||
$ wget ftp://sources.redhat.com/pub/newlib/newlib-1.20.0.tar.gz -O /tmp/newlib-1.20.0.tar.gz | $ wget ftp://sources.redhat.com/pub/newlib/newlib-1.20.0.tar.gz -O /tmp/newlib-1.20.0.tar.gz | ||
Line 40: | Line 225: | ||
$ sudo make install | $ sudo make install | ||
</code> | </code> | ||
- | * **--enable-multilib** - builds several variants of libraries (single-float, big-endian, softfloat). 'gcc -print-multi-lib' prints list of built libraries | + | * **--enable-multilib** - builds several variants of libraries (big-endian, little-endian hard-float and soft-float). Default is little-endian hard-float. |
+ | <code> | ||
+ | $ /opt/mipsel/bin/mipsel-gcc -print-multi-lib | ||
+ | .; | ||
+ | soft-float;@msoft-float | ||
+ | eb;@EB | ||
+ | soft-float/eb;@msoft-float@EB | ||
+ | $ | ||
+ | </code> | ||
===== Stage 2 - deploy newlib ===== | ===== Stage 2 - deploy newlib ===== | ||
* build and install | * build and install |