[Tarantool-patches] [PATCH] cmake: add LTO support for building luajit
Olga Arkhangelskaia
arkholga at tarantool.org
Tue Apr 14 15:32:35 MSK 2020
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()
+ # Depending of compiler we need to set appropriate
llvm/gcc-ar lib
+ set (CMAKE_AR llvm-ar)
+ # 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)
+ 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)
>>
More information about the Tarantool-patches
mailing list