From 63807139c3ee9fc6a370c77e884115a18c2b0e17 Mon Sep 17 00:00:00 2001 From: Andrey Akhmichin <15944199+nekonomicon@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:16:49 +0500 Subject: [PATCH] cmake: always use LTO if possible. --- CMakeLists.txt | 8 ++++++++ cl_dll/CMakeLists.txt | 4 ++++ cl_dll/cl_util.h | 3 ++- cl_dll/util.cpp | 2 +- dlls/CMakeLists.txt | 4 ++++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9412d493..04cf5bce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") include(CheckIncludeFile) include(CheckCSourceCompiles) include(VSForceXPToolchain) # Force XP toolchain for Visual Studio +include(CheckIPOSupported) project (HLSDK-PORTABLE) @@ -152,6 +153,13 @@ if(VITA) add_compile_options(-fno-use-cxa-atexit) endif() +check_ipo_supported(RESULT HAVE_LTO OUTPUT LTO_ERROR) +if(HAVE_LTO) + message(STATUS "IPO / LTO enabled") +else() + message(STATUS "IPO / LTO not supported: <${LTO_ERROR}>") +endif() + check_include_file("tgmath.h" HAVE_TGMATH_H) if(HAVE_TGMATH_H) if(NOT MSVC) diff --git a/cl_dll/CMakeLists.txt b/cl_dll/CMakeLists.txt index b88821a2..be856edf 100644 --- a/cl_dll/CMakeLists.txt +++ b/cl_dll/CMakeLists.txt @@ -208,6 +208,10 @@ if(MSVC) set_property(TARGET ${CLDLL_LIBRARY} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() +if(HAVE_LTO) + set_property(TARGET ${CLDLL_LIBRARY} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() + install( TARGETS ${CLDLL_LIBRARY} DESTINATION "${GAMEDIR}/${CLIENT_INSTALL_DIR}/" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE diff --git a/cl_dll/cl_util.h b/cl_dll/cl_util.h index 91615660..65275c69 100644 --- a/cl_dll/cl_util.h +++ b/cl_dll/cl_util.h @@ -166,7 +166,8 @@ void VectorScale( const float *in, float scale, float *out ); float VectorNormalize( float *v ); void VectorInverse( float *v ); -extern vec3_t vec3_origin; +// extern vec3_t vec3_origin; +extern float vec3_origin[3]; // disable 'possible loss of data converting float to int' warning message #pragma warning( disable: 4244 ) diff --git a/cl_dll/util.cpp b/cl_dll/util.cpp index 7d6b6669..8b5792b4 100644 --- a/cl_dll/util.cpp +++ b/cl_dll/util.cpp @@ -33,7 +33,7 @@ #if !defined(M_PI_F) #define M_PI_F (float)M_PI #endif -extern vec3_t vec3_origin; +// extern vec3_t vec3_origin; // if C++ mangling differs from C symbol name #if _MSC_VER || __WATCOMC__ diff --git a/dlls/CMakeLists.txt b/dlls/CMakeLists.txt index 638f1a73..981a2ca1 100644 --- a/dlls/CMakeLists.txt +++ b/dlls/CMakeLists.txt @@ -173,6 +173,10 @@ if(MSVC) set_property(TARGET ${SVDLL_LIBRARY} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() +if(HAVE_LTO) + set_property(TARGET ${SVDLL_LIBRARY} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() + install( TARGETS ${SVDLL_LIBRARY} DESTINATION "${GAMEDIR}/${SERVER_INSTALL_DIR}/" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE