这是indexloc提供的服务,不要输入任何密码
Skip to content

[turborepo] build fails on Linux ppc64el #5562

@matevy

Description

@matevy

What version of Turborepo are you using?

1.8.8

What package manager are you using / does the bug impact?

pnpm

What operating system are you using?

Linux

Describe the Bug

if I try to build 1.8.8 it fails at linking phase to C FFI.

I use FC38 inside docker container. Docker file to create the container attached. Same docker file was used on ppc64le machine and on x86_64 machine. x86_64 did not fail, while ppc64le did.

Looking deeper into the issue it seems gcc linker is not given correct libraries and include paths. Build was performed in cli subdirectory callink make turbo

Failing command:

CGO_ENABLED=1 go build -tags $(GO_TAG) -o go-turbo$(EXT) ./cmd/turbo

I enabled some extra info from linker:
CGO_ENABLED=1 go build -tags $(GO_TAG) -o go-turbo$(EXT) -ldflags="-v" ./cmd/turbo

result on ppc64le:

cp ../crates/turborepo-ffi/bindings.h ./internal/ffi/bindings.h
cp ../crates/turborepo-ffi/target/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_linux_ppc64le.a
CGO_ENABLED=1 go build -tags rust -o go-turbo -ldflags="-v" ./cmd/turbo

github.com/vercel/turbo/cli/cmd/turbo

HEADER = -H5 -T0x11000 -R0x10000
host link: "gcc" "-m64" "-o" "/tmp/go-build4055292333/b001/exe/a.out" "-rdynamic" "-Wl,--compress-debug-sections=zlib" "/tmp/go-link-4056176296/go.o" "/tmp/go-link-4056176296/000000.o" "/tmp/go-link-4056176296/000001.o" "/tmp/go-link-4056176296/000002.o" "/tmp/go-link-4056176296/000003.o" "/tmp/go-link-4056176296/000004.o" "/tmp/go-link-4056176296/000005.o" "/tmp/go-link-4056176296/000006.o" "/tmp/go-link-4056176296/000007.o" "/tmp/go-link-4056176296/000008.o" "/tmp/go-link-4056176296/000009.o" "/tmp/go-link-4056176296/000010.o" "/tmp/go-link-4056176296/000011.o" "/tmp/go-link-4056176296/000012.o" "/tmp/go-link-4056176296/000013.o" "/tmp/go-link-4056176296/000014.o" "/tmp/go-link-4056176296/000015.o" "/tmp/go-link-4056176296/000016.o" "/tmp/go-link-4056176296/000017.o" "/tmp/go-link-4056176296/000018.o" "/tmp/go-link-4056176296/000019.o" "/tmp/go-link-4056176296/000020.o" "/tmp/go-link-4056176296/000021.o" "/tmp/go-link-4056176296/000022.o" "/tmp/go-link-4056176296/000023.o" "/tmp/go-link-4056176296/000024.o" "/tmp/go-link-4056176296/000025.o" "/tmp/go-link-4056176296/000026.o" "/tmp/go-link-4056176296/000027.o" "/tmp/go-link-4056176296/000028.o" "/tmp/go-link-4056176296/000029.o" "/tmp/go-link-4056176296/000030.o" "/tmp/go-link-4056176296/000031.o" "/tmp/go-link-4056176296/000032.o" "/tmp/go-link-4056176296/000033.o" "/tmp/go-link-4056176296/000034.o" "/tmp/go-link-4056176296/000035.o" "/tmp/go-link-4056176296/000036.o" "/tmp/go-link-4056176296/000037.o" "/tmp/go-link-4056176296/000038.o" "/tmp/go-link-4056176296/000039.o" "/tmp/go-link-4056176296/000040.o" "/tmp/go-link-4056176296/000041.o" "/tmp/go-link-4056176296/000042.o" "/tmp/go-link-4056176296/000043.o" "/tmp/go-link-4056176296/000044.o" "/tmp/go-link-4056176296/000045.o" "/tmp/go-link-4056176296/000046.o" "/tmp/go-link-4056176296/000047.o" "/tmp/go-link-4056176296/000048.o" "/tmp/go-link-4056176296/000049.o" "/tmp/go-link-4056176296/000050.o" "/tmp/go-link-4056176296/000051.o" "/tmp/go-link-4056176296/000052.o" "/tmp/go-link-4056176296/000053.o" "/tmp/go-link-4056176296/000054.o" "/tmp/go-link-4056176296/000055.o" "/tmp/go-link-4056176296/000056.o" "/tmp/go-link-4056176296/000057.o" "/tmp/go-link-4056176296/000058.o" "/tmp/go-link-4056176296/000059.o" "/tmp/go-link-4056176296/000060.o" "/tmp/go-link-4056176296/000061.o" "/tmp/go-link-4056176296/000062.o" "/tmp/go-link-4056176296/000063.o" "/tmp/go-link-4056176296/000064.o" "/tmp/go-link-4056176296/000065.o" "/tmp/go-link-4056176296/000066.o" "/tmp/go-link-4056176296/000067.o" "/tmp/go-link-4056176296/000068.o" "-O2" "-g" "-lresolv" "-O2" "-g" "-O2" "-g" "-lpthread" "-O2" "-g" "-O2" "-g" "-no-pie"
/usr/lib/golang/pkg/tool/linux_ppc64le/link: running gcc failed: exit status 1
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_changed_files': /tmp/go-build/cgo-gcc-prolog:52: undefined reference to changed_files'
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_free_buffer': /tmp/go-build/cgo-gcc-prolog:79: undefined reference to free_buffer'
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_get_turbo_data_dir': /tmp/go-build/cgo-gcc-prolog:93: undefined reference to get_turbo_data_dir'
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_npm_subgraph': /tmp/go-build/cgo-gcc-prolog:111: undefined reference to npm_subgraph'
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_npm_transitive_closure': /tmp/go-build/cgo-gcc-prolog:129: undefined reference to npm_transitive_closure'
/usr/bin/ld: /tmp/go-link-4056176296/000007.o: in function _cgo_34d9b4f75f2c_Cfunc_previous_content': /tmp/go-build/cgo-gcc-prolog:147: undefined reference to previous_content'
collect2: error: ld returned 1 exit status

result on x86_64:
cp ../crates/turborepo-ffi/bindings.h ./internal/ffi/bindings.h
cp ../crates/turborepo-ffi/target/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_linux_amd64.a
CGO_ENABLED=1 go build -tags rust -o go-turbo -ldflags="-v" ./cmd/turbo

github.com/vercel/turbo/cli/cmd/turbo

HEADER = -H5 -T0x401000 -R0x1000
host link: "gcc" "-m64" "-o" "/tmp/go-build3800672814/b001/exe/a.out" "-rdynamic" "-Wl,--compress-debug-sections=zlib" "/tmp/go-link-2302300681/go.o" "/tmp/go-link-2302300681/000000.o" "/tmp/go-link-2302300681/000001.o" "/tmp/go-link-2302300681/000002.o" "/tmp/go-link-2302300681/000003.o" "/tmp/go-link-2302300681/000004.o" "/tmp/go-link-2302300681/000005.o" "/tmp/go-link-2302300681/000006.o" "/tmp/go-link-2302300681/000007.o" "/tmp/go-link-2302300681/000008.o" "/tmp/go-link-2302300681/000009.o" "/tmp/go-link-2302300681/000010.o" "/tmp/go-link-2302300681/000011.o" "/tmp/go-link-2302300681/000012.o" "/tmp/go-link-2302300681/000013.o" "/tmp/go-link-2302300681/000014.o" "/tmp/go-link-2302300681/000015.o" "/tmp/go-link-2302300681/000016.o" "/tmp/go-link-2302300681/000017.o" "/tmp/go-link-2302300681/000018.o" "/tmp/go-link-2302300681/000019.o" "/tmp/go-link-2302300681/000020.o" "/tmp/go-link-2302300681/000021.o" "/tmp/go-link-2302300681/000022.o" "/tmp/go-link-2302300681/000023.o" "/tmp/go-link-2302300681/000024.o" "/tmp/go-link-2302300681/000025.o" "/tmp/go-link-2302300681/000026.o" "/tmp/go-link-2302300681/000027.o" "/tmp/go-link-2302300681/000028.o" "/tmp/go-link-2302300681/000029.o" "/tmp/go-link-2302300681/000030.o" "/tmp/go-link-2302300681/000031.o" "/tmp/go-link-2302300681/000032.o" "/tmp/go-link-2302300681/000033.o" "/tmp/go-link-2302300681/000034.o" "/tmp/go-link-2302300681/000035.o" "/tmp/go-link-2302300681/000036.o" "/tmp/go-link-2302300681/000037.o" "/tmp/go-link-2302300681/000038.o" "/tmp/go-link-2302300681/000039.o" "/tmp/go-link-2302300681/000040.o" "/tmp/go-link-2302300681/000041.o" "/tmp/go-link-2302300681/000042.o" "/tmp/go-link-2302300681/000043.o" "/tmp/go-link-2302300681/000044.o" "/tmp/go-link-2302300681/000045.o" "/tmp/go-link-2302300681/000046.o" "/tmp/go-link-2302300681/000047.o" "/tmp/go-link-2302300681/000048.o" "/tmp/go-link-2302300681/000049.o" "/tmp/go-link-2302300681/000050.o" "/tmp/go-link-2302300681/000051.o" "/tmp/go-link-2302300681/000052.o" "/tmp/go-link-2302300681/000053.o" "/tmp/go-link-2302300681/000054.o" "/tmp/go-link-2302300681/000055.o" "/tmp/go-link-2302300681/000056.o" "/tmp/go-link-2302300681/000057.o" "/tmp/go-link-2302300681/000058.o" "/tmp/go-link-2302300681/000059.o" "/tmp/go-link-2302300681/000060.o" "/tmp/go-link-2302300681/000061.o" "/tmp/go-link-2302300681/000062.o" "/tmp/go-link-2302300681/000063.o" "/tmp/go-link-2302300681/000064.o" "/tmp/go-link-2302300681/000065.o" "/tmp/go-link-2302300681/000066.o" "/tmp/go-link-2302300681/000067.o" "/tmp/go-link-2302300681/000068.o" "/tmp/go-link-2302300681/000069.o" "-O2" "-g" "-lresolv" "-O2" "-g" "-L/turborepo/cli/internal/ffi" "-lturborepo_ffi_linux_amd64" "-lz" "-O2" "-g" "-lpthread" "-O2" "-g" "-O2" "-g" "-no-pie"
432635 symbols, 224110 reachable
176602 package symbols, 162822 hashed symbols, 66970 non-package symbols, 26241 external symbols
712356 liveness data
cargo build --manifest-path ../crates/turborepo/Cargo.toml
Compiling turborepo-lib v0.1.0 (/turborepo/crates/turborepo-lib)
Compiling turbo v0.1.0 (/turborepo/crates/turborepo)
Finished dev [unoptimized + debuginfo] target(s) in 6.17s

The difference is that x86_64 passes
-L/turborepo/cli/internal/ffi
-lturborepo_ffi_linux_amd64
-lz

to the linker, while ppc64le does not.

after changing this command line in Makefile to:
CGO_ENABLED=1 go build -tags $(GO_TAG) -o go-turbo$(EXT) -ldflags="-v -extldflags \"internal/ffi/libturborepo_ffi_linux_ppc64le.a /usr/lib64/libz.so\"" ./cmd/turbo

also ppc64le build became OK.

trying older versions, 1.8.3 was OK, 1.8.4 is the first one NOT OK.

Expected Behavior

build ok :-)

To Reproduce

create docker container

Dockerfile.zip

exec bash in the container, then:

export PATH=/root/go/bin/:$PATH
source "$HOME/.cargo/env"
git clone https://github.com/vercel/turborepo.git -b v1.8.8
cd turborepo
cd cli
make turbo

Reproduction Repo

git clone https://github.com/vercel/turborepo.git -b v1.8.8

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions