gollvm build fails

145 views
Skip to first unread message

Alex Markin

unread,
Oct 19, 2022, 8:20:24 AM10/19/22
to golang-nuts
Hello.

I'm trying to build gollvm on my gentoo system and get the following error:

FAILED: tools/gollvm/libgo/internal/.pic/goarch.o /home/alex/test/gollvm/build-debug/tools/gollvm/libgo/internal/.pic/goarch.o  
cd /home/alex/test/gollvm/build-debug/tools/gollvm/libgo && /usr/bin/cmake -E make_directory ./internal/.pic && /home/alex/test/gollvm/build-debug/./bin/llvm
-goc -c -o /home/alex/test/gollvm/build-debug/tools/gollvm/libgo/internal/.pic/goarch.o -fPIC -fgo-pkgpath=internal/goarch -I . /home/alex/test/gollvm/llvm-p
roject/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:15:35: error: reference to undefined name '_ArchFamily'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:18:19: error: reference to undefined name '_BigEndian'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:21:29: error: reference to undefined name '_DefaultPhysPa
geSize'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:25:19: error: reference to undefined name '_PCQuantum'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:28:20: error: reference to undefined name '_Int64Align'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:35:22: error: reference to undefined name '_MinFrameSize'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/internal/goarch/goarch.go:39:20: error: reference to undefined name '_StackAlign'

What can be the reason of such error? On another ubuntu system everything goes correctly.

The cmake line:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -G Ninja ../llvm-project/llvm

Than McIntosh

unread,
Oct 19, 2022, 9:47:53 AM10/19/22
to Alex Markin, golang-nuts
Hi,

Those constants are supposed to be defined in the generated file <buildarea>/tools/gollvm/libgo/zgoarch.go, which is written as out part of the gollvm build process, e.g. here


What does the zgoarch.go file look like in your build area?

Thanks, Than


--
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/9ad0d8dc-d118-45d2-984e-9cdf36ab4f28n%40googlegroups.com.

Alex Markin

unread,
Oct 19, 2022, 6:09:50 PM10/19/22
to Than McIntosh, golang-nuts
There is no zgoarch.go file in the build area. It seems that it was not created by the build system. I watched the logs and there were no lines to create it. In the directory libgo I have only the following *go files:

epoll.go  goroot.go  libcalls.go  syscall_arch.go  tmp-libcalls.go

So I can't understand why the rule for zgoarch is not called. Probably some env variable?

ср, 19 окт. 2022 г. в 16:47, Than McIntosh <th...@google.com>:

Than McIntosh

unread,
Oct 20, 2022, 8:48:48 AM10/20/22
to Alex Markin, golang-nuts
>There is no zgoarch.go file in the build area. It seems that it was not created by the build system.

I've oversimplified things a bit -- what cmake does is write out tools/gollvm/libgo/zgoarch.go.tmp, and then add a build rule for zgoarch.go that copies the *.tmp file to the *.go file if they are different.

Do you have tools/gollvm/libgo/zgoarch.go.tmp in your build area? What sort of content is in that file? What happens when you do

   $ ninja -v -d explain tools/gollvm/libgo/zgoarch.go

You should see something like

ninja explain: output tools/gollvm/libgo/zgoarch.go doesn't exist
[1/1] cd /x/llvm-project/build-relwithdbg/tools/gollvm/libgo && /usr/bin/cmake -E copy_if_different /x/llvm-project/build-relwithdbg/tools/gollvm/libgo/zgoarch.go.tmp /x/llvm-project/build-relwithdbg/tools/gollvm/libgo/zgoarch.go

Thanks, Than



Alex Markin

unread,
Oct 25, 2022, 3:29:56 AM10/25/22
to Than McIntosh, golang-nuts
> Do you have tools/gollvm/libgo/zgoarch.go.tmp in your build area? What sort of content is in that file?

No


$ ninja -v -d explain tools/gollvm/libgo/zgoarch.go
ninja: error: unknown target 'tools/gollvm/libgo/zgoarch.go'

$ gcc -dumpmachine
x86_64-pc-linux-gnu

$ clang -dumpmachine
x86_64-pc-linux-gnu

I tried manually setting up different target triples (for example the same as on a working machine) but
it did not help.


чт, 20 окт. 2022 г. в 15:48, Than McIntosh <th...@google.com>:

Than McIntosh

unread,
Oct 25, 2022, 10:05:20 AM10/25/22
to Alex Markin, golang-nuts
Weird. I am scratching my head.

At this point if I was debugging it myself on your system I would rerun cmake passing it the "--trace-expand" flag (which will generate giant volumes of output), then look in the trace to see what is happening when the cmake rules in question fire. You should see something like

...
/mybuildarea/llvm-project/llvm/tools/gollvm/libgo/CMakeLists.txt(232):  set(zgoarchdotgo ${libgo_binroot}/zgoarch.go )
/mybuildarea/llvm-project/llvm/tools/gollvm/libgo/CMakeLists.txt(233):  set(zgoarchtmp ${libgo_binroot}/zgoarch.go.tmp )
/mybuildarea/llvm-project/llvm/tools/gollvm/libgo/CMakeLists.txt(234):  mkzgoarch(${goarch} ${zgoarchtmp} ${libgo_scriptroot} )
/mybuildarea/llvm-project/llvm/tools/gollvm/cmake/modules/AutoGenGo.cmake(75):  file(REMOVE ${outfile} )
/mybuildarea/llvm-project/llvm/tools/gollvm/cmake/modules/AutoGenGo.cmake(76):  file(WRITE ${outfile} package goarch\n\n )
/mybuildarea/llvm-project/llvm/tools/gollvm/cmake/modules/AutoGenGo.cmake(78):  file(APPEND ${outfile} const GOARCH = \"${goarch}\"\n\n )
...

If these rules are not firing, then hopefully the trace output will have some suggestion as to why.

Thanks, Than



Alex Markin

unread,
Oct 26, 2022, 5:28:43 AM10/26/22
to Than McIntosh, golang-nuts
Thank you for your advice!

I compared the good and the bad build log and found out the lack of rule zgoarchat all. So I mentioned the difference in makefiles and it turned out that I used different revisions of gollvm. It is interesting that with gcc this problem did not appear (but in both gcc and llvm cases I got the linkage problem described below).

After that I got the next problem: cmake failed to set the SIZEOF_STRUCT_EPOLL_EVENT and STRUCT_EPOLL_EVENT_FD_OFFSET. I do not know what to do with it. So I just hardcoded them in the cmake/modules/AutoGenGo.cmake (values 12 and 4 respectively). After that, the cmake worked fine.

Then the build failed with other problem:

/home/alex/test/gollvm/build-debug/./bin/llvm-goc -o /home/alex/test/gollvm/build-de
bug/tools/gollvm/gotools/go go_.o -I /home/alex/test/gollvm/build-debug/tools/gollvm/libgo -L /home/alex/test/gollvm/build-debug/tools/gollvm/libgo /home/ale
x/test/gollvm/build-debug/tools/gollvm/libgo/libgotool.a
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot open crtn.o: Нет такого файла или каталога
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: warning: skipping incompatible /usr/lib/libm.so while searching for m
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -lm
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: warning: skipping incompatible /usr/lib/libc.so while searching for c
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -lc
/usr/lib64/crt1.o:function _start: error: undefined reference to '__libc_start_main'
/home/alex/test/gollvm/llvm-project/llvm/tools/gollvm/gofrontend/libgo/runtime/go-main.c:59: error: undefined reference to 'abort'
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/libgcc.a(generic-morestack.o):function __morestack_fail: error: undefined reference to 'writev'
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/libgcc.a(generic-morestack.o):function __morestack_fail: error: undefined reference to 'abort'
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/libgcc.a(generic-morestack.o):function __morestack_release_segments: error: undefined reference to 'syscall'
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/libgcc.a(generic-morestack.o):function __morestack_release_segments: error: undefined reference to 'free'
/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/libgcc.a(generic-morestack.o):function __morestack_release_segments: error: undefined reference to 'free'
...

That was even more weird. And also that was almost like the issue 26405 (https://github.com/golang/go/issues/26405). I do not know the good way to solve it so I just hardcoded in the file driver/GnuTools.cpp the following things:

cmdArgs.push_back(args.MakeArgString(toolchain().getFilePath(/usr/lib64/crt1.o)));
cmdArgs.push_back(args.MakeArgString("/usr/lib64/crti.o"));
cmdArgs.push_back(args.MakeArgString("-L/usr/lib64/"));
cmdArgs.push_back(args.MakeArgString("/usr/lib64/crtn.o"));

After that my build finished successfully.

Again, thank you for your help.

вт, 25 окт. 2022 г. в 17:04, Than McIntosh <th...@google.com>:
Reply all
Reply to author
Forward
0 new messages