[cfe-dev] How to build shared and static libclang* files
Tom Stellard via cfe-dev
cfe-dev at lists.llvm.org
Mon Apr 22 20:38:06 PDT 2019
On 04/21/2019 06:34 PM, Wink Saville via cfe-dev wrote:
> I'm trying to build LLVM, clang and lld release/8.x from
> https://github.com/llvm/llvm-project.
>
> I'm on Arch Linux system using gcc:
>
> $ uname -a
> Linux wink-desktop 5.0.7-arch1-1-ARCH #1 SMP PREEMPT Mon Apr 8
> 10:37:08 UTC 2019 x86_64 GNU/Linux
>
> $ gcc --version
> gcc (GCC) 8.2.1 20181127
> Copyright (C) 2018 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> One way I've been able to do this is to first build LLVM, clang and
> lld which creates the static libraries, libclang*.a:
>
> $ git clone https://github.com/llvm/llvm-project && \
> cd llvm-project/ && \
> git checkout release/8.x && \
> cd llvm && \
> mkdir build && \
> cd build && \
> cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=$HOME/local
> -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_LLVM_DYLIB=ON
> -DLLVM_ENABLE_PROJECTS="clang;lld" && \
> ninja install
>
>
> At this point we have libclang*.a and libclang.so. But this
> libclang.so only exposes the 380 C API globals and there are no
> libclang*.so matching the libclang*.a files:
>
> wink at wink-desktop:~/local/lib
> $ ls libclang*
> libclangAnalysis.a libclangFrontendTool.a
> libclang.so.8 libclangTidyModernizeModule.a
> libclangApplyReplacements.a libclangHandleCXX.a
> libclangStaticAnalyzerCheckers.a libclangTidyMPIModule.a
> libclangARCMigrate.a libclangHandleLLVM.a
> libclangStaticAnalyzerCore.a libclangTidyObjCModule.a
> libclangAST.a libclangIncludeFixer.a
> libclangStaticAnalyzerFrontend.a libclangTidyPerformanceModule.a
> libclangASTMatchers.a libclangIncludeFixerPlugin.a
> libclangTidy.a libclangTidyPlugin.a
> libclangBasic.a libclangIndex.a
> libclangTidyAbseilModule.a libclangTidyPortabilityModule.a
> libclangChangeNamespace.a libclangLex.a
> libclangTidyAndroidModule.a libclangTidyReadabilityModule.a
> libclangCodeGen.a libclangMove.a
> libclangTidyBoostModule.a libclangTidyUtils.a
> libclangCrossTU.a libclangParse.a
> libclangTidyBugproneModule.a libclangTidyZirconModule.a
> libclangDaemon.a libclangQuery.a
> libclangTidyCERTModule.a libclangTooling.a
> libclangDoc.a libclangReorderFields.a
> libclangTidyCppCoreGuidelinesModule.a libclangToolingASTDiff.a
> libclangDriver.a libclangRewrite.a
> libclangTidyFuchsiaModule.a libclangToolingCore.a
> libclangDynamicASTMatchers.a libclangRewriteFrontend.a
> libclangTidyGoogleModule.a libclangToolingInclusions.a
> libclangEdit.a libclangSema.a
> libclangTidyHICPPModule.a libclangToolingRefactor.a
> libclangFormat.a libclangSerialization.a
> libclangTidyLLVMModule.a
> libclangFrontend.a libclang.so
> libclangTidyMiscModule.a
> wink at wink-desktop:~/local/lib
> $ objdump -tC libclang.so.8 | grep ' g ' | wc -l
> 380
>
>
> Now, if I do a second build from within clang and use BUILD_SHARED_LIBS=ON:
>
> $ cd ../../clang && \
> mkdir build && \
> cd build && \
> cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=$HOME/local
> -DCMAKE_PREFIX_PATH=$HOME/local -DCMAKE_BUILD_TYPE=Release
> -DBUILD_SHARED_LIBS=ON && \
> ninja install
>
> And now have both libclang*.so and libclang*.a:
>
> wink at wink-desktop:~/local/lib
> $ ls libclang*
> libclangAnalysis.a libclangEdit.a
> libclangReorderFields.a libclangTidyFuchsiaModule.a
> libclangAnalysis.so libclangEdit.so
> libclangRewrite.a libclangTidyGoogleModule.a
> libclangAnalysis.so.8 libclangEdit.so.8
> libclangRewriteFrontend.a libclangTidyHICPPModule.a
> libclangApplyReplacements.a libclangFormat.a
> libclangRewriteFrontend.so libclangTidyLLVMModule.a
> libclangARCMigrate.a libclangFormat.so
> libclangRewriteFrontend.so.8 libclangTidyMiscModule.a
> libclangARCMigrate.so libclangFormat.so.8
> libclangRewrite.so libclangTidyModernizeModule.a
> libclangARCMigrate.so.8 libclangFrontend.a
> libclangRewrite.so.8 libclangTidyMPIModule.a
> libclangAST.a libclangFrontend.so
> libclangSema.a libclangTidyObjCModule.a
> libclangASTMatchers.a libclangFrontend.so.8
> libclangSema.so libclangTidyPerformanceModule.a
> libclangASTMatchers.so libclangFrontendTool.a
> libclangSema.so.8 libclangTidyPlugin.a
> libclangASTMatchers.so.8 libclangFrontendTool.so
> libclangSerialization.a libclangTidyPortabilityModule.a
> libclangAST.so libclangFrontendTool.so.8
> libclangSerialization.so libclangTidyReadabilityModule.a
> libclangAST.so.8 libclangHandleCXX.a
> libclangSerialization.so.8 libclangTidyUtils.a
> libclangBasic.a libclangHandleCXX.so
> libclang.so libclangTidyZirconModule.a
> libclangBasic.so libclangHandleCXX.so.8
> libclang.so.8 libclangTooling.a
> libclangBasic.so.8 libclangHandleLLVM.a
> libclangStaticAnalyzerCheckers.a libclangToolingASTDiff.a
> libclangChangeNamespace.a libclangHandleLLVM.so
> libclangStaticAnalyzerCheckers.so libclangToolingASTDiff.so
> libclangCodeGen.a libclangHandleLLVM.so.8
> libclangStaticAnalyzerCheckers.so.8 libclangToolingASTDiff.so.8
> libclangCodeGen.so libclangIncludeFixer.a
> libclangStaticAnalyzerCore.a libclangToolingCore.a
> libclangCodeGen.so.8 libclangIncludeFixerPlugin.a
> libclangStaticAnalyzerCore.so libclangToolingCore.so
> libclangCrossTU.a libclangIndex.a
> libclangStaticAnalyzerCore.so.8 libclangToolingCore.so.8
> libclangCrossTU.so libclangIndex.so
> libclangStaticAnalyzerFrontend.a libclangToolingInclusions.a
> libclangCrossTU.so.8 libclangIndex.so.8
> libclangStaticAnalyzerFrontend.so libclangToolingInclusions.so
> libclangDaemon.a libclangLex.a
> libclangStaticAnalyzerFrontend.so.8 libclangToolingInclusions.so.8
> libclangDoc.a libclangLex.so
> libclangTidy.a libclangToolingRefactor.a
> libclangDriver.a libclangLex.so.8
> libclangTidyAbseilModule.a libclangToolingRefactor.so
> libclangDriver.so libclangMove.a
> libclangTidyAndroidModule.a libclangToolingRefactor.so.8
> libclangDriver.so.8 libclangParse.a
> libclangTidyBoostModule.a libclangTooling.so
> libclangDynamicASTMatchers.a libclangParse.so
> libclangTidyBugproneModule.a libclangTooling.so.8
> libclangDynamicASTMatchers.so libclangParse.so.8
> libclangTidyCERTModule.a
> libclangDynamicASTMatchers.so.8 libclangQuery.a
> libclangTidyCppCoreGuidelinesModule.a
>
> So it "worked", but seems harder than it should be.
>
> Is there a way to have both the libclang*.a and libclang*.so files
> built at the same time while building LLVM?
>
I don't think this is possible.
-Tom
> -- Wink
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
More information about the cfe-dev
mailing list