Perhaps not something that would be desirable for ports due to added runtime dependencies on llvm but it would be helpful to have a version of llvm compiled as a single shared library for using with Mesa.
https://llvm.org/docs/CMake.html Adding -DLLVM_BUILD_LLVM_DYLIB:Bool=True builds a mostly empty shared library. $ llvm-config --shared-mode static $ ldd /usr/local/lib/libLLVM.so /usr/local/lib/libLLVM.so: Start End Type Open Ref GrpRef Name 000005c846e6c000 000005c84706e000 dlib 2 0 0 /usr/local/lib/libLLVM-5.0.so 000005c815519000 000005c815722000 rlib 0 1 0 /usr/lib/libpthread.so.25.1 000005c9094d6000 000005c9096ed000 rlib 0 1 0 /usr/lib/libz.so.5.0 000005c8c6b91000 000005c8c6db7000 rlib 0 1 0 /usr/lib/libm.so.10.0 000005c8e50ca000 000005c8e538a000 rlib 0 1 0 /usr/lib/libc++.so.1.0 000005c8a444e000 000005c8a46ae000 rlib 0 1 0 /usr/lib/libc++abi.so.0.0 $ nm /usr/local/lib/libLLVM.so 00000000 F /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/llvm-shlib/libllvm.cpp 00200df0 a _DYNAMIC 00200fb0 a _GLOBAL_OFFSET_TABLE_ W _Jv_RegisterClasses 00201008 A __bss_start W __cxa_atexit W __cxa_finalize 00201000 D __data_start 00201000 d __dso_handle 00200de0 r __guard_local 00201008 A _edata 00201010 A _end 00000490 T _fini 000002e0 T _init W _thread_atfork 00000340 t atexit 00000360 t pthread_atfork Adding -DLLVM_LINK_LLVM_DYLIB:Bool=True is apparently required as well but this errors out at the end of the build. I changed -DLLVM_REQUIRES_RTTI:Bool=True which is intended to be used internally in the build system with the documented -DLLVM_ENABLE_RTTI:Bool=True but that doesn't noticably change any behaviour. Anyone have an idea how to get the llvm port to build a useable libLLVM.so? [3097/3167] : && /usr/ports/pobj/llvm-5.0.1/bin/c++ -O2 -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -Wno-nested-anon-types -DNDEBUG -Wl,-allow-shlib-undefined -Wl,-O3 tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o -o bin/arcmt-test -L/usr/ports/pobj/llvm-5.0.1/build-amd64/lib -Wl,-rpath,"\$ORIGIN/../lib" -lpthread lib/libclangARCMigrate.a lib/libclangBasic.a lib/libclangFrontend.a lib/libclangLex.a lib/libclangDriver.a lib/libclangParse.a lib/libclangSerialization.a lib/libclangSema.a lib/libclangEdit.a lib/libclangStaticAnalyzerCheckers.a lib/libclangASTMatchers.a lib/libclangStaticAnalyzerCore.a lib/libclangAnalysis.a lib/libclangAST.a lib/libclangRewrite.a lib/libclangLex.a lib/libclangBasic.a -lLLVM-5.0 -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && : FAILED: bin/arcmt-test : && /usr/ports/pobj/llvm-5.0.1/bin/c++ -O2 -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -Wno-nested-anon-types -DNDEBUG -Wl,-allow-shlib-undefined -Wl,-O3 tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o -o bin/arcmt-test -L/usr/ports/pobj/llvm-5.0.1/build-amd64/lib -Wl,-rpath,"\$ORIGIN/../lib" -lpthread lib/libclangARCMigrate.a lib/libclangBasic.a lib/libclangFrontend.a lib/libclangLex.a lib/libclangDriver.a lib/libclangParse.a lib/libclangSerialization.a lib/libclangSema.a lib/libclangEdit.a lib/libclangStaticAnalyzerCheckers.a lib/libclangASTMatchers.a lib/libclangStaticAnalyzerCore.a lib/libclangAnalysis.a lib/libclangAST.a lib/libclangRewrite.a lib/libclangLex.a lib/libclangBasic.a -lLLVM-5.0 -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && : tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o: In function `llvm::cl::Option::~Option()': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text._ZN4llvm2cl6OptionD2Ev[_ZN4llvm2cl6OptionD2Ev]+0xa): undefined reference to `vtable for llvm::cl::Option' tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o: In function `llvm::cl::opt<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false, llvm::cl::parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::~opt()': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text._ZN4llvm2cl3optINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEELb0ENS0_6parserIS8_EEED2Ev[_ZN4llvm2cl3optINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEELb0ENS0_6parserIS8_EEED2Ev]+0x3b): undefined reference to `vtable for llvm::cl::Option' tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o: In function `llvm::cl::list<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, llvm::cl::parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::~list()': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text._ZN4llvm2cl4listINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbNS0_6parserIS8_EEED2Ev[_ZN4llvm2cl4listINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbNS0_6parserIS8_EEED2Ev]+0x9e): undefined reference to `vtable for llvm::cl::Option' tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o: In function `GetExecutablePath(char const*)': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text._Z17GetExecutablePathPKc+0x12): undefined reference to `llvm::sys::fs::getMainExecutable(char const*, void*)' tools/clang/tools/arcmt-test/CMakeFiles/arcmt-test.dir/arcmt-test.cpp.o: In function `main': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text.main+0x45): undefined reference to `llvm::sys::PrintStackTraceOnErrorSignal(llvm::StringRef, bool)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/tools/arcmt-test/arcmt-test.cpp:(.text.main+0xcf): undefined reference to `llvm::cl::ParseCommandLineOptions(int, char const* const*, llvm::StringRef, llvm::raw_ostream*)' ... /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZNK5clang12VersionTuple11getAsStringEv+0x5f): undefined reference to `llvm::raw_string_ostream::~raw_string_ostream()' lib/libclangBasic.a(VersionTuple.cpp.o): In function `clang::operator<<(llvm::raw_ostream&, clang::VersionTuple const&)': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0x1a): undefined reference to `llvm::raw_ostream::operator<<(unsigned long)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0x5c): undefined reference to `llvm::raw_ostream::write(unsigned char)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0x67): undefined reference to `llvm::raw_ostream::operator<<(unsigned long)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0xaa): undefined reference to `llvm::raw_ostream::write(unsigned char)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0xb5): undefined reference to `llvm::raw_ostream::operator<<(unsigned long)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0xf8): undefined reference to `llvm::raw_ostream::write(unsigned char)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/VersionTuple.cpp:(.text._ZN5clanglsERN4llvm11raw_ostreamERKNS_12VersionTupleE+0x103): undefined reference to `llvm::raw_ostream::operator<<(unsigned long)' lib/libclangBasic.a(Warnings.cpp.o):(.data._ZN4llvm30VerifyDisableABIBreakingChecksE+0x0): undefined reference to `llvm::DisableABIBreakingChecks' lib/libclangBasic.a(XRayLists.cpp.o): In function `clang::XRayFunctionFilter::XRayFunctionFilter(llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, llvm::ArrayRef<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, clang::SourceManager&)': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZN5clang18XRayFunctionFilterC2EN4llvm8ArrayRefINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEESA_RNS_13SourceManagerE+0xb6): undefined reference to `llvm::SpecialCaseList::createOrDie(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZN5clang18XRayFunctionFilterC2EN4llvm8ArrayRefINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEESA_RNS_13SourceManagerE+0x176): undefined reference to `llvm::SpecialCaseList::createOrDie(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)' lib/libclangBasic.a(XRayLists.cpp.o): In function `clang::XRayFunctionFilter::shouldImbueFunction(llvm::StringRef) const': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter19shouldImbueFunctionEN4llvm9StringRefE+0x54): undefined reference to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter19shouldImbueFunctionEN4llvm9StringRefE+0x89): undefined reference to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter19shouldImbueFunctionEN4llvm9StringRefE+0xbf): undefined reference to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' lib/libclangBasic.a(XRayLists.cpp.o): In function `clang::XRayFunctionFilter::shouldImbueFunctionsInFile(llvm::StringRef, llvm::StringRef) const': /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter26shouldImbueFunctionsInFileEN4llvm9StringRefES2_+0x51): undefined reference to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' /usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter26shouldImbueFunctionsInFileEN4llvm9StringRefES2_+0x87): undefined reference to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' lib/libclangBasic.a(XRayLists.cpp.o):/usr/ports/pobj/llvm-5.0.1/llvm-5.0.1.src/tools/clang/lib/Basic/XRayLists.cpp:(.text._ZNK5clang18XRayFunctionFilter19shouldImbueLocationENS_14SourceLocationEN4llvm9StringRefE+0x73): more undefined references to `llvm::SpecialCaseList::inSection(llvm::StringRef, llvm::StringRef, llvm::StringRef) const' follow lib/libclangBasic.a(XRayLists.cpp.o):(.data._ZN4llvm30VerifyDisableABIBreakingChecksE+0x0): undefined reference to `llvm::DisableABIBreakingChecks' c++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. *** Error 1 in . (/usr/ports/devel/cmake/cmake.port.mk:31 'do-build': @cd /usr/ports/pobj/llvm-5.0.1/build-amd64 && exec /usr/bin/env -i LIB...) *** Error 1 in . (/usr/ports/infrastructure/mk/bsd.port.mk:2738 '/usr/ports/pobj/llvm-5.0.1/build-amd64/.build_done') *** Error 1 in /usr/ports/devel/llvm (/usr/ports/infrastructure/mk/bsd.port.mk:2419 'update-plist')
