Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
howtos:pic32mx_tools_on_solaris [2014/01/07 20:34]
admin [Deploy binutils 2.22]
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 PIC32MX gcc toolchain on Solaris ====== ====== 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 ===== ===== binutils 2.22 =====
   * prepare working area   * prepare working area
Line 19: 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>​
howtos/pic32mx_tools_on_solaris.1389123262.txt.gz ยท Last modified: 2014/01/07 20:34 by admin
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0