Hi Gerrit, On Mon, Nov 9, 2020 at 8:42 PM Gerrit Binnenmars <gerritbinnenm...@gmail.com> wrote:
> Hugo thanks for sharing your repo, I cloned the repo. Set the environment > variables GOOS and GOARCH and called mkall.sh in the unix directory. > The result is a generate:linux docker image and an _obj/_cgo_.o file in > the unix directory next to a number of go files. > So far this is as expected? > Yes, that is correct. However some of the generated files are unnecessary. For instance the file zsocket_definitions1_linux_ppc.go that you mention is unnecessary. This file is an artefact that was generated by trial and error during development on the system call bindings. It is unnecessary, causes confusion and should be removed in the future. > Are there any plans to get it in the official golang/sys package? > Yes. I plan to use Gerrit to comment on the upstream developments that implement the support for powerpc. > I copied the resulting unix directory to the mender client directory and > called the go build command of mender. > This yielded: > + env CGO_ENABLED=1 > /home/maintain/crosstool-ng/crosstool-ng/.build/src/gcc-10.2.0/libgo/go/xgo > build -work -p 1 -x -compiler gccgo -o mender_client_ppc ./src/ > github.com/mendersoftware/mender/client > + tee log.txt > GOARCH ppc compiler gc /* extra printf from xgo tool */ > WORK=/tmp/go-build666945780 > GOARCH ppc compiler gccgo /* extra printf from xgo tool */ > src/ > github.com/mendersoftware/mender/vendor/github.com/sirupsen/logrus/terminal_check_unix.go:6:8: > found packages unix (affinity_linux.go) and runtime > (zsocket_definitions1_linux_ppc.go) in /home/maintain/mender/src/src/ > github.com/mendersoftware/mender/vendor/golang.org/x/sys/unix > I would remove the file 'zsocket_definitions1_linux_ppc.go' from the build directory. When building docker-engine with Buildroot, the final built Docker daemon is found in a 'bin' directory inside the 'output/build' directory. I don't know anything about mender or how it is built, maybe the final executables are also to be found somewhere inside a 'bin' directory. I hope this helps. Regards, Hugo > > > There is no error message but also no build result and it seems like go > build stops. > I have no idea how to continue. Any ideas? > The mender client had a go.mod with: golang.org/x/sys > v0.0.0-20191120155948-bd437916bb0e > > With regards, Gerrit > On Wednesday, October 28, 2020 at 11:12:18 AM UTC+1 > hugo.c...@essensium.com wrote: > >> >> >> Hi all, >> >> I have set up a github repository with the system call bindings for >> powerpc that we developed over the last months. >> >> https://github.com/hcornelis/golang-sys >> >> Branch 'ppc-system-calls-v1'. >> >> I compared the system call bindings that are available from >> https://github.com/golang/go/issues/37443 and the system call bindings >> that we developed for running Docker on powerpc 32 bit based systems. >> >> The status and differences can be summarized as: >> >> 1. We mapped a few system call bindings to call the 64 bit variant of the >> system call (eg. fstat). This was necessary for our applications (Docker) >> to work. >> >> 2. Our generated system call binding set is larger. I assume because of >> differences in the used kernel header files and used options to generate >> the system call bindings. >> >> 3. I also implemented changes in the scripts that generate the structs of >> the bindings. For instance the epoll event struct had wrong alignment for >> some of its members in our first version of the bindings, so this was >> corrected by specific updates in the generator scripts (in >> unix/mkpost.go). There was also a problem with Statfs_t struct. >> >> 4. I am not an expert wrt cgo, but if I understand correctly, through the >> use of the cgo tool that is distributed with gccgo and knows ppc, we >> avoided small problems with cgo invocation. >> >> 5. I believe (all) the patches we did to the generator script 'mkall.go' >> are superseded by the upstream patches. >> >> Regards, >> >> Hugo >> >> >> >> On Fri, Oct 23, 2020 at 10:10 AM Hugo Cornelis <hugo.c...@essensium.com> >> wrote: >> >>> >>> Hi Gerrit, >>> >>> Yes, that was the plan, but it looks like powerpc support was already >>> added to the sys/unix package last week. >>> >>> When we were working on this package we first had several subtle and >>> difficult to debug problems. As part of debugging, we developed unit tests >>> for validation of some of the system call bindings on powerpc using Qemu >>> and a physical device. >>> >>> I still plan to check the differences between our version of these >>> bindings and the upstream version and check if this could result in >>> problems (from quickly looking at the commits I can say that our bindings >>> should differ from the upstream version, but I have no idea about the >>> impact). >>> >>> I will get back to this next week and post here what I find. >>> >>> Hugo >>> >>> >>> On Thu, Oct 22, 2020 at 5:40 PM Gerrit Binnenmars <gerritbi...@gmail.com> >>> wrote: >>> >>>> >>>> >>>> Hello Hugo, >>>> >>>> I did not succeed in getting crosstool-ng produce a go tool. Instead I >>>> adapted the source of the "normal" go tool and simply removed the check and >>>> added a fmt.Fprintf instead. It shows that even with go build -compiler >>>> gccgo the test is first called with the gc compiler and then with the gccgo >>>> compiler. So the test will always fail. I assume I still am doing something >>>> wrong but don't understand what. >>>> >>>> Meanwhile with the adapted go tool I can build the mender client >>>> application with the ppc gccgo compiler. Next problem is the missing >>>> support for ppc in golang.org/x/sys/unix. >>>> I also noticed that the community is interested in this: >>>> https://github.com/golang/go/issues/37443 >>>> Are you willing to share your unix package for ppc 32 bit >>>> architectures? >>>> >>>> With regards, Gerrit >>>> 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...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/golang-nuts/ee3608cf-b4e8-4d6e-b7bf-c2c3c0422feen%40googlegroups.com >>>> <https://groups.google.com/d/msgid/golang-nuts/ee3608cf-b4e8-4d6e-b7bf-c2c3c0422feen%40googlegroups.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/cab0ff1d-ed10-41bc-b7e3-1082e98eb8c7n%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/cab0ff1d-ed10-41bc-b7e3-1082e98eb8c7n%40googlegroups.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/CAARrXCS-OQ-ukyWBzFPZKpx-3_inz%2BzoJ6gc10yyPBybMmnnMw%40mail.gmail.com.