llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.22k stars 11.64k forks source link

bolt doesn't build with -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DLLVM_DYLIB_COMPONENTS=all -DLLVM_ENABLE_LTO=FULL #53500

Open berolinux opened 2 years ago

berolinux commented 2 years ago

Trying to build current (2022/01/31) git master LLVM with bolt enabled, using -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON -DLLVM_LINK_LLVM_DYLIB:BOOL=ON -DLLVM_DYLIB_COMPONENTS=all -DLLVM_ENABLE_LTO=FULL results in a link time error on the bolt executable:

[40/116] Linking CXX executable bin/llvm-bolt
FAILED: bin/llvm-bolt 
: && /usr/bin/clang++ -Os -fomit-frame-pointer -g3 -gdwarf-4 -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fstack-protector-all --param=ssp-buffer-size=4 -O3  -march=znver1 -mtune=znver1 -mmmx -msse -msse2 -mssse3 -msse4a -msse4.1 -msse4.2 -mavx -mavx2 -msha -maes -mclflushopt -mfsgsbase -mrdrnd -mfma -mrdseed -mpopcnt -madx -mbmi -mbmi2 -mfxsr -mxsave -mxsaveopt -mxsavec -mxsaves -mmwaitx -mclzero -mfpmath=sse -O3 -fpic -fno-semantic-interposition -Qunused-arguments -Wl,-Bsymbolic-functions -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -flto=full -Os -fomit-frame-pointer -g3 -gdwarf-4 -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fstack-protector-all --param=ssp-buffer-size=4 -O3  -march=znver1 -mtune=znver1 -mmmx -msse -msse2 -mssse3 -msse4a -msse4.1 -msse4.2 -mavx -mavx2 -msha -maes -mclflushopt -mfsgsbase -mrdrnd -mfma -mrdseed -mpopcnt -madx -mbmi -mbmi2 -mfxsr -mxsave -mxsaveopt -mxsavec -mxsaves -mmwaitx -mclzero -mfpmath=sse -O3 -fpic -fno-semantic-interposition -Qunused-arguments -Wl,-Bsymbolic-functions -Wl,--disable-new-dtags,-rpath,/home/bero/abf/llvm/BUILD/llvm-project-main/build/lib64,-rpath,/home/bero/abf/llvm/BUILD/llvm-project-main/build/lib -Wl,--color-diagnostics -flto=full    -Wl,--gc-sections tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o -o bin/llvm-bolt  lib64/libLLVM-14.so && :
ld.lld: error: undefined symbol: opts::BoltCategory
>>> referenced by CommandLine.h:468 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:468)
>>>               lto.tmp:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced by CommandLine.h:468 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:468)
>>>               lto.tmp:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced by CommandLine.h:468 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:468)
>>>               lto.tmp:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced 2 more times

ld.lld: error: undefined symbol: opts::BoltDiffCategory
>>> referenced by CommandLine.h:468 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:468)
>>>               lto.tmp:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced by ld-temp.o
>>>               lto.tmp:(opts::BoltDiffCategories)

ld.lld: error: undefined symbol: llvm::bolt::BoltRevision
>>> referenced by llvm-bolt.cpp:96 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:96)
>>>               lto.tmp:(printBoltRevision(llvm::raw_ostream&))
>>> referenced by llvm-bolt.cpp:96 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:96)
>>>               lto.tmp:(printBoltRevision(llvm::raw_ostream&))

ld.lld: error: undefined symbol: opts::HeatmapMode
>>> referenced by llvm-bolt.cpp:230 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:230)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:237 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:237)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:237 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:237)
>>>               lto.tmp:(main)
>>> referenced 1 more times

ld.lld: error: undefined symbol: opts::OutputFilename[abi:cxx11]
>>> referenced by basic_string.h:920 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/basic_string.h:920)
>>>               lto.tmp:(main)
>>> referenced by basic_string.h:920 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/basic_string.h:920)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: opts::PerfData[abi:cxx11]
>>> referenced by basic_string.h:920 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/basic_string.h:920)
>>>               lto.tmp:(main)
>>> referenced by basic_string.h:920 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/basic_string.h:920)
>>>               lto.tmp:(main)
>>> referenced by basic_string.h:920 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/basic_string.h:920)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: opts::AggregateOnly
>>> referenced by CommandLine.h:1412 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               lto.tmp:(main)
>>> referenced by CommandLine.h:1412 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               lto.tmp:(main)
>>> referenced by CommandLine.h:1417 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:1417)
>>>               lto.tmp:(main)
>>> referenced 1 more times

ld.lld: error: undefined symbol: llvm::bolt::DataAggregator::checkPerfDataMagic(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:116 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:116)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: opts::DiffOnly
>>> referenced by CommandLine.h:1412 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               lto.tmp:(main)
>>> referenced by CommandLine.h:1417 (/home/bero/abf/llvm/BUILD/llvm-project-main/llvm/include/llvm/Support/CommandLine.h:1417)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::RewriteInstance(llvm::object::ELFObjectFileBase*, int, char const* const*, llvm::StringRef)
>>> referenced by llvm-bolt.cpp:305 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:305)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:308 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:308)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:255 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:255)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::setProfile(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:306 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:306)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:309 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:309)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:264 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:264)
>>>               lto.tmp:(main)
>>> referenced 1 more times

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::MachORewriteInstance(llvm::object::MachOObjectFile*, llvm::StringRef)
>>> referenced by llvm-bolt.cpp:278 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:278)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::setProfile(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:281 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:281)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::run()
>>> referenced by llvm-bolt.cpp:284 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:284)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::~MachORewriteInstance()
>>> referenced by llvm-bolt.cpp:285 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:285)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:285 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:285)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::run()
>>> referenced by llvm-bolt.cpp:315 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:315)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:320 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:320)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:276 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:276)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::compare(llvm::bolt::RewriteInstance&)
>>> referenced by llvm-bolt.cpp:321 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:321)
>>>               lto.tmp:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::~RewriteInstance()
>>> referenced by llvm-bolt.cpp:322 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:322)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:322 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:322)
>>>               lto.tmp:(main)
>>> referenced by llvm-bolt.cpp:277 (/home/bero/abf/llvm/BUILD/llvm-project-main/bolt/tools/driver/llvm-bolt.cpp:277)
>>>               lto.tmp:(main)
>>> referenced 3 more times

ld.lld: error: undefined symbol: opts::AggregatorCategory
>>> referenced by ld-temp.o
>>>               lto.tmp:(opts::Perf2BoltCategories)

ld.lld: error: undefined symbol: opts::BoltOutputCategory
>>> referenced by ld-temp.o
>>>               lto.tmp:(opts::Perf2BoltCategories)
>>> referenced by ld-temp.o
>>>               lto.tmp:(opts::BoltCategories)

ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
llvmbot commented 2 years ago

@llvm/issue-subscribers-bolt

Adminisnyator commented 2 years ago

Reproduced the issue with a bunch of different configuration options and it seems that the issue is caused by bolt not adding its neccessary libraries to the LINK_FLAGS section in the build.ninja. My workaround was adding the already build bolt libraries from build/lib and also added the aarch64 libraries as they were neededb by what I assume to be libLLVMBOLTTARGETAArch64.a.

e.g: lib/libLLVMBOLTCore.a lib/libLLVMBOLTPasses.a lib/libLLVMBOLTProfile.a lib/libLLVMBOLTRewrite.a lib/libLLVMBOLTRuntimeLibs.a lib/libLLVMBOLTTargetX86.a lib/libLLVMBOLTUtils.a lib/libLLVMBOLTTargetAArch64.a lib/liblldbPluginABIAArch64.a lib/liblldbPluginArchitectureAArch64.a lib/libLLVMAArch64AsmParser.a lib/libLLVMAArch64CodeGen.a lib/libLLVMAArch64Desc.a lib/libLLVMAArch64Disassembler.a lib/libLLVMAArch64Info.a lib/libLLVMAArch64Utils.a lib/libLLVMBOLTTargetAArch64.a lib/libLLVMExegesisAArch64.a