Ronald Klop <ronald_at_FreeBSD.org> wrote on Date: Thu, 17 Aug 2023 10:45:06 UTC :
> To save time on my Raspberry Pi I would like to build FreeBSD using a llvm > pkg instead of llvm in the tree. > > My /etc/make.conf: > WITHOUT_TOOLCHAIN=yes > LD=/usr/local/llvm16/bin/ld.lld > CC=/usr/local/llvm16/bin/clang > CXX=/usr/local/llvm16/bin/clang++ > CPP=/usr/local/llvm16/bin/clang-cpp > OBJCOPY=/usr/local/llvm16/bin/llvm-objcopy > > #WITHOUT_CLEAN=yes More normal would likely be something like (but expressed just in command line notation below): make -j$(sysctl -n hw.ncpu) CROSS_TOOLCHAIN=llvm16 WITHOUT_TOOLCHAIN=yes buildworld buildkernel The CROSS_TOOLCHAIN hook is already present and avoids needing the explicit assignments to LD, CC, CXX, CPP, and OBJCOPY . (Those presume the host is compatible with the target, by the way. See below for notation that does not presume such --but allows such.) For reference, CROSS_TOOLCHAIN=llvm16 uses: # more /usr/local/share/toolchains/llvm16.mk XCC=/usr/local/bin/clang16 XCXX=/usr/local/bin/clang++16 XCPP=/usr/local/bin/clang-cpp16 XLD=/usr/local/bin/ld.lld16 CROSS_BINUTILS_PREFIX=/var/empty X_COMPILER_TYPE=clang that is installed as part of devel/llvm16 . > This fails in: > > /usr/local/llvm16/bin/clang++ -O2 -pipe -fno-common -fPIE > -Wno-format-zero-length -nobuiltininc -idirafter > /usr/local/llvm16/lib/clang/16/include -fstack-protector-strong > -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter > -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow > -Wunused-parameter -Wcast-align -Wchar-subscripts -Wdate-time > -Wmissing-variable-declarations -Wno-empty-body -Wno-string-plus-int > -Wno-unused-const-variable -Wno-error=unused-but-set-parameter -O0 -g0 > -Qunused-arguments -I/usr/obj/usr/src/amd64.amd64/tmp/usr/include/private > -I/usr/src/contrib/googletest/googlemock/include > -I/usr/src/contrib/googletest/googlemock > -I/usr/src/contrib/googletest/googletest/include > -I/usr/src/contrib/googletest/googletest > -I/usr/obj/usr/src/amd64.amd64/tmp/usr/include/private -DGTEST_HAS_POSIX_RE=1 > -DGTEST_HAS_PTHREAD=1 -DGTEST_HAS_STREAM_REDIRECTION=1 -frtti > -Wno-deprecated-copy -Wno-signed-unsigned-wchar -DGTEST_HAS_POSIX_RE=1 > -DGTEST_HAS_PTHREAD=1 -DGTEST_HAS_STREAM_REDIRECTION=1 -frtti > -Wno-deprecated-copy -Wno-signed-unsigned-wchar -fPIE -std=c++14 > -Wno-deprecated-copy -Wno-error=inconsistent-missing-override > -Wno-error=missing-variable-declarations -Wno-error=sign-compare > -Wno-error=unused-parameter -Wno-c++11-extensions -Wl,-zrelro -pie > --ld-path=/usr/local/llvm16/bin/ld.lld -o gmock-actions_test > gmock-actions_test.o -lprivategmock_main -lprivategmock -lprivategtest > ld.lld: error: undefined symbol: testing::internal::DeathTest::Create(char > const*, testing::Matcher<std::__1::basic_string<char, > std::__1::char_traits<char>, std::__1::allocator<char>> const&>, char const*, > int, testing::internal::DeathTest**) > >>> referenced by gmock-actions_test.cc > >>> gmock-actions_test.o:(testing::(anonymous > >>> namespace)::BuiltInDefaultValueDeathTest_IsUndefinedForReferences_Test::TestBody()) > >>> referenced by gmock-actions_test.cc > >>> gmock-actions_test.o:(testing::(anonymous > >>> namespace)::BuiltInDefaultValueDeathTest_IsUndefinedForReferences_Test::TestBody()) > >>> referenced by gmock-actions_test.cc > >>> gmock-actions_test.o:(testing::(anonymous > >>> namespace)::BuiltInDefaultValueDeathTest_IsUndefinedForNonDefaultConstructibleType_Test::TestBody()) > >>> referenced 4 more times > > ld.lld: error: undefined symbol: > testing::Expectation::Expectation(std::__1::shared_ptr<testing::internal::ExpectationBase> > const&) I'm not making claims about the specifics of this error being produced vs. not the "more normal" way. But it would be worth a try. > Any thoughts on how to fix this? > Compiling with the in tree llvm does work properly. > > NB: building 14-CURRENT in a 14-CURRENT jail on 13.2-RELEASE. And this > example is my test on amd64 to make it work before I will do this in the slow > RPI4. === Mark Millard marklmi at yahoo.com