diff --git a/CMakeLists.txt b/CMakeLists.txt index ccd40b6..9d082c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(p2pool) option(STATIC_BINARY "Build static binary" OFF) option(STATIC_LIBS "Link libuv and libzmq statically" OFF) option(WITH_RANDOMX "Include the RandomX library in the build. If this is turned off, p2pool will rely on monerod for verifying RandomX hashes" ON) +option(WITH_LTO "Use link-time compiler optimization (if linking fails for you, run cmake with -DWITH_LTO=OFF)" ON) option(DEV_TEST_SYNC "[Developer only] Sync test, stop p2pool after sync is complete" OFF) diff --git a/cmake/flags.cmake b/cmake/flags.cmake index ff615bb..af971e5 100644 --- a/cmake/flags.cmake +++ b/cmake/flags.cmake @@ -8,7 +8,11 @@ set(CMAKE_C_STANDARD_REQUIRED ON) if (CMAKE_CXX_COMPILER_ID MATCHES GNU) set(GENERAL_FLAGS "-pthread") set(WARNING_FLAGS "-Wall -Wextra -Wcast-align -Wcast-qual -Wlogical-op -Wstrict-overflow=2 -Wundef -Wformat=2 -Wpointer-arith -Werror") - set(OPTIMIZATION_FLAGS "-Ofast -s -flto -fuse-linker-plugin") + set(OPTIMIZATION_FLAGS "-Ofast -s") + + if (WITH_LTO) + set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -flto -fuse-linker-plugin") + endif() if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9) set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -fno-associative-math") @@ -46,7 +50,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC) elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang) set(GENERAL_FLAGS "-pthread") set(WARNING_FLAGS "-Wall -Wextra -Wno-undefined-internal -Wunreachable-code-aggressive -Wmissing-prototypes -Wmissing-variable-declarations -Werror") - set(OPTIMIZATION_FLAGS "-Ofast -funroll-loops -fmerge-all-constants -flto") + set(OPTIMIZATION_FLAGS "-Ofast -funroll-loops -fmerge-all-constants") + + if (WITH_LTO) + set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -flto") + endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")