This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
cross compiler for solaris - success -well, kinda, I think
- From: Gianni Mariani <gmariani at chaincast dot com>
- To: gcc at gcc dot gnu dot org
- Date: Sun, 04 Aug 2002 20:08:57 -0700
- Subject: cross compiler for solaris - success -well, kinda, I think
- Organization: Chaincast, Inc
- Reply-to: gmariani at chaincast dot com
woo hoo ... I build a cross compiler for solaris hosted on RH Linux.
So, I had to 'fix' a bunch of stuff - I probably broke a bunch o stuff
too ...
I've attached a patch file that I created using :
diff -Naur gcc-3.1.1 gcc-3.1.1-fixed > gcc-3.1.1-patch
I've also created a Makefile that does almost everything for anyone else
who wants to give it a go.
So the problems were:
a)
So, the first thing was sol2-bi.h - I have no idea what this stuff does
but it had some absolute paths that seem happy if their converted to
relative paths. Otherwise the linker gets all upset about not being
able find certain objs. (thanks to Jeff Sturm)
b)
gcc/fixproto was changed to ignore errors from gcc/fix-header - because
of a SEGV on exit (only on RH7.3) in free_chunk after calling exit().
When I tried to debug this by using efence the problem went away. It
seems there is a memory corruption problem with fix-header - if someone
has purify - give it a go. (not all headers had problems - just some
headers - always the same error for the respective header but also 2
different kinds of failures). Ignoring the error seemed sufficeint
since it was obviously dying just before exit in system run-time linker
code. Any more help I can give here, let me know, it seems that
fix-header was built with a gcc3.1.1 compiler on RH7.3 .
c)
ctype problems - it seems like the wrong ctype was coming through
(config/os/newlib). I fixed this by adding a case to
gcc-3.1.1-fixed/libstdc++-v3/configure and new files in
solaris/solaris2.8/bits. I'm not sure if it was the right thing to do
but it seems like it worked. I probably left some cruft in
gcc-3.1.1-fixed/libstdc++-v3/configure ...
d)
cwchar ended up getting mbstate_t multiply defined. I think this was a
problem with expecting a glibc header, I added a new condition to the
ifdef around the std_cwchar.h files.
e)
libiberty did not get a Makefile after configuration - I don't think I
needed it so I created an empty sparcv9/libiberty/Makefile with empty
all: and install: rules. I have no idea what the right(tm) thing is to
do here.
f)
It seems I could not build a static version of the libraries, it seems
the loader was told to go load the wrong ld.so, I gave up on static linking.
So I read through most of the docs - is it really so hard ?
Is there a standard cross compiler test suite that's run for regression
tests ?
Now I go and see if I can actually use the compiler - I was at least
able to build a c++ Hello World program and it ran like a champ.
Regards
G
diff -Naur gcc-3.1.1/gcc/config/sparc/sol2-bi.h gcc-3.1.1-fixed/gcc/config/sparc/sol2-bi.h
--- gcc-3.1.1/gcc/config/sparc/sol2-bi.h Mon Apr 22 12:53:42 2002
+++ gcc-3.1.1-fixed/gcc/config/sparc/sol2-bi.h Sat Aug 3 14:04:48 2002
@@ -79,10 +79,10 @@
%{!traditional:values-Xa.o%s}}"
#define STARTFILE_SPEC64 "\
-%{ansi:/usr/lib/sparcv9/values-Xc.o%s} \
+%{ansi:sparcv9/values-Xc.o%s} \
%{!ansi: \
- %{traditional:/usr/lib/sparcv9/values-Xt.o%s} \
- %{!traditional:/usr/lib/sparcv9/values-Xa.o%s}}"
+ %{traditional:sparcv9/values-Xt.o%s} \
+ %{!traditional:sparcv9/values-Xa.o%s}}"
#if DEFAULT_ARCH32_P
#define STARTFILE_ARCH_SPEC "\
diff -Naur gcc-3.1.1/gcc/fixproto gcc-3.1.1-fixed/gcc/fixproto
--- gcc-3.1.1/gcc/fixproto Wed Aug 22 07:35:04 2001
+++ gcc-3.1.1-fixed/gcc/fixproto Sat Aug 3 15:49:41 2002
@@ -273,6 +273,8 @@
then true
else
$FIX_HEADER $rel_source_file $abs_source_file $abs_target_file ${DEFINES} $include_path
+ echo $FIX_HEADER $rel_source_file $abs_source_file $abs_target_file ${DEFINES} $include_path
+ true
if test $? != 0 ; then exit 1 ; fi
echo "${rel_source_file}" >>fixproto.list
fi
diff -Naur gcc-3.1.1/jnk gcc-3.1.1-fixed/jnk
--- gcc-3.1.1/jnk Wed Dec 31 16:00:00 1969
+++ gcc-3.1.1-fixed/jnk Sat Aug 3 18:24:40 2002
@@ -0,0 +1 @@
+make: *** No targets specified and no makefile found. Stop.
diff -Naur gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_base.h gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_base.h
--- gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_base.h Wed Dec 31 16:00:00 1969
+++ gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_base.h Sat Aug 3 18:42:43 2002
@@ -0,0 +1,57 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997-1999, 2000 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// Information as gleaned from /usr/include/ctype.h. Looks like this
+// only works with solaris2.7 and solaris2.8. Thanks for not changing
+// things, sun engineers!
+
+ struct ctype_base
+ {
+ // Non-standard typedefs.
+ typedef int* __to_type;
+
+ // NB: Offsets into ctype<char>::_M_table force a particular size
+ // on the mask type. Because of this, we don't use an enum.
+ typedef unsigned int mask;
+ static const mask upper = _ISUPPER;
+ static const mask lower = _ISLOWER;
+ static const mask alpha = _ISALPHA;
+ static const mask digit = _ISDIGIT;
+ static const mask xdigit = _ISXDIGIT;
+ static const mask space = _ISSPACE;
+ static const mask print = _ISPRINT;
+ static const mask graph = _ISGRAPH;
+ static const mask cntrl = _ISCNTRL;
+ static const mask punct = _ISPUNCT;
+ static const mask alnum = _ISALNUM;
+ };
diff -Naur gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_inline.h gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_inline.h
--- gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_inline.h Wed Dec 31 16:00:00 1969
+++ gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_inline.h Sat Aug 3 18:42:43 2002
@@ -0,0 +1,69 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
+// functions go in ctype.cc
+
+ bool
+ ctype<char>::
+ is(mask __m, char __c) const
+ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
+
+ const char*
+ ctype<char>::
+ is(const char* __low, const char* __high, mask* __vec) const
+ {
+ while (__low < __high)
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+ return __high;
+ }
+
+ const char*
+ ctype<char>::
+ scan_is(mask __m, const char* __low, const char* __high) const
+ {
+ while (__low < __high
+ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+ ++__low;
+ return __low;
+ }
+
+ const char*
+ ctype<char>::
+ scan_not(mask __m, const char* __low, const char* __high) const
+ {
+ while (__low < __high
+ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+ ++__low;
+ return __low;
+ }
diff -Naur gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_noninline.h gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_noninline.h
--- gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_noninline.h Wed Dec 31 16:00:00 1969
+++ gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/ctype_noninline.h Sat Aug 3 18:58:09 2002
@@ -0,0 +1,84 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+//
+// ISO C++ 14882: 22.1 Locales
+//
+
+// SOLARIS 2.8
+
+// Information as gleaned from /usr/include/ctype.h
+
+ const ctype_base::mask*
+ ctype<char>::classic_table() throw()
+ { return __ctype_mask; }
+
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__trans_upper), _M_tolower(__trans_lower),
+ _M_table(__table ? __table : classic_table())
+ { }
+
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
+ _M_toupper(__trans_upper), _M_tolower(__trans_lower),
+ _M_table(__table ? __table : classic_table())
+ { }
+
+ char
+ ctype<char>::do_toupper(char __c) const
+ { return _M_toupper[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_toupper(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_toupper[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
+
+ char
+ ctype<char>::do_tolower(char __c) const
+ { return _M_tolower[static_cast<unsigned char>(__c)]; }
+
+ const char*
+ ctype<char>::do_tolower(char* __low, const char* __high) const
+ {
+ while (__low < __high)
+ {
+ *__low = _M_tolower[static_cast<unsigned char>(*__low)];
+ ++__low;
+ }
+ return __high;
+ }
diff -Naur gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/os_defines.h gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/os_defines.h
--- gcc-3.1.1/libstdc++-v3/config/os/solaris/solaris2.8/bits/os_defines.h Wed Dec 31 16:00:00 1969
+++ gcc-3.1.1-fixed/libstdc++-v3/config/os/solaris/solaris2.8/bits/os_defines.h Sat Aug 3 18:42:43 2002
@@ -0,0 +1,47 @@
+// Specific definitions for Solaris 7,8 -*- C++ -*-
+
+// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#ifndef _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
+
+// System-specific #define, typedefs, corrections, etc, go here. This
+// file will come before all others.
+
+// These are typedefs which libio assumes are already in place (because
+// they really are, under Linux).
+#define __off_t off_t
+#define __off64_t off64_t
+#define __ssize_t ssize_t
+
+#if defined(__sparcv9) || defined(__arch64__)
+#define __glibcpp_long_bits 64
+#endif
+
+#endif
+
diff -Naur gcc-3.1.1/libstdc++-v3/configure gcc-3.1.1-fixed/libstdc++-v3/configure
--- gcc-3.1.1/libstdc++-v3/configure Wed Jul 3 15:47:36 2002
+++ gcc-3.1.1-fixed/libstdc++-v3/configure Sat Aug 3 19:19:07 2002
@@ -7,6 +7,8 @@
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
+echo "STARTED TO CONFIGURE libstdc++ = $*"
+
# Defaults:
ac_help=
ac_default_prefix=/usr/local
@@ -8714,6 +8716,12 @@
EOF
;;
+ sparc-sun-solaris2.8)
+ os_include_dir="config/os/solaris/solaris2.8"
+ cat >> confdefs.h <<\EOF
+#define HAVE_HYPOT 1
+EOF
+ ;;
*)
os_include_dir="config/os/newlib"
cat >> confdefs.h <<\EOF
@@ -8726,6 +8734,8 @@
case "$target_alias" in
*-mingw32*)
;;
+ sparc-sun-solaris*)
+ ;;
*)
# GLIBCPP_CHECK_STDLIB_SUPPORT
cat >> confdefs.h <<\EOF
diff -Naur gcc-3.1.1/libstdc++-v3/include/c/std_cwchar.h gcc-3.1.1-fixed/libstdc++-v3/include/c/std_cwchar.h
--- gcc-3.1.1/libstdc++-v3/include/c/std_cwchar.h Wed Jul 3 17:29:27 2002
+++ gcc-3.1.1-fixed/libstdc++-v3/include/c/std_cwchar.h Sun Aug 4 18:29:53 2002
@@ -46,7 +46,7 @@
// Need to do a bit of trickery here with mbstate_t as char_traits
// assumes it is in wchar.h, regardless of wchar_t specializations.
-#ifndef _GLIBCPP_HAVE_MBSTATE_T
+#if !defined(_GLIBCPP_HAVE_MBSTATE_T) && !defined(_MBSTATE_T)
namespace std
{
extern "C"
diff -Naur gcc-3.1.1/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.1.1-fixed/libstdc++-v3/include/c_std/std_cwchar.h
--- gcc-3.1.1/libstdc++-v3/include/c_std/std_cwchar.h Tue Mar 26 20:49:33 2002
+++ gcc-3.1.1-fixed/libstdc++-v3/include/c_std/std_cwchar.h Sun Aug 4 18:29:53 2002
@@ -56,7 +56,7 @@
// Need to do a bit of trickery here with mbstate_t as char_traits
// assumes it is in wchar.h, regardless of wchar_t specializations.
-#ifndef _GLIBCPP_HAVE_MBSTATE_T
+#if !defined(_GLIBCPP_HAVE_MBSTATE_T) && !defined(_MBSTATE_T)
extern "C"
{
typedef struct
#
# Cross compiler builder
#
# Written by Gianni Mariani 4-Aug-2002
# gianni@mariani.ws
#
# This Makefile should build a gcc cross compiler. You'll need to fiddle
# with some settings in this file to build what you need and you'll need
# to provide the target's include files and libraries if nessasary, you
# may also need to patch gcc itself to build correctly.
#
# This script will not build canadian cross compilers.
#
# Some parameters you'll need to fiddle with:
#
# XC_INSTALL_LOCATION - this is where the cross compiler should
# be installed. Write permission to this
# directory will be needed.
#
# XC_TARGET - The target being built. e.g. sparc-sun-solaris2.8
#
# There are 2 ways you can get native libraries for this build. You can NFS
# mount a native target's root directory and then set the
# TARGET_LIBS=<mount point>/usr/lib
# TARGET_INCS=<mount point>/usr/include *substituting <mount point>*
#
# or .... you can create a tar bzipped file using the command
#
# (cd /; tar cf - usr/lib usr/include) > target-file.tar
# bzip2 target-file.tar
#
#XC_INSTALL_LOCATION=/usr/local/sparc
#XC_TARGET=sparc-sun-solaris2.8
XC_INSTALL_LOCATION=/home/gianni/downloads/gcc/cross_compiler/install
XC_TARGET=sparc-sun-solaris2.8
all: make_cross_compiler
TARGET_LIBRARIES=solaris-libs.tar.bz2
TARGET_LIBS=$(PWD)/$(XC_TARGET)-libraries/usr/lib
TARGET_INCS=$(PWD)/$(XC_TARGET)-libraries/usr/include
target_libraries : $(TARGET_LIBRARIES)
rm -rf $(XC_TARGET)-libraries
mkdir $(XC_TARGET)-libraries
cd $(XC_TARGET)-libraries ; bunzip2 < ../$(TARGET_LIBRARIES) | tar xf -
touch target_libraries
#
# Fetch, unpack and build a cross version of bin-utils
#
OSB_PACKAGE_BINUTILS=binutils-
OSB_VERS_BINUTILS=2.12.1
OSB_SUFFIX_BINUTILS=tar.bz2
OSB_LOCATION_BINUTILS=ftp://mirrors.rcn.net/pub/sourceware/binutils/releases/
OSB_DIR_BINUTILS=$(OSB_PACKAGE_BINUTILS)$(OSB_VERS_BINUTILS)
OSB_NAME_BINUTILS=$(OSB_PACKAGE_BINUTILS)$(OSB_VERS_BINUTILS).$(OSB_SUFFIX_BINUTILS)
OSB_URL_BINUTILS=$(OSB_LOCATION_BINUTILS)$(OSB_NAME_BINUTILS)
make_binutils : $(OSB_NAME_BINUTILS)
rm -rf $(OSB_DIR_BINUTILS)
bunzip2 < $(OSB_NAME_BINUTILS) | tar xf -
( cd $(OSB_DIR_BINUTILS); ./configure --prefix=$(XC_INSTALL_LOCATION) --target=$(XC_TARGET) )
( cd $(OSB_DIR_BINUTILS); make )
touch make_binutils
$(OSB_NAME_BINUTILS) :
wget --passive-ftp $(OSB_URL_BINUTILS)
#
# Fetch, unpack and build a cross version of gcc
#
OSB_PACKAGE_GCC=gcc-
OSB_VERS_GCC=3.1.1
OSB_SUFFIX_GCC=tar.bz2
OSB_LOCATION_GCC=ftp://mirrors.rcn.net/pub/sourceware/gcc/releases/$(OSB_DIR_GCC)/
OSB_DIR_GCC=$(OSB_PACKAGE_GCC)$(OSB_VERS_GCC)
OSB_NAME_GCC=$(OSB_PACKAGE_GCC)$(OSB_VERS_GCC).$(OSB_SUFFIX_GCC)
OSB_URL_GCC=$(OSB_LOCATION_GCC)$(OSB_NAME_GCC)
make_cross_compiler : make_binutils unpack_gcc target_libraries
rm -rf $(XC_INSTALL_LOCATION)
( cd $(OSB_DIR_BINUTILS); make install )
rm -rf $(OSB_DIR_GCC)-build
mkdir $(OSB_DIR_GCC)-build
( PATH=$(XC_INSTALL_LOCATION)/bin:$$PATH ; export PATH ; \
cd $(OSB_DIR_GCC)-build; \
../$(OSB_DIR_GCC)/configure \
--host=i686-pc-linux-gnu \
--target=$(XC_TARGET) \
--prefix=$(XC_INSTALL_LOCATION) \
--enable-shared \
--with-headers=$(TARGET_INCS) \
--with-libs=$(TARGET_LIBS) \
--enable-long-long \
--enable-dynamic \
--enable-languages=c++ \
--enable-threads=posix \
--with-as=$(XC_INSTALL_LOCATION)/bin/$(XC_TARGET)-as \
--with-ld=$(XC_INSTALL_LOCATION)/bin/$(XC_TARGET)-ld \
--with-gnu-as \
--with-gnu-ld ; \
make ; \
make install \
)
touch make_cross_compiler
unpack_gcc : $(OSB_NAME_GCC)
rm -rf $(OSB_DIR_GCC)
bunzip2 < $(OSB_NAME_GCC) | tar xf -
touch unpack_gcc
$(OSB_NAME_GCC) :
wget --passive-ftp $(OSB_URL_GCC)
clean:
rm -rf $(OSB_DIR_GCC) unpack_gcc \
$(XC_INSTALL_LOCATION) make_cross_compiler \
$(OSB_DIR_BINUTILS) make_binutils \
$(XC_INSTALL_LOCATION) $(OSB_DIR_GCC)-build