[Qt-creator] Bundling clang (for code model) with qt-creator package
Andrzej Telszewski
atelszewski at gmail.com
Tue Dec 13 03:26:45 CET 2016
On 12/12/16 11:28, Eike Ziller wrote:
>
> On Dec 12, 2016, at 3:13 AM, Andrzej Telszewski <atelszewski at gmail.com> wrote:
>> When it comes to build_clang.py, this script expects some environment variables, like PKG_NODE_ROOT, CLANG_BRANCH, and more:
>> 1. Where do they come from? How can I get them? :-)
>
> They are defined as part of our build setup which is not publicly shared.
>
Well, maybe one day you'll release it :-)
>> 2. How can I determine which exact versions of software and any other flags you used to create the given QTC release?
>
> It would probably be nice to define LLVM_REVISION and CLANG_REVISION within the Qt Creator repository. These will usually be the release sha1s from a llvm/clang release.
>
That's a good idea.
You could also provide information on other important components (if
there are any, qbs definitely).
I know it's possible to gather this information, but it's really
frustrating having to dig through all the different sources.
A file or release notes section containing the list of different
components together with actual versions would be invaluable.
And when I say a list, I mean it ;-) Having to read different sections
of release notes to pick the versions is not pleasant at all ;-)
I believe you could automate such a process without bigger pain (or do
you? ;-)).
>> Questions:
>> 1. In deployqt.py, you tweak rpath-s, but I found that simply copying libclang into /tmp/qtc-ins/usr/lib/qtcreator just works. So is this step necessary?
>
> It was necessary once upon a time, I haven’t checked if it still is.
>
OK. It works for me without any rpath voodoo.
That is what it looks like (from installed package):
$ patchelf --print-rpath /usr/libexec/qtcreator/clangbackend
$ORIGIN/../../lib64/qtcreator:$ORIGIN/../../lib64/qtcreator/plugins:$ORIGIN:$ORIGIN/..:$ORIGIN/../lib64/qtcreator:/tmp/slackrepo-desktop/qt-creator-opensource-src-4.2.0-rc1/llvm-ins/lib
My guess is that libclang.so is immediately found by means of:
$ORIGIN/../../lib64/qtcreator
>> General question:
>> Have I missed something? ;-)
>
> I don’t see anything obviously wrong ;)
>
Nice to hear :-)
On 12/12/16 11:39, Nikolai Kosjar wrote:
> On 12/12/2016 03:13 AM, Andrzej Telszewski wrote:
>> *1) Configure, build and temporarily install LLVM:*
>>
>> $ cmake \
>> -DCMAKE_INSTALL_PREFIX=/tmp/llvm-ins \
>> -DCMAKE_BUILD_TYPE=Release \
>> -G "Unix Makefiles" \
>> -DLLVM_BUILD_TOOLS=OFF \
>> -DLLVM_INCLUDE_EXAMPLES=OFF \
>> -DLLVM_INCLUDE_TESTS=OFF \
>> -DLLVM_ENABLE_RTTI=ON \
>> -DLLVM_TARGETS_TO_BUILD="X86" \
>> ..
>> $ make
>> $ make install
>> $ # We disabled building of all the tools, but we still need some.
>> $ make llvm-config
>> $ cp -a bin/llvm-config /tmp/llvm-ins/bin
>>
>> Questions:
>> 2. As you can see, I passed some additional flags (not found in
>> build_clang.py), like -DLLVM_BUILD_TOOLS=OFF, mainly to shorten the
>> build time. Can you think of any troubles I might get with the cmake
>> configuration as you see above?
>
> I'm not know what exactly LLVM_BUILD_TOOLS=OFF excludes. But at least the clang soures are located in a "tools" directory within LLVM (${LLVM_SOURCE}/tools/clang), so you might want to double check whether the clang executable was really build (needed for the clang static analyzer).
>
Neither do I know exactly what is excluded, but:
1) clang executable (and library) *is* built,
2) llvm-config *is not* built.
For llvm-config you can see that I actually had to invoke separate make
and also had to install it by hand.
After a bit of testing, I ended up with the following:
$ cmake \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_ROOT \
-DCMAKE_BUILD_TYPE=Release \
-G "Unix Makefiles" \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD="X86" \
..
It turns out that LLVM_BUILD_TOOLS=OFF, LLVM_INCLUDE_EXAMPLES=OFF and
LLVM_INCLUDE_TESTS=OFF saves me only ~5 minutes out of the ~60 minutes
total build time of LLVM/Clang. So it's not worth specifying those and
having to perform "by hand" steps later on.
SLKCFLAGS="-O2 -march=i586 -mtune=i686" for i586 arch
and
SLKCFLAGS="-O2 -fPIC" for x86_64 arch
(I'm on Slackware).
> Note also that nowadays Qt Creator's README.md includes instructions to get/build llvm/clang:
>
> http://code.qt.io/cgit/qt-creator/qt-creator.git/tree/README.md
> Section "## Get LLVM/Clang for the Clang Code Model"
>
Good to know (well, I should know it already, shouldn't I? ;-)).
Thanks.
>> 4. Are there any other flags that would be worth adding? Please note
>> that I removed -DCMAKE_C_FLAGS and -DCMAKE_CXX_FLAGS for clarity, I
>> actually have them in my real build/packaging script.
>
> If you find other flags worth adding, share them with us :)
>
Surely ;-) I did a bit of reading, but haven't found anything
interesting (other than what I have already mentioned).
Thanks for the help!
--
Best regards,
Andrzej Telszewski
More information about the Qt-creator
mailing list