diff --git a/cmake/Env.cmake b/cmake/Env.cmake index 7e489d873..3ea07a672 100644 --- a/cmake/Env.cmake +++ b/cmake/Env.cmake @@ -23,7 +23,9 @@ ob_define(OB_CMAKE_RULES_CHECK ON) ob_define(OB_STATIC_LINK_LGPL_DEPS ON) ob_define(HOTFUNC_PATH "${CMAKE_SOURCE_DIR}/hotfuncs.txt") ob_define(OB_BUILD_CCLS OFF) -ob_define(LTO_JOBS 16) +ob_define(LTO_JOBS all) +ob_define(LTO_CACHE_DIR "${CMAKE_BINARY_DIR}/cache") +ob_define(LTO_CACHE_POLICY cache_size=100%:cache_size_bytes=0k:cache_size_files=0:prune_after=0s:prune_interval=72h) # get compiler from build.sh ob_define(OB_CC "") ob_define(OB_CXX "") @@ -46,6 +48,8 @@ ob_define(OB_DISABLE_PIE OFF) ob_define(OB_ENABLE_MCMODEL OFF) +ob_define(USE_LTO_CACHE OFF) + if(WITH_COVERAGE) # -ftest-coverage to generate .gcno file # -fprofile-arcs to generate .gcda file @@ -69,6 +73,9 @@ ob_define(THIN_LTO_CONCURRENCY_LINK "") if(ENABLE_THIN_LTO) set(THIN_LTO_OPT "-flto=thin") set(THIN_LTO_CONCURRENCY_LINK "-Wl,--thinlto-jobs=${LTO_JOBS}") + if(USE_LTO_CACHE) + set(THIN_LTO_CONCURRENCY_LINK "${THIN_LTO_CONCURRENCY_LINK},--thinlto-cache-dir=${LTO_CACHE_DIR},--thinlto-cache-policy=${LTO_CACHE_POLICY}") + endif() endif() set(HOTFUNC_OPT "") @@ -246,7 +253,7 @@ if (OB_USE_CLANG) endif() set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11") set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") - set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} ${THIN_LTO_CONCURRENCY_LINK} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT}") + set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT}") set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT}") set(CMAKE_EXE_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${PIE_OPT} ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT} ${CMAKE_COVERAGE_EXE_LINKER_OPTIONS}") else() # not clang, use gcc diff --git a/src/libtable/src/CMakeLists.txt b/src/libtable/src/CMakeLists.txt index 0daaeaf71..85dff0388 100644 --- a/src/libtable/src/CMakeLists.txt +++ b/src/libtable/src/CMakeLists.txt @@ -25,8 +25,16 @@ target_link_libraries(obtable -Wl,--allow-multiple-definition) set_target_properties(obtable PROPERTIES SOVERSION 1 VERSION 1.0.0) +if(ENABLE_THIN_LTO AND USE_LTO_CACHE) + add_dependencies(obtable observer) +endif() + add_library(obtable_static STATIC EXCLUDE_FROM_ALL ${CMAKE_BINARY_DIR}/src/observer/ob_version.cpp) target_link_libraries(obtable_static PUBLIC ${obtable_base} ${ob_objects} ${oblib_object_libraries}) + +if(ENABLE_THIN_LTO AND USE_LTO_CACHE) + add_dependencies(obtable_static observer) +endif() diff --git a/src/logservice/libobcdc/tests/CMakeLists.txt b/src/logservice/libobcdc/tests/CMakeLists.txt index c9389fc7a..9968c792a 100644 --- a/src/logservice/libobcdc/tests/CMakeLists.txt +++ b/src/logservice/libobcdc/tests/CMakeLists.txt @@ -10,6 +10,10 @@ ob_add_new_object_target(obcdc_tailf_objects obcdc_tailf_object_list) target_link_libraries(obcdc_tailf_objects PRIVATE obcdc) target_link_libraries(obcdc_tailf PRIVATE obcdc_tailf_objects) +if(ENABLE_THIN_LTO AND USE_LTO_CACHE) + add_dependencies(obcdc_tailf observer) +endif() + # obcdc_tailf_static add_executable(obcdc_tailf_static EXCLUDE_FROM_ALL) ob_add_new_object_target(obcdc_tailf_objects_static obcdc_tailf_object_list) diff --git a/src/sql/parser/CMakeLists.txt b/src/sql/parser/CMakeLists.txt index 3677f5346..961fa742b 100644 --- a/src/sql/parser/CMakeLists.txt +++ b/src/sql/parser/CMakeLists.txt @@ -146,6 +146,10 @@ target_link_libraries(ob_sql_proxy_parser_static PUBLIC ob_sql_proxy_parser_objects) +if(ENABLE_THIN_LTO AND USE_LTO_CACHE) + add_dependencies(ob_sql_proxy_parser_static observer) +endif() + target_link_libraries(ob_sql_server_parser_static PUBLIC ob_sql_server_parser_objects) diff --git a/tools/ob_admin/CMakeLists.txt b/tools/ob_admin/CMakeLists.txt index 5e9ec606a..a8ebcb99d 100644 --- a/tools/ob_admin/CMakeLists.txt +++ b/tools/ob_admin/CMakeLists.txt @@ -167,3 +167,7 @@ target_link_libraries(ob_admin -Wl,--end-group -static-libgcc -static-libstdc++) + +if(ENABLE_THIN_LTO AND USE_LTO_CACHE) + add_dependencies(ob_admin observer) +endif()