Hello Hugo,

You are correct, what I try is to cross-compile a go application (in this 
case Mender client) for the ppc platform (e500 on a MFC8555 processor).
1. I used crosstool-ng instead of buildroot. It has support for "go" as 
experimental language and as result a gccgo compiler is build and also a 
libgo library.
2. The mender client is normally build with: go build client_dir what I do 
is: env GOOS=linux GOARCH=ppc go build -compiler gccgo client_dir
Than go complains as explained that ppc is a not supported architecture.
Unfortunately the crosstool-ng tooling thus not deliver a new go. I read 
somewhere that recompiling go with a gccgo compiler might solve this. (so 
besides the ppc version of ggcgo I also used crosstool-ng to build an 
x86_64 (amd64) version.
3. Interesting approach, I don't completely understand it yet but will 
investigate it further.

Is it possible to use a Makefile approach with gccgo instead of go build?

On Tuesday, October 20, 2020 at 9:52:17 AM UTC+2 hugo.c...@essensium.com 
wrote:

>
>
> Hi Gerrit,
>
> If I understand correctly, I believe you try to cross-compile Go 
> applications to the PowerPC e500 architecture and as a first step you are 
> porting Go to this architecture.
>
> We recently ported Go applications such as Docker and its tools to 
> architectures not supported by upstream Go, but with an approach quite 
> different from yours (if I understood well).
>
> The procedure we follow, is:
>
> 1. Build the gccgo cross-toolchain with Buildroot: Buildroot currently 
> builds a toolchain by first building a gcc-initial, then proceeding to 
> build a gcc-final.  We had to insert a new gcc compilation stage before 
> gcc-final can build the gccgo cross-compiler.  This additional gcc 
> compilation stage makes go-tools available in the native environment that 
> are required for building the gccgo cross-compiler tools when gcc-final is 
> built.  If I understand well this may be an important part of the solution 
> to your problem.
>
> 2. Patch the Buildroot environment to invoke gccgo as the compiler, rather 
> than gc, for compiling Go applications.  We are planning to upstream this 
> and the previous step to Buildroot in the coming months.
>
> 3. Implement Go system call bindings: The sys package of the Go runtime 
> implements system call bindings as part of gccgo (so part of gcc-final), 
> the golang-sys/unix package is (can be) shipped in the folder 
> golang-sys/unix of the application you want to build (this is Docker and 
> tools in our case).  The golang-sys package needs to be patched in each 
> application to produce correct system call bindings for your target 
> environment (so the PowerPC e500 in your case).  Most of our development 
> time was spent in this last step (it is tricky).
>
> Using this procedure we have ported Docker and its dependencies and tools 
> to several ppc 32 bit architectures.
>
> I hope this helps.
>
> Hugo
>
>
>
> On Tue, Oct 20, 2020 at 6:20 AM gerritbinnenmars <gerritbi...@gmail.com> 
> wrote:
>
>> Hello Ian,
>> Thanks for the quick reaction. It seems my request was not clear.
>> What I am doing is the other way around: using gccgo to build the "go" 
>> cmd.
>> So clone the "go" source from github and then go build -compiler gccgo 
>> ./cmd/go
>>
>> Gerrit
>>
>> -------- Oorspronkelijk bericht --------
>> Van: Ian Lance Taylor <ia...@golang.org> 
>> Datum: 20-10-20 04:25 (GMT+01:00) 
>> Aan: Gerrit Binnenmars <gerritbi...@gmail.com> 
>> Cc: golang-nuts <golan...@googlegroups.com> 
>> Onderwerp: Re: [go-nuts] gccgo problem compiling go from source 
>>
>> On Mon, Oct 19, 2020 at 2:06 PM Gerrit Binnenmars
>> <gerritbi...@gmail.com> wrote:
>> >
>> > I used crosstool-ng successfully to build a go compiler for ppc e500.
>> > Unfortunately go build does not support ppc therefore go needs to be
>> > build from source using the amd64 gccgo compiler that I also build
>> > with crosstool-ng.
>> >
>> > Compiling go from source fails:
>> > Problem: undefined name stdpkg in internal/goroot/gccgo.go
>> >
>> > I included the output of my build script below. Any help or tips are 
>> welcome.
>> >
>> > With kind regards,
>> >
>> > Gerrit Binnenmars
>> >
>> > Info:
>> > This is crosstool-NG version 1.24.0.191_364ed7a
>> > GO111MODULE=""
>> > GOARCH="amd64"
>> > GOBIN=""
>> > GOCACHE="/home/maintain/.cache/go-build"
>> > GOENV="/home/maintain/.config/go/env"
>> > GOEXE=""
>> > GOFLAGS=""
>> > GOHOSTARCH="amd64"
>> > GOHOSTOS="linux"
>> > GOINSECURE=""
>> > GOMODCACHE="/home/maintain/gonew/pkg/mod"
>> > GONOPROXY=""
>> > GONOSUMDB=""
>> > GOOS="linux"
>> > GOPATH="/home/maintain/gonew"
>> > GOPRIVATE=""
>> > GOPROXY="https://proxy.golang.org,direct";
>> > 
>> GOROOT="/home/maintain/x-tools/x86_64-e500-linux-gnu/x86_64-e500-linux-gnu/sysroot/lib"
>> > GOSUMDB="sum.golang.org"
>> > GOTMPDIR=""
>> > 
>> GOTOOLDIR="/home/maintain/x-tools/x86_64-e500-linux-gnu/x86_64-e500-linux-gnu/sysroot/lib/pkg/tool/linux_amd64"
>> > GCCGO="/home/maintain/x-tools/x86_64-e500-linux-gnu/bin/gccgo"
>> > AR="ar"
>> > CC="/home/maintain/x-tools/x86_64-e500-linux-gnu/bin/gcc"
>> > CXX="/home/maintain/x-tools/x86_64-e500-linux-gnu/bin/g++"
>> > CGO_ENABLED="1"
>> > GOMOD=""
>> > 
>> CGO_CFLAGS="--with-sysroot=/home/maintain/x-tools/x86_64-e500-linux-gnu/x86_64-e500-linux-gnu/sysroot"
>> > CGO_CPPFLAGS=""
>> > CGO_CXXFLAGS="-g -O2"
>> > CGO_FFLAGS="-g -O2"
>> > CGO_LDFLAGS="-g -O2"
>> > PKG_CONFIG="pkg-config"
>> > GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0
>> > -fdebug-prefix-map=/tmp/go-build355977706=/tmp/go-build
>> > -gno-record-gcc-switches"
>> > go version go1.15.2 linux/amd64
>> > gccgo (GCC) 10.2.0
>> > Copyright (C) 2020 Free Software Foundation, Inc.
>> > This is free software; see the source for copying conditions.  There is 
>> NO
>> > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
>> PURPOSE.
>> >
>> > WORK=/tmp/go-build273889551
>> > mkdir -p $WORK/b100/
>> > cd $WORK
>> > /home/maintain/x-tools/x86_64-e500-linux-gnu/bin/gccgo
>> > -fgo-importcfg=/dev/null -c -x c - -o /dev/null || true
>> > cd /home/maintain/gonew/src/internal/goroot
>> > /home/maintain/x-tools/x86_64-e500-linux-gnu/bin/gccgo -c -g -m64
>> > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches
>> > -fgo-pkgpath=internal/goroot -o $WORK/b100/_go_.o -I
>> > $WORK/b100/_importcfgroot_ ./gccgo.go
>> > mkdir -p $WORK/b027/
>> > mkdir -p $WORK/b027/_importcfgroot_/cmd/go/internal
>> > ln -s 
>> /home/maintain/.cache/go-build/ad/ade44815e7af8b7305b2db4099ec5b08aafcbd6e374a2c13d8e99c2986ca93c6-d
>> > $WORK/b027/_importcfgroot_/cmd/go/internal/libauth.a
>> > ln -s 
>> /home/maintain/.cache/go-build/d2/d26f05f163d86aecfadfbb952dfef9a314aa1c84c23fddd39bce127ccc85d101-d
>> > $WORK/b027/_importcfgroot_/cmd/go/internal/libcfg.a
>> > mkdir -p $WORK/b027/_importcfgroot_/cmd/internal
>> > ln -s 
>> /home/maintain/.cache/go-build/2f/2f6811b0804c481edbfd9952d1aac22414f84ee1aec229218b03956bf3f9aa7a-d
>> > $WORK/b027/_importcfgroot_/cmd/internal/libbrowser.a
>> > cd /home/maintain/gonew/src/cmd/go/internal/web
>> > /home/maintain/x-tools/x86_64-e500-linux-gnu/bin/gccgo -c -g -m64
>> > -fdebug-prefix-map=$WORK=/tmp/go-build -gno-record-gcc-switches
>> > -fgo-pkgpath=cmd/go/internal/web -o $WORK/b027/_go_.o -I
>> > $WORK/b027/_importcfgroot_ ./api.go ./http.go ./url.go ./url_other.go
>> > # internal/goroot
>> > src/internal/goroot/gccgo.go:24:10: error: reference to undefined name 
>> 'stdpkg'
>> >    24 |   return stdpkg[path]
>> >       |          ^
>> > # cmd/go/internal/web
>> > src/cmd/go/internal/web/api.go:92:45: error: reference to undefined
>> > field or method 'Redacted'
>> >    92 |   return nil, fmt.Errorf("reading %s: %v", u.Redacted(), err)
>>
>> It looks like you are using the "go" program to build the gccgo
>> standard library.  That doesn't work.  The gccgo standard library must
>> be built as part of GCC, using the usual configure/make commands used
>> to build GCC itself.  When configuring GCC, use --enable-languages=go.
>>
>> Ian
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/5f8e657e.1c69fb81.3e6dc.0cf4%40mx.google.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/5f8e657e.1c69fb81.3e6dc.0cf4%40mx.google.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/7ef29078-6460-4b02-a4ff-94e780fd85f3n%40googlegroups.com.

Reply via email to