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')

Reply via email to