[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: hello world (Re: cross-compile, binutils and egcs-1.03a)



# えらい遅れた返答ですが...

<19980802160124H.makoto@ki.nu>の記事において
1998年08月02日16時01分頃、makoto@ki.nuさんは書きました。

 > えーと、済みません、まだ (cross) gcc が正しく入っていないので、
 > その手前まではうまく出来ているということを試したつもりです。
 > それで、正しく (cross) gcc を入れるにはどうしたらいいかと思っ
 > ているところです。僕が持っているのは 

egcs-1.0.3aを target=powerpc-netbsdでcompileするためには、
以下のpatchが必要です(...と思う)。
後半の部分は以前のpatchと同じものですが、
最初のMakefileへのpatchをあてないと、targetのlibraryが
必要になってしまいます(...と思う)。

あと egcsをcompileするときは、
make cross じゃなくて make LANGUAGES="c c++" でないとだめかも。


で、改良したpackageを以下のURLに置いておきます。
ftp://www.cec.co.jp/usr/sakamoto/NetBSD/experiment/crossppc-1.1.tgz

必要なもの:
	binutils-2.9.1.tar.gz (なければ取りにいきます)
	egcs-1.0.3a.tar.gz (〃)
	NetBSD source

一発インストール:
	・crossppc-1.1.tgzを展開する。
	・super userになる。
	・make 「OPTION」 install

	OPTIONは、
		PREFIX=/usr/pkg
			binutils,gcc などのinstall先を指定します。
		TARGET_MACHINE=ofppc
			macppc,bebox などtarget machineを指定します。
		ALLSRC=/usr/src
			NetBSD source treeのpathを指定します。
		TARGET_ROOT=/usr/tmp/root
			DESTDIRを指定します。

		以下は試してません :-)

		USE_BINUTILS_CURRENT
			その時点での最新版のbinutils(gas+utils)を使用します。
		USE_EGCS_CURRENT
			その時点での最新版のegcsを使用します。

	たとえば、
		# make PREFIX=/opt/PPC TARGET_MACHINE=macppc \
		     ALLSRC=/usr/src.current \
		     TARGET_ROOT=/opt/PPC/root install
	ですね。

これで、NetBSD source tree中のprogramは、
ppc-make installとやるだけで作れるはずです。
単に powerpc-netbsd-gcc hoge.c とかやってバイナリを生成したい場合は、
macppcのバイナリスナップショットのlibrary部分を持ってきて、
PREFIX/powerpc-netbsd/lib に置くなり、リンクを張ったりしましょう。

sakamoto@cec.co.jp
# そろそろ出るはずのegcs-1.1に対応しないと。

-----cut here-----
*** gcc/Makefile.in.orig	Fri Feb 20 04:14:38 1998
--- gcc/Makefile.in	Wed Jun 17 12:43:50 1998
***************
*** 1913,1922 ****
  # Files related to the fixproto script.
  
  deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
! 	CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -Iinclude -I${SYSTEM_HEADER_DIR}"; \
  	  export CC; \
! 	  $(SHELL) $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h
! 	mv tmp-deduced.h deduced.h
  
  gen-protos: gen-protos.o scan.o cppalloc.o $(HOST_LIBDEPS)
  	${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
--- 1913,1927 ----
  # Files related to the fixproto script.
  
  deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
! 	if [ -d $(SYSTEM_HEADER_DIR) ]; \
! 	then \
! 	  CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -Iinclude -I${SYSTEM_HEADER_DIR}"; \
  	  export CC; \
! 	  $(SHELL) $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h; \
! 	  mv tmp-deduced.h deduced.h; \
! 	else \
! 	  touch deduced.h; \
! 	fi
  
  gen-protos: gen-protos.o scan.o cppalloc.o $(HOST_LIBDEPS)
  	${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
*** gcc/configure.orig	Tue Feb 24 15:59:37 1998
--- gcc/configure	Tue Feb 24 15:28:15 1998
***************
*** 3988,3993 ****
--- 3988,4000 ----
  		fi
  		xmake_file=rs6000/x-sysv4
  		;;
+ 	powerpc-*-netbsd*)
+ 		tm_file=rs6000/netbsd.h
+ 		xm_file=rs6000/xm-netbsd.h
+ 		fixincludes=Makefile.in
+ 		tmake_file=t-libc-ok
+ 		xmake_file=x-netbsd
+ 		;;
  	powerpc-*-eabiaix*)
  		tm_file=rs6000/eabiaix.h
  		tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
*** /dev/null	Tue Feb 24 15:49:12 1998
--- gcc/config/rs6000/netbsd.h	Tue Feb 24 15:28:34 1998
***************
*** 0 ****
--- 1,77 ----
+ #include <rs6000/sysv4.h>
+ 
+ /* Get generic NetBSD definitions.  */
+ 
+ #include <netbsd.h>
+ 
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (PowerPC NetBSD)");
+ 
+ /* Use bcopy etc. instead of memcpy etc. */
+ #undef	TARGET_MEM_FUNCTIONS
+ 
+ /* Names to predefine in the preprocessor for this target machine.  */
+ #undef	CPP_PREDEFINES
+ #define CPP_PREDEFINES "-D__powerpc__ -D__PPC__ -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(powerpc) -Amachine(powerpc)"
+ 
+ /* Make gcc agree with <machine/ansi.h> */
+ 
+ #undef SIZE_TYPE
+ #define SIZE_TYPE "unsigned int"
+ 
+ #undef PTRDIFF_TYPE
+ #define PTRDIFF_TYPE "int"
+ 
+ #undef WCHAR_TYPE
+ #define WCHAR_TYPE "int"
+ 
+ #undef WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE 32
+ 
+ /* Don't default to pcc-struct-return, because gcc is the only compiler, and
+    we want to retain compatibility with older gcc versions.  */
+ #define DEFAULT_PCC_STRUCT_RETURN 0
+ 
+ /* Until gcc uses fixed functions on procedure entry, -mmultiple is probably
+    more efficient due to smaller code and less cache thrashing.  */
+ #undef	CC1_SPEC
+ #define	CC1_SPEC	"-mmultiple"
+ 
+ /* We want a implemetation reserved symbol for the entry point! */
+ #undef	LINK_SPEC
+ #define	LINK_SPEC	"%{!nostdlib:%{!r*:%{!e*:-e _start}}} -dc -dp %{static:-Bstatic} %{assert*}"
+ 
+ /* Provide a STARTFILE_SPEC appropriate for NetBSD.  Here we add
+    the crtbegin.o file (see crtstuff.c) which provides part of the
+    support for getting C++ file-scope static object constructed
+    before entering `main'. */
+    
+ #undef	STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+  "%{!shared: \
+      %{pg:gcrt0.o%s} \
+      %{!pg: \
+ 	%{p:gcrt0.o%s} \
+ 	%{!p:crt0.o%s}}} \
+    %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+ 
+ /* Provide a ENDFILE_SPEC appropriate for NetBSD.  Here we tack on
+    the file which provides part of the support for getting C++
+    file-scope static object deconstructed after exiting `main' */
+ 
+ #undef	ENDFILE_SPEC
+ #define ENDFILE_SPEC \
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s}"
+ 
+ #undef	FUNCTION_PROFILER
+ #define FUNCTION_PROFILER(FILE, LABELNO) \
+ {									\
+ 	fprintf (FILE, "\tmflr %s\n", reg_names[0]);			\
+ 	fprintf (FILE, "\tstw %s,4(%s)\n", reg_names[0], reg_names[1]);	\
+ /* XXX PIC?? */								\
+ 	fprintf (FILE, "\tbl _mcount\n");				\
+ 	fprintf (FILE, "\tlwz %s,4(%s)\n", reg_names[0], reg_names[1]);	\
+ 	fprintf (FILE, "\tmtlr %s\n", reg_names[0]);			\
+ }
+ 
+ #undef ASM_FINAL_SPEC
*** /dev/null	Tue Feb 24 15:49:12 1998
--- gcc/config/rs6000/xm-netbsd.h	Tue Feb 24 15:28:34 1998
***************
*** 0 ****
--- 1,9 ----
+ /* Configuration for GCC for PowerPC running NetBSD as host.  */
+ 
+ #include <rs6000/xm-rs6000.h>
+ 
+ /* NetBSD isn't SysV */
+ #undef	USG
+ 
+ /* Not needed on NetBSD (really?) */
+ #undef	COLLECT_EXPORT_LIST