Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH] cmake: add LTO support for building luajit
@ 2020-03-12 10:05 Olga Arkhangelskaia
  2020-03-12 10:10 ` Cyrill Gorcunov
                   ` (5 more replies)
  0 siblings, 6 replies; 33+ messages in thread
From: Olga Arkhangelskaia @ 2020-03-12 10:05 UTC (permalink / raw)
  To: tarantool-patches

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)
         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)
+	    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()
+	if (NOT TARGET_OS_DARWIN)
+	   # Depending of compiler we need to set appropriate llvm/gcc-ar lib
+	   set (CMAKE_AR llvm-ar)
+	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)
+        endif()
+    endif()
     # 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)

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2020-07-09  5:13 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-12 10:05 [Tarantool-patches] [PATCH] cmake: add LTO support for building luajit 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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox