build: link time optimization for release builds 97/29597/10
authorDamjan Marion <damarion@cisco.com>
Thu, 22 Oct 2020 12:23:47 +0000 (14:23 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Thu, 5 Nov 2020 20:51:03 +0000 (20:51 +0000)
Type: improvement
Change-Id: I0e24f1d2ad5c7a11a8bd40125428f86aca867bec
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/CMakeLists.txt
src/cmake/library.cmake
src/vppinfra/CMakeLists.txt

index 0d971fd..6fc243c 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.10)
 
 set(CMAKE_C_COMPILER_NAMES clang-11 clang-10 clang-9 gcc-10 gcc-9 cc)
 
 project(vpp C)
 
 include(CheckCCompilerFlag)
+include(CheckIPOSupported)
 include(cmake/misc.cmake)
 include(cmake/cpu.cmake)
 include(cmake/ccache.cmake)
@@ -105,6 +106,16 @@ string(REPLACE ";" " " BUILD_TYPES "${BUILD_TYPES}")
 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
             HELPSTRING "Build type - valid options are: ${BUILD_TYPES}")
 
+##############################################################################
+# link time optimizations
+##############################################################################
+if (CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE")
+  check_ipo_supported(RESULT _result)
+  if (_result)
+    option(VPP_USE_LTO "Link time optimization of release binaries" ON)
+  endif()
+endif()
+
 ##############################################################################
 # sanitizers
 ##############################################################################
index 06248a5..a5b6c76 100644 (file)
@@ -13,7 +13,7 @@
 
 macro(add_vpp_library lib)
   cmake_parse_arguments(ARG
-    ""
+    "LTO"
     "COMPONENT"
     "SOURCES;MULTIARCH_SOURCES;API_FILES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS"
     ${ARGN}
@@ -38,6 +38,13 @@ macro(add_vpp_library lib)
     COMPONENT ${ARG_COMPONENT}
   )
 
+  if (ARG_LTO AND VPP_USE_LTO)
+     set_property(TARGET ${lib} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+     target_compile_options (${lib} PRIVATE "-ffunction-sections")
+     target_compile_options (${lib} PRIVATE "-fdata-sections")
+     target_link_libraries (${lib} "-Wl,--gc-sections")
+  endif()
+
   if(ARG_MULTIARCH_SOURCES)
     vpp_library_set_multiarch_sources(${lib} "${ARG_DEPENDS}" ${ARG_MULTIARCH_SOURCES})
   endif()
index e0ae662..a670181 100644 (file)
@@ -198,6 +198,7 @@ add_vpp_library(vppinfra
   LINK_LIBRARIES m
   INSTALL_HEADERS ${VPPINFRA_HEADERS}
   COMPONENT libvppinfra
+  LTO
 )
 
 ##############################################################################