如何解决如何仅为llvm-10构建检测到的libcxx?
我在这里遵循了指示:
https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo
但是由于llvm-tblgen中的未初始化值,构建失败:
[244/3059] Building Attributes.inc...
FAILED: include/llvm/IR/Attributes.inc
cd builds/msan-10.0.1 && builds/msan-10.0.1/bin/llvm-tblgen -gen-attrs -I llvm-project/llvm/include/llvm/IR -I llvm-project/llvm/include llvm-project/llvm/include/llvm/IR/Attributes.td --write-if-changed -o include/llvm/IR/Attributes.inc -d include/llvm/IR/Attributes.inc.d
...
SUMMARY: MemorySanitizer: use-of-uninitialized-value /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_tree.h:1348:4 in _M_lower_bound_tr<llvm::StringRef,void>
Exiting
类似的错误,甚至可以通过-DCMAKE_CXX_FLAGS="-stdlib=libc++"
切换到libc ++
SUMMARY: MemorySanitizer: use-of-uninitialized-value llvm-project/llvm/lib/Support/StringRef.cpp:349:3 in llvm::StringRef::split(llvm::SmallVectorImpl<llvm::StringRef>&,char,int,bool) const
这里的问题是项目建立了很多不需要的辅助二进制文件,包括llvm-tblgen。我必须使用-DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-10
来消除此错误。
但是,现在构建需要30分钟。过去速度更快,而且可以在没有所有额外垃圾箱的情况下进行构建。我应该使用什么cmake参数来抑制它们?过去只有llvm-lit建立。
$ ls msan-10.0.1/bin
bugpoint llvm-cvtres llvm-jitlink llvm-opt-fuzzer llvm-strip
count llvm-cxxdump llvm-lib llvm-opt-report llvm-symbolizer
dsymutil llvm-cxxfilt llvm-link llvm-pdbutil llvm-tblgen
FileCheck llvm-cxxmap llvm-lipo llvm-PerfectShuffle llvm-undname
llc llvm-diff llvm-lit llvm-profdata llvm-xray
lli llvm-dis llvm-locstats llvm-ranlib llvm-yaml-numeric-parser-fuzzer
lli-child-target llvm-dlltool llvm-lto llvm-rc not
llvm-addr2line llvm-dwarfdump llvm-lto2 llvm-readelf obj2yaml
llvm-ar llvm-dwp llvm-mc llvm-readobj opt
llvm-as llvm-elfabi llvm-mca llvm-reduce sancov
llvm-bcanalyzer llvm-exegesis llvm-microsoft-demangle-fuzzer llvm-rtdyld sanstats
llvm-cat llvm-extract llvm-modextract llvm-size verify-uselistorder
llvm-cfi-verify llvm-ifs llvm-mt llvm-special-case-list-fuzzer yaml2obj
llvm-config llvm-install-name-tool llvm-nm llvm-split yaml-bench
llvm-cov llvm-isel-fuzzer llvm-objcopy llvm-stress
llvm-c-test llvm-itanium-demangle-fuzzer llvm-objdump llvm-strings
更新 使用LLVM_BUILD_TOOLS会有所帮助:
-DLLVM_BUILD_TOOLS=off -DLLVM_TABLEGEN=$(which llvm-tblgen)
它仍然生成更少的二进制文件:
$ ls bin
count llvm-go llvm-microsoft-demangle-fuzzer llvm-readobj not
FileCheck llvm-install-name-tool llvm-objcopy llvm-special-case-list-fuzzer yaml-bench
lli-child-target llvm-isel-fuzzer llvm-opt-fuzzer llvm-strip
llvm-addr2line llvm-itanium-demangle-fuzzer llvm-PerfectShuffle llvm-symbolizer
llvm-ar llvm-lib llvm-ranlib llvm-tblgen
llvm-dlltool llvm-lit llvm-readelf llvm-yaml-numeric-parser-fuzzer
我实际上在PATH中具有所有二进制文件,因此从理论上讲,我不需要构建它们。因此,我尝试:-DLLVM_INCLUDE_TOOLS=off
。但是随后cmake配置失败,出现许多cmake错误,如下所示:
CMake Error at cmake/modules/AddLLVM.cmake:1636 (add_dependencies):
The dependency target "bugpoint" of target "check-llvm-tools-yaml2obj-coff"
does not exist.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1688 (add_lit_target)
test/CMakeLists.txt:181 (add_lit_testsuites)
CMake Error at cmake/modules/AddLLVM.cmake:1636 (add_dependencies):
The dependency target "dsymutil" of target "check-llvm-tools-yaml2obj-coff"
does not exist.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1688 (add_lit_target)
test/CMakeLists.txt:181 (add_lit_testsuites)
CMake Error at cmake/modules/AddLLVM.cmake:1636 (add_dependencies):
The dependency target "llc" of target "check-llvm-tools-yaml2obj-coff" does
not exist.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1688 (add_lit_target)
test/CMakeLists.txt:181 (add_lit_testsuites)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。