This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: Error Building Newlib for arm-none-eabi
On 2018-02-21 00:00, R0b0t1 wrote:
> On Tue, Feb 20, 2018 at 11:25 PM, Brian Inglis
> <Brian.Inglis@systematicsw.ab.ca> wrote:
>> On 2018-02-20 17:33, R0b0t1 wrote:
>>> On Mon, Feb 19, 2018 at 10:44 PM, R0b0t1 <r030t1@gmail.com> wrote:
>>>> On Mon, Feb 19, 2018 at 8:33 PM, R0b0t1 <r030t1@gmail.com> wrote:
>>>>> I am trying to build for arm-none-eabi with GCC.
>>>>> ../../source/${dname}/configure \
>>>>> --target=${TARGET} \
>>>>> --prefix=`realpath ../../${DIR_PREFIX}` \
>>>>> --disable-newlib-supplied-syscalls \
>>>>> --enable-newlib-reent-small \
>>>>> --disable-newlib-fvwrite-in-streamio \
>>>>> --disable-newlib-fseek-optimization \
>>>>> --disable-newlib-wide-orient \
>>>>> --disable-newlib-unbuf-stream-opt \
>>>>> --enable-newlib-global-atexit \
>>>>> --enable-newlib-retargetable-locking \
>>>>> --disable-nls
>>>>> make -j"${NCPU}" -l"${NCPU}"
>>>>> make install
>>>>> Gives:
>>>>> In file included from
>>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>>> from
>>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>>> from
>>>>> ../../../../../../source/newlib-3.0.0/newlib/libc/stdio/gets.c:62:
>>>>> ../../../../../../source/newlib-3.0.0/newlib/libc/stdio/gets.c:96:1:
>>>>> error: expected declaration specifiers or ‘...’ before
>>>>> ‘__builtin_object_size’
>>>>> gets (char *buf)
>>>>> ^
>>>>> I attempted to search for the error, but did not get much of anywhere.
>>>>> The GCC mailing list informed me that building all components
>>>>> separately may not be the best idea, but I am looking to copy existing
>>>>> build systems and to integrate the code into those build systems. In
>>>>> which case separate component builds are more convenient, at least for
>>>>> now.
>>>> Some testing with a default configuration, just setting --target,
>>>> leads to more of the same:
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800:0,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/sprintf.c:572:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/sprintf.c:606:1:
>>>> error: expected declaration specifiers or ‘...’ before numeric
>>>> constant
>>>> sprintf (char *__restrict str,
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>> from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/sprintf.c:572:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/sprintf.c:606:1:
>>>> error: expected declaration specifiers or ‘...’ before
>>>> ‘__builtin_object_size’
>>>> sprintf (char *__restrict str,
>>>> ^
>>>> make[8]: *** [Makefile:1222: lib_a-sprintf.o] Error 1
>>>> make[8]: *** Waiting for unfinished jobs....
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>> from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/gets.c:62:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/gets.c:96:1:
>>>> error: expected declaration specifiers or ‘...’ before
>>>> ‘__builtin_object_size’
>>>> gets (char *buf)
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800:0,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/snprintf.c:22:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/snprintf.c:66:1:
>>>> error: expected declaration specifiers or ‘...’ before numeric
>>>> constant
>>>> snprintf (char *__restrict str,
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>> from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/snprintf.c:22:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/snprintf.c:66:1:
>>>> error: expected declaration specifiers or ‘...’ before
>>>> ‘__builtin_object_size’
>>>> snprintf (char *__restrict str,
>>>> ^
>>>> make[8]: *** [Makefile:1096: lib_a-gets.o] Error 1
>>>> make[8]: *** [Makefile:1216: lib_a-snprintf.o] Error 1
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800:0,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsprintf.c:25:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsprintf.c:34:1:
>>>> error: expected declaration specifiers or ‘...’ before numeric
>>>> constant
>>>> vsprintf (char *__restrict str,
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>> from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsprintf.c:25:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsprintf.c:34:1:
>>>> error: expected declaration specifiers or ‘...’ before
>>>> ‘__builtin_object_size’
>>>> vsprintf (char *__restrict str,
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800:0,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsnprintf.c:25:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsnprintf.c:35:1:
>>>> error: expected declaration specifiers or ‘...’ before numeric
>>>> constant
>>>> vsnprintf (char *__restrict str,
>>>> ^
>>>> In file included from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/ssp/stdio.h:34:0,
>>>> from
>>>> /home/R0b0t1/devel/toolgen/source/newlib-3.0.0/newlib/libc/include/stdio.h:800,
>>>> from
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsnprintf.c:25:
>>>> ../../../../../../../source/newlib-3.0.0/newlib/libc/stdio/vsnprintf.c:35:1:
>>>> error: expected declaration specifiers or ‘...’ before
>>>> ‘__builtin_object_size’
>>>> vsnprintf (char *__restrict str,
>>>> ^
>>> I apologize for the updates, but I've just repeated that build with
>>> different results. Only the error in gets.c is reported.
>>> ../../source/newlib-3.0.0/configure --target=arm-none-eabi
>>> --host=x86_64-pc-linux-gnu --prefix=`realpath ../../prefix`
>>> --docdir=`realpath ../../prefix/share/doc`
>>> I had a similar issue with GCC that was solved with the addition of a
>>> configuration flag, but here I am at a loss.
>> Autoconf 14.1 Specifying target triplets says:
>> https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html
>> --target defaults to --host, --host defaults to --build, so you need to specify
>> --build and --host, as --host specifies a cross build, so you probably need to
>> use --build=x86_64-pc-linux-gnu --host=arm-none-eabi
>> Autoconf 18.6.3 Hosts and Cross Compilation explains:
>> https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Hosts-and-Cross_002dCompilation.html
> Thanks, however:
> $ ../../source/newlib-3.0.0/configure --build=x86_64-pc-linux-gnu
> --host=arm-none-eabi --target=arm-none-eabi --prefix=`realpath
> ../../prefix` --docdir=`realpath ../../prefix/share/doc`
> --disable-newlib-supplied-syscalls --enable-newlib-reent-small
> --disable-newlib-fvwrite-in-streamio
> --disable-newlib-fseek-optimization --disable-newlib-wide-orient
> --disable-newlib-unbuf-stream-opt --enable-newlib-global-atexit
> --enable-newlib-retargetable-locking --disable-nls
> checking build system type... x86_64-pc-linux-gnu
> checking host system type... arm-none-eabi
> checking target system type... arm-none-eabi
> checking for a BSD-compatible install... /usr/bin/install -c
> checking whether ln works... yes
> checking whether ln -s works... yes
> checking for a sed that does not truncate output... /bin/sed
> checking for gawk... gawk
> checking for arm-none-eabi-gcc... arm-none-eabi-gcc
> checking for C compiler default output file name...
> configure: error: in `/home/R0b0t1/devel/toolgen/build/newlib-3.0.0':
> configure: error: C compiler cannot create executables
> See `config.log' for more details.
>>From a page affiliated with GCC (I think) I read the semantics of the flags as:
> * build - machine producing binaries for
> * host - which runs the compiler to produce binaries for
> * target.
> So normally build == host ?= target, but sometimes build != host ==
> target, for initial architecture bootstrapping.
Please correct me if I'm wrong, but I think of toolchain running on --build
triplet system, using toolchain prefix --host triplet in /usr/bin/ e.g.
/usr/bin/arm-none-eabi-{ar,as,cpp,gcc,ld,nm,...} file formats for that system,
which generates and uses code for --target triplet system, which could be a
multilib supporting arch variants like hard and soft floats.
> The persistence of this problem leads me to think there is a bug in
> the newlib autotools configuration, but sadly I do not have any idea
> how to troubleshoot that, or why it leads to source errors. I'll hold
> off from posting until I get more information. At least one person has
> recommended cutting out gets entirely.
What does config.log give for details?
An attachment might help others provide a diagnosis.
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada