This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Building the toolchain
- From: "Rob Emanuele" <poorarm at shoreis dot com>
- To: newlib at sourceware dot org, gcc-help at gcc dot gnu dot org
- Date: Fri, 27 Jun 2008 15:44:43 -0700
- Subject: Building the toolchain
I'm looking for the best way to compile the toolchain from scratch
with recent versions of binutils (2.18), gcc/g++ (4.2.2), and newlib
(20080125_cvs_import). Target is arm-elf which I use on bare metal.
What I have works great but I have to compile g++ separately and
disable libssp (see below)
I compile g++ separately because it goes looking for sys/types.h
during the build and can't find it if gcc and newlib aren't compiled
and installed first. Is that normal?
I still have to disable libssp in the gcc/g++ build because I get
configure warnings and then compiler errors. I reported it a while
ago on the gcc list and in a PR. If it hasn't been fixed, then I'll
keep working the way I am.
Libssp warnings from configure:
checking limits.h usability... no
checking limits.h presence... yes
configure: WARNING: limits.h: present but cannot be compiled
configure: WARNING: limits.h: check for missing prerequisite headers?
configure: WARNING: limits.h: see the Autoconf documentation
configure: WARNING: limits.h: section "Present But Cannot Be Compiled"
configure: WARNING: limits.h: proceeding with the preprocessor's result
configure: WARNING: limits.h: in the future, the compiler will take precedence
configure: WARNING: ## --------------------------------- ##
configure: WARNING: ## Report this to the libssp lists. ##
configure: WARNING: ## --------------------------------- ##
checking for limits.h... yes
Here's how I currently do it Makefile style....
--snip--
all: cross-binutils cross-gcc cross-g++ cross-newlib
# awful hack using cp in binutils b/c the bfd/docs will not build
outside their tree
cross-binutils:
mkdir -p build/binutils && cd build/binutils && \
mkdir -p bfd/doc && cp ../../binutils/bfd/doc/* bfd/doc/ && \
(./config.status || ../../binutils/configure
--prefix=$(PREFIX) --target=$(TARGET)) && \
$(MAKE) -j$(PROCS)&& \
$(MAKE) install
cross-gcc: cross-binutils
mkdir -p build/gcc && cd build/gcc && \
(./config.status || ../../gcc/configure --prefix=$(PREFIX)
--target=$(TARGET) --enable-languages="c" --with-gnu-ld --with-gnu-as
--with-newlib --disable-libssp) && \
$(MAKE) && \
$(MAKE) install
cross-g++: cross-binutils cross-gcc cross-newlib
mkdir -p build/g++ && cd build/g++ && \
(./config.status || ../../gcc/configure --prefix=$(PREFIX)
--target=$(TARGET) --enable-languages="c++" --with-gnu-ld
--with-gnu-as --with-newlib --disable-libssp) && \
$(MAKE) && \
$(MAKE) install
cross-newlib: cross-binutils cross-gcc
mkdir -p build/newlib && cd build/newlib && \
(./config.status || ../../newlib/configure --prefix=$(PREFIX)
--target=$(TARGET)) && \
$(MAKE) -j$(PROCS) && \
$(MAKE) install
-- snip--
Thanks for any input!
--Rob