JuliaPackaging / BinaryBuilderBase.jl

https://juliapackaging.github.io/BinaryBuilderBase.jl/stable
MIT License
11 stars 31 forks source link

[Runner] Fix MSAN C++ compiler with LLVM 13 #366

Closed giordano closed 7 months ago

giordano commented 7 months ago

Trying to build https://github.com/JuliaPackaging/Yggdrasil/pull/7872 on master for x86_64-linux-gnu-cxx11-sanitize+memory (see https://github.com/JuliaPackaging/Yggdrasil/pull/7872#issuecomment-1913141689):

sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # echo 'int main (void) { return 0; }' | SUPER_VERBOSE=1 c++ -x c++ - -g -O2
ccache /opt/x86_64-linux-musl/bin/clang++ -target x86_64-linux-gnu --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -D_GLIBCXX_USE_CXX11_ABI=1 -stdlib=libstdc++ -march=x86-64 -mtune=generic -fsanitize=memory -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0 -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/x86_64-linux-gnu -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/backward -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/include -x c++ - -g -O2 -rtlib=libgcc -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -fuse-ld=x86_64-linux-gnu -fsanitize=memory
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -z now -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crt1.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crti.o /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/crtbegin.o -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0 -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64 -L/opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a.syms --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms /tmp/--fa2059.o -lstdc++ -lm --no-as-needed -lpthread -lrt -lm -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/crtend.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crtn.o
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: warning: libc.musl-x86_64.so.1, needed by /opt/x86_64-linux-musl/bin/../lib/gcc/x86_64-linux-musl/6.1.0/../../../../x86_64-linux-musl/lib/../lib64/libstdc++.so, not found (try using -rpath or -rpath-link)
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: a.out: hidden symbol `fstat' in /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib64/libc_nonshared.a(fstat.oS) is referenced by DSO
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld: final link failed: Bad value
clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # 

On this PR:

sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # echo 'int main (void) { return 0; }' | SUPER_VERBOSE=1 c++ -x c++ - -g -O2
ccache /opt/x86_64-linux-musl/bin/clang++ -target x86_64-linux-gnu --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -D_GLIBCXX_USE_CXX11_ABI=1 -stdlib=libstdc++ --gcc-toolchain=/opt/x86_64-linux-gnu -march=x86-64 -mtune=generic -fsanitize=memory -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0 -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/x86_64-linux-gnu -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/6.1.0/backward -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/include -isystem /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/include -x c++ - -g -O2 -rtlib=libgcc -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -fuse-ld=x86_64-linux-gnu -fsanitize=memory
/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu-ld --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root -z now -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crt1.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crti.o /opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/crtbegin.o -L/opt/x86_64-linux-gnu/lib/gcc/opt/x86_64-linux-gnu/lib/gcc -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0 -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/../../../../x86_64-linux-gnu/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib/../lib64 -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64 -L/opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/../../../../x86_64-linux-gnu/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/lib -L/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan-x86_64.a.syms --whole-archive /opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a --no-whole-archive --dynamic-list=/opt/x86_64-linux-musl/lib/clang/13.0.1/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms /tmp/--c81f80.o -lstdc++ -lm --no-as-needed -lpthread -lrt -lm -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc /opt/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/6.1.0/crtend.o /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/lib/../lib64/crtn.o
sandbox:${WORKSPACE}/srcdir/gmp-6.3.0 # 

Note the completely different linker invocation, on master we're picking up directories and libraries/object files from the host environment, in this PR we only use target directories/libraries, and MSAN libraries under "host" directories (but just because they're installed there, they're coming from the target LLVMCompileRT build).

It's a bit complicated to test this properly because it requires setting up the MSAN compiler, for which we don't have a straightforward way to do it.

gbaraldi commented 7 months ago

Why is it using clang13? I think we might need a version check for clang for this.

giordano commented 7 months ago

Why is it using clang13?

Because we don't have compiler rt for llvm 16 yet: https://github.com/JuliaPackaging/Yggdrasil/pull/7877

think we might need a version check for clang for this.

It's there already.

gbaraldi commented 7 months ago

Oh I missed that :(. I guess reviewing code from the phone isn’t the best