From: Olga Arkhangelskaia <arkholga@tarantool.org>
To: Igor Munkin <imun@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] cmake: add LTO support for building luajit
Date: Wed, 15 Apr 2020 16:22:20 +0300 [thread overview]
Message-ID: <c86f16cb-f069-90b5-01c8-1ab015425253@tarantool.org> (raw)
In-Reply-To: <20200414170024.GL5713@tarantool.org>
Hi Igor!
See diff below:
14.04.2020 20:00, Igor Munkin пишет:
> Olya,
>
> Thanks for the fixes! There are still a couple nits below.
>
> On 14.04.20, Olga Arkhangelskaia wrote:
>> Hi once again!
>>
>> I have fixed your comments and pushed once again. See below.
>>
>> 14.04.2020 12:18, Igor Munkin пишет:
>>> Olya,
>>>
>>> Thanks for the patch! I left several comments below, please consider
>>> them.
>>>
>>> On 12.03.20, Olga Arkhangelskaia wrote:
>>>> Tarantool has LTO support, however while building luajit this opt. was
>>>> omitted. Patch adds necessary flag to turn it on.
>>>>
>>>> Minimum compiler/linker versions: clang 3.4, gcc 5.0+, ld 2.27+.
>>>>
>>>> Closes #3743
>>>> ---
>>>> Branch: OKriw/gh-3743-LuaJIT-does-not-use-LTO-with-DENABLE_LTO=ON-full-ci
>>>> cmake/lto.cmake | 3 ++-
>>>> cmake/luajit.cmake | 26 ++++++++++++++++++++++++++
>>>> 2 files changed, 28 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/cmake/lto.cmake b/cmake/lto.cmake
>>>> index 95ade75f4..9f29f3324 100644
>>>> --- a/cmake/lto.cmake
>>>> +++ b/cmake/lto.cmake
>>>> @@ -78,7 +78,8 @@ if (NOT TARGET_OS_DARWIN)
>>>> if (linker_version VERSION_LESS "2.31")
>>>> message(FATAL_ERROR "ld.bfd >= 2.31 is needed for LTO")
>>>> endif()
>>>> - elseif(matched_gold)
>>>> +
>>>> + elseif(matched_gold)
>>> Typo: there is a mess with whitespace above.
>>>
>>> However this chunk provides no changes except whitespace and newline.
>>> Please drop it.
>>>
>> Tarantool has LTO support, however while building luajit this opt. was
>> omitted. Patch adds necessary flag to turn it on.
>>
>> Minimum compiler/linker versions: clang 3.4, gcc 5.0+, ld 2.27+.
>>
>> Closes #3743
>> ---
>> cmake/luajit.cmake | 23 +++++++++++++++++++++++
>> 1 file changed, 23 insertions(+)
>>
>>
>>>> set(linker_version ${CMAKE_MATCH_1})
>>>> message(STATUS "Found ld.gold version: ${linker_version}")
>>>>
>>>> diff --git a/cmake/luajit.cmake b/cmake/luajit.cmake
>>>> index 072db8269..da1b4926d 100644
>>>> --- a/cmake/luajit.cmake
>>>> +++ b/cmake/luajit.cmake
>>>> @@ -225,6 +225,32 @@ macro(luajit_build)
>>>> set(luajit_xcflags ${luajit_xcflags} -D${def})
>>>> endforeach()
>>>>
>>>> + # Add LTO option to luajit
>>>> + if (CMAKE_INTERPROCEDURAL_OPTIMIZATION)
>>>> + message("Setting LTO flags for building luajit")
>>>> + # Clang opt to support LTO
>>>> + if (CMAKE_COMPILER_IS_CLANG AND
>>>> + NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.4)
>>> So, if clang toolchain is used but version is less than 3.4, then gcc
>>> toolchain settings are used. It's either totally wrong or definitely
>>> need to be clarified with a corresponding comment.
>>>
>>> Also, AFAICS LTO support for toolchain is checked via CheckIPOSupported
>>> CMake module. So additional check here looks to be excess or also need
>>> to be clarified.
>>>
>>>> + if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.9)
>>>> + set(luajit_cflags ${luajit_cflags} -flto=full)
>>>> + else()
>>>> + set(luajit_cflags ${luajit_cflags} -flto=full)
>>>> + endif()
>>> I see no difference in the branches above.
>>>
>>>> + if (NOT TARGET_OS_DARWIN)
>>>> + # Depending of compiler we need to set appropriate llvm/gcc-ar lib
>>>> + set (CMAKE_AR llvm-ar)
>>> What ar is used on systems different from Darwin based ones when clang
>>> toolchain is used?
>>>
>>>> + endif()
>>>> + # GNU opts to support lto
>>>> + else()
>>>> + #Due to some problems (bugs, slow work, etc) we support LTO only for 5.0+
>>>> + #The same is for binutils prior 2.27
>>>> + if (NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.0
>>>> + AND NOT ${linker_version} VERSION_LESS 2.27)
>>>> + set(luajit_cflags ${luajit_cflags} -flto -fuse-linker-plugin -fno-fat-lto-objects)
>>>> + endif()
>>>> + set (CMAKE_AR gcc-ar)
>>> Could you please clarify why ar is set explicitly here?
>>>
>>>> + endif()
>>>> + endif()
>> + # Add LTO option to luajit
>> + if (CMAKE_INTERPROCEDURAL_OPTIMIZATION)
>> + message("Setting LTO flags for building luajit")
>> + # Clang opt to support LTO
>> + if (CMAKE_COMPILER_IS_CLANG)
>> + if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.9)
>> + set(luajit_cflags ${luajit_cflags} -flto=full)
>> + else()
>> + set(luajit_cflags ${luajit_cflags} -flto=thin)
>> + endif()
> Moved our discussion below:
>
> ================================================================================
>
>>> I see no difference in the branches above.
>> I have a mistake here (Thin LTO) - will wix it
>>
>> If version is above than 3.9 we can use -flto=thin
> What is the difference between "full" and "thin" values? Please drop a
> few words regarding it.
>
> ================================================================================
>
>> + # Depending of compiler we need to set appropriate
>> llvm/gcc-ar lib
>> + set (CMAKE_AR llvm-ar)
> Moved our discussion below:
>
> ================================================================================
>
>>> What ar is used on systems different from Darwin based ones when clang
>>> toolchain is used?
>>
>> gcc-ar/ llvm-ar is wrapper on ar that simply passes —plugin option. We
>> need it for LTO.
>>
>> ( See https://bugzilla.redhat.com/show_bug.cgi?id=1678826
>>
>> https://lists.llvm.org/pipermail/llvm-dev/2018-March/122018.html)
>> <https://lists.llvm.org/pipermail/llvm-dev/2018-March/122018.html>
> It would be nice to leave a comment regarding it.
>
> ================================================================================
>
>> + # GNU opts to support lto
> Minor: Please move this comment under <else()> statement as the
> corresponding clang-related comment.
>
>> + else()
>> + #Due to some problems (bugs, slow work, etc) we support LTO
>> only for 5.0+
>> + #The same is for binutils prior 2.27
> Typo: Please separate # from the comment with a space.
>
>> + if (NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.0
>> + AND NOT ${linker_version} VERSION_LESS 2.27)
> Are there any versions supporting LTO/IPO less than gcc-5.0 and ld-2.27?
> If yes, please mention why they don't fit our purposes. If not, I see no
> rationale for this condition.
>
>> + set(luajit_cflags ${luajit_cflags} -flto
>> -fuse-linker-plugin -fno-fat-lto-objects)
>> + endif()
>> + set (CMAKE_AR gcc-ar)
> Minor: there are some <set> commands with a whitespace prior to
> parentheses and some without. Please adjust those you introduced within
> your changes to a single style.
>
>> + endif()
>> + endif()
>>> Typo: there is a mess with indent above. Unfortunately I failed to find
>>> our CMake style guide, so please adjust your changes considering the
>>> code nearby.
>>>
>>>> # Pass the same toolchain that is used for building of
>>>> # tarantool itself, because tools from different toolchains
>>>> # can be incompatible. A compiler and a linker are already set
>>>> --
>>>> 2.20.1 (Apple Git-117)
>>>>
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.9)
- set(luajit_cflags ${luajit_cflags} -flto=full)
+ set (luajit_cflags ${luajit_cflags} -flto=full)
else()
- set(luajit_cflags ${luajit_cflags} -flto=thin)
+ # ThinLTO that is both scalable and incremental
+ # due to parallel IPO, available since 3.9 and above.
+ # See
http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html
+ set (luajit_cflags ${luajit_cflags} -flto=thin)
endif()
# Depending of compiler we need to set appropriate
llvm/gcc-ar lib
# llvm/gcc -ar is just a wrapper over ar to pass --plugin=
option,
# so that ar can understand LTO objects.
- set (CMAKE_AR llvm-ar)
- # GNU opts to support lto
+ # See
https://lists.llvm.org/pipermail/llvm-dev/2018-March/122018.html
+ set (CMAKE_AR llvm-ar)
else()
- # Due to some problems (bugs, slow work, etc) we support LTO
only for 5.0+
- # The same is for binutils prior 2.27
+ # GNU opts to support lto
+ # Due to some problems (bugs, slow work, etc) we support
LTO only for 5.0+
+ # The same is for binutils prior 2.27
+ # See https://patchwork.kernel.org/patch/10078207/
if (NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 5.0
AND NOT ${linker_version} VERSION_LESS 2.27)
- set(luajit_cflags ${luajit_cflags} -flto
-fuse-linker-plugin -fno-fat-lto-objects)
+ set (luajit_cflags ${luajit_cflags} -flto
-fuse-linker-plugin -fno-fat-lto-objects)
endif()
+ # The same as for llvm-ar
+ # See, https://bugzilla.redhat.com/show_bug.cgi?id=1678826
next prev parent reply other threads:[~2020-04-15 13:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-12 10:05 Olga Arkhangelskaia
2020-03-12 10:10 ` Cyrill Gorcunov
2020-04-14 9:18 ` Igor Munkin
2020-04-14 9:59 ` Olga Arkhangelskaia
2020-04-14 12:32 ` Olga Arkhangelskaia
2020-04-14 17:00 ` Igor Munkin
2020-04-15 13:22 ` Olga Arkhangelskaia [this message]
2020-04-17 11:47 ` Igor Munkin
2020-04-17 14:41 ` Olga Arkhangelskaia
2020-04-27 23:04 ` Igor Munkin
2020-05-06 10:47 ` Olga Arkhangelskaia
2020-04-14 14:33 ` Olga Arkhangelskaia
2020-05-25 12:58 ` Sergey Bronnikov
2020-05-25 15:00 ` Olga Arkhangelskaia
2020-05-25 15:12 ` Olga Arkhangelskaia
2020-05-25 15:43 ` Sergey Bronnikov
2020-05-26 10:11 ` Igor Munkin
2020-05-27 10:01 ` Olga Arkhangelskaia
2020-06-16 1:02 ` Alexander Turenko
2020-06-16 11:36 ` Olga Arkhangelskaia
2020-06-16 12:01 ` Olga Arkhangelskaia
2020-06-16 17:34 ` Alexander Turenko
2020-06-25 9:19 ` Timur Safin
2020-06-16 18:31 ` Alexander Turenko
2020-06-29 20:16 ` Olga Arkhangelskaia
2020-06-16 12:53 ` Igor Munkin
2020-06-25 9:45 ` Timur Safin
2020-06-25 9:47 ` Timur Safin
2020-07-08 12:23 ` Alexander Turenko
2020-07-08 12:34 ` Kirill Yukhin
2020-07-08 12:42 ` Kirill Yukhin
2020-07-08 12:38 ` Alexander Turenko
2020-07-09 5:13 ` Olga Arkhangelskaia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c86f16cb-f069-90b5-01c8-1ab015425253@tarantool.org \
--to=arkholga@tarantool.org \
--cc=imun@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH] cmake: add LTO support for building luajit' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox