I referred to this link on the internet: https://github.com/golang/go/wiki/GccgoCrossCompilation#build-a-cross-gccgo-aware-version-of-the-go-tool
On Tuesday, October 20, 2020 at 5:18:05 PM UTC+2 Gerrit Binnenmars wrote: > 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/4a5d8fe6-7109-4b15-afed-08b5b10b9ff8n%40googlegroups.com.