From b40bd75ca732b18ab175a0b25341af52f60e5f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=BB?= <119668441+Jiga228@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:19:49 +0700 Subject: [PATCH] Optimization cmake files --- RTTI/CMakeLists.txt | 29 +++++++++++------------- Tests/CMakeLists.txt | 52 +++++++++++++++++++++++++++++++------------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/RTTI/CMakeLists.txt b/RTTI/CMakeLists.txt index 2b5241e..d956cca 100644 --- a/RTTI/CMakeLists.txt +++ b/RTTI/CMakeLists.txt @@ -3,24 +3,21 @@ file(GLOB SRC "*.cpp" "*.h") add_library(FastRTTI STATIC ${SRC}) if(CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "Release mode: enabling optimizations") - if(MSVC) - # /O2 - высокая оптимизация - # /GL - link-time optimization - # /DNDEBUG - отключить assert() - # /GR- - отключить RTTI - target_compile_options(FastRTTI PRIVATE /O2 /GL /DNDEBUG /GR-) - target_link_options(FastRTTI PRIVATE /LTCG) + target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE /GR-) + target_link_options(${CMAKE_PROJECT_NAME} PRIVATE /LTCG) else() # GCC / Clang - target_compile_options(FastRTTI PRIVATE - -O3 - -march=native - -flto - -fno-rtti - -DNDEBUG - ) - target_link_options(FastRTTI PRIVATE -flto) + target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -fno-rtti) + target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -flto) + endif() + +elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") + if(MSVC) + target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE /GR-) + else() + target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE + -g + -fno-rtti) endif() endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 830a56b..e23b4ef 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1,48 +1,54 @@ file(GLOB test_default_src "test_default_rtti.cpp" "ClassesDefault/*.cpp" "ClassesDefault/*.h") - add_executable(test_defalt_rtti ${test_default_src}) if(CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "Release mode: enabling optimizations") + message(STATUS "Release mode: enabling optimizations for test_default_rtti") if(MSVC) - # /O2 - высокая оптимизация - # /GL - link-time optimization - # /DNDEBUG - отключить assert() target_compile_options(test_defalt_rtti PRIVATE /O2 /GL /DNDEBUG) target_link_options(test_defalt_rtti PRIVATE /LTCG) else() - # GCC / Clang target_compile_options(test_defalt_rtti PRIVATE -O3 -march=native -flto -DNDEBUG ) - target_link_options(Tests PRIVATE -flto) + target_link_options(test_defalt_rtti PRIVATE -flto) + endif() + +elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(STATUS "Debug mode: enabling runtime checks for test_default_rtti") + + if(MSVC) + target_compile_options(test_defalt_rtti PRIVATE /Od /Zi) + else() + target_compile_options(test_defalt_rtti PRIVATE + -O0 + -g + -fsanitize=undefined + -fstack-protector + ) + target_link_options(test_defalt_rtti PRIVATE -fsanitize=undefined) endif() endif() +# ------------------------------------------------------------- - +# test_fast_rtti — ускоренная реализация с отключённым RTTI file(GLOB test_fast_src "test_fast_rtti.cpp" "ClassesFast/*.cpp" "ClassesFast/*.h") - add_executable(test_fast_rtti ${test_fast_src}) + target_link_libraries(test_fast_rtti PRIVATE FastRTTI) target_include_directories(test_fast_rtti PRIVATE ${PROJECT_SOURCE_DIR}/RTTI) if(CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "Release mode: enabling optimizations") + message(STATUS "Release mode: enabling optimizations for test_fast_rtti") if(MSVC) - # /O2 - высокая оптимизация - # /GL - link-time optimization - # /DNDEBUG - отключить assert() - # /GR- - отключить RTTI target_compile_options(test_fast_rtti PRIVATE /O2 /GL /DNDEBUG /GR-) target_link_options(test_fast_rtti PRIVATE /LTCG) else() - # GCC / Clang target_compile_options(test_fast_rtti PRIVATE -O3 -march=native @@ -52,4 +58,20 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") ) target_link_options(test_fast_rtti PRIVATE -flto) endif() + +elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(STATUS "Debug mode: enabling runtime checks for test_fast_rtti") + + if(MSVC) + target_compile_options(test_fast_rtti PRIVATE /Od /Zi /GR-) + else() + target_compile_options(test_fast_rtti PRIVATE + -O0 + -g + -fno-rtti + -fsanitize=undefined + -fstack-protector + ) + target_link_options(test_fast_rtti PRIVATE -fsanitize=undefined) + endif() endif() \ No newline at end of file