*BSD News Article 1767


Return to BSD News archive

Path: sserve!manuel!munnari.oz.au!spool.mu.edu!uunet!mcsun!uknet!axion!rtf.bt.co.uk!duplain
From: duplain@rtf.bt.co.uk (Andy Duplain)
Newsgroups: comp.unix.bsd
Subject: Re: Cross compiling for 386bsd using gcc 2.2.2
Message-ID: <1992Jul1.091811.10113@rtf.bt.co.uk>
Date: 1 Jul 92 09:18:11 GMT
Article-I.D.: rtf.1992Jul1.091811.10113
References: <1992Jun29.101909.25381@rtf.bt.co.uk>
Organization: BT Customer Systems, Brighton, UK
Lines: 84

In article <1992Jun29.101909.25381@rtf.bt.co.uk> duplain@rtf.bt.co.uk (Andy Duplain) writes:
>	I would like to be able to set-up a cross development environment
>	on one of our Sparcs to allow 386bsd executables to be spat out
>	at an alarming rate :-)  Can anyone post, email or otherwise
>	inform me of the diffs to vanilla gcc 2.2.2 to allow a cross
>	compiler to be built ?

	It  wasn't  as  difficult  as  I thought. I now have gcc 2.2.2, gas
	1.92.3  and  gld 1.94 working in the cross-development environment.
	I  used  diffs  from tesla.ee.cornell.edu (actually I got them from
	doc.ic.ac.uk) to patch binutils 1.94 and gcc 2.2.2.
	
	I  had  a  problem  with  gld  in that I asked it to search only in
	"/home/nimrod/386bsd/xdev-lib"  for  library  files, which confused
	it's  command  file  interpreter  as  it  mistook the hyphen for an
	minus  sign...  and  tried  to  evaluate  the pathname. So I had to
	drop the hyphens in pathnames.

	Getting  libgcc  to  build needed a hack to libgcc.c to include the
	BSD  stddef.h  file prior to gstddef.h file (BSD stddef.h needed to
	be specified with an absolute pathname).
	
	The  specs  files  was totally inadequate, and I was unable to edit
	the   specs   files   after  building  (gcc  complained  of  syntax
	errors!!), so I hacked gcc.c to create the following default specs:
	
*asm:
%{pipe:--} %{v:-v} -f

*asm_final:


*cpp:


*cc1:


*cc1plus:


*endfile:


*link:
%{!nostdlib:%{!e*:-e start}} %{v:-v} -dc -dp

*lib:
%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}

*startfile:
%{pg:/home/nimrod/386bsd/xdevlib/gcrt0.o} \	(all on one line really -- ed)
%{!pg:%{p:/home/nimrod/386bsd/xdevlib/moncrt0.o} \
%{!p:/home/nimrod/386bsd/xdevlib/crt0.o}}

*switches_need_spaces:


*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}

*predefines:
-Dunix -Di386 -Di386b -D__NET2BSD__

*cross_compile:
1

	This  specs  file invokes gas with `-f', ld with `-e start -dc -dp'
	and  specifies  the  absolute  paths to the crt0.o files (note also
	the name change from mcrt0.o to moncrt0.o... hope that's right ?).

	I  also  hacked  the  link_command_spec  in  gcc.c (line 554ish) to
	remove  the  %D  spec, as the linker knows where the libraries are,
	and  it's  told  explicitly where the startfiles, but it means that
	libgcc.a  has  to  reside  with  the  other system libraries (in my
	case "/home/nimrod/386bsd/xdevlib" rather than	".../xdevlib/
	gcc-lib/i386-bsd/2.2.2.".
	
	Thanks  to  all  those  who  directed  me  in  the  right direction
	(specifically dxper@dtek.chalmers.se and eoahmad@ntu.ac.sg).

-- 
Andy Duplain, BT Customer Systems, Brighton, UK.            duplain@rtf.bt.co.uk
#define	DISCLAIMER      My views and opinions are my own, and not my company's