| From dda6b050cd74a352670787a294596a9c56c21327 Mon Sep 17 00:00:00 2001 |
| From: Yousong Zhou <yszhou4tech@gmail.com> |
| Date: Fri, 4 May 2018 18:20:53 +0800 |
| Subject: [PATCH] gotools: fix compilation when making cross compiler |
| |
| libgo is "the runtime support library for the Go programming language. |
| This library is intended for use with the Go frontend." |
| |
| gccgo will link target files with libgo.so which depends on libgcc_s.so.1, but |
| the linker will complain that it cannot find it. That's because shared libgcc |
| is not present in the install directory yet. libgo.so was made without problem |
| because gcc will emit -lgcc_s when compiled with -shared option. When gotools |
| were being made, it was supplied with -static-libgcc thus no link option was |
| provided. Check LIBGO in gcc/go/gcc-spec.c for how gccgo make a builtin spec |
| for linking with libgo.so |
| |
| - GccgoCrossCompilation, https://github.com/golang/go/wiki/GccgoCrossCompilation |
| - Cross-building instructions, http://www.eglibc.org/archives/patches/msg00078.html |
| |
| When 3-pass GCC compilation is used, shared libgcc runtime libraries will be |
| available after gcc pass2 completed and will meet the gotools link requirement |
| at gcc pass3 |
| --- |
| gotools/Makefile.am | 4 +++- |
| gotools/Makefile.in | 4 +++- |
| 2 files changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/gotools/Makefile.am |
| +++ b/gotools/Makefile.am |
| @@ -26,6 +26,7 @@ PWD_COMMAND = $${PWDCMD-pwd} |
| STAMP = echo timestamp > |
| |
| libgodir = ../$(target_noncanonical)/libgo |
| +libgccdir = ../$(target_noncanonical)/libgcc |
| LIBGODEP = $(libgodir)/libgo.la |
| |
| LIBGOTOOL = $(libgodir)/libgotool.a |
| @@ -41,7 +42,8 @@ GOCFLAGS = $(CFLAGS_FOR_TARGET) |
| GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS) |
| |
| AM_GOCFLAGS = -I $(libgodir) |
| -AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs |
| +AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs \ |
| + -L $(libgccdir) -L $(libgccdir)/.libs -lgcc_s |
| GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@ |
| |
| libgosrcdir = $(srcdir)/../libgo/go |
| --- a/gotools/Makefile.in |
| +++ b/gotools/Makefile.in |
| @@ -337,6 +337,7 @@ mkinstalldirs = $(SHELL) $(toplevel_srcd |
| PWD_COMMAND = $${PWDCMD-pwd} |
| STAMP = echo timestamp > |
| libgodir = ../$(target_noncanonical)/libgo |
| +libgccdir = ../$(target_noncanonical)/libgcc |
| LIBGODEP = $(libgodir)/libgo.la |
| LIBGOTOOL = $(libgodir)/libgotool.a |
| @NATIVE_FALSE@GOCOMPILER = $(GOC) |
| @@ -346,7 +347,8 @@ LIBGOTOOL = $(libgodir)/libgotool.a |
| GOCFLAGS = $(CFLAGS_FOR_TARGET) |
| GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS) |
| AM_GOCFLAGS = -I $(libgodir) |
| -AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs |
| +AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs \ |
| + -L $(libgccdir) -L $(libgccdir)/.libs -lgcc_s |
| GOLINK = $(GOCOMPILER) $(GOCFLAGS) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@ |
| libgosrcdir = $(srcdir)/../libgo/go |
| cmdsrcdir = $(libgosrcdir)/cmd |