137 lines
4.2 KiB
CMake
137 lines
4.2 KiB
CMake
include (compile_flag)
|
|
include (link_flag)
|
|
include (canonical_host)
|
|
|
|
|
|
###############################################################################
|
|
option(LTO "enable link-time optimisation" OFF)
|
|
|
|
|
|
##-----------------------------------------------------------------------------
|
|
## Enable link-time optimisation.
|
|
##
|
|
## Rather than rely on the INTERPROCEDURAL_OPTIMISATION flag we add some
|
|
## arguments explicitly because we want a little more control over object
|
|
## creation.
|
|
if (LTO)
|
|
# Add the linker flags first otherwise the linker may not recognise the
|
|
# object format
|
|
append_link_flag("-fuse-linker-plugin")
|
|
append_link_flag("-flto")
|
|
|
|
# Actually enable LTO object creation, but try very hard to avoid
|
|
# situations where we may accidentally use regular/fat objects.
|
|
append_compile_flag("-flto")
|
|
append_compile_flag("-fno-fat-lto-objects")
|
|
|
|
# Throw in some optimisation flags that are LTO specific. We don't
|
|
# particularly care about checking Debug/Release here because LTO is
|
|
# pretty heavyweight anyway.
|
|
append_compile_flag("-fdevirtualize-at-ltrans")
|
|
endif ()
|
|
|
|
|
|
###############################################################################
|
|
option(FRAMEPOINTER "retain the framepointer even if optimising" OFF)
|
|
|
|
|
|
##-----------------------------------------------------------------------------
|
|
if (FRAMEPOINTER)
|
|
append_compile_flag("-fno-omit-frame-pointer")
|
|
endif ()
|
|
|
|
|
|
###############################################################################
|
|
canonical_host()
|
|
|
|
|
|
##-----------------------------------------------------------------------------
|
|
if (${host_cpu} STREQUAL "x86_64")
|
|
append_compile_flag(-mtune=generic)
|
|
append_compile_flag(-msse)
|
|
append_compile_flag(-msse2)
|
|
append_compile_flag(-msahf)
|
|
elseif (${host_cpu} STREQUAL "i686")
|
|
append_compile_flag(-march=prescott)
|
|
append_compile_flag(-mtune=generic)
|
|
append_compile_flag(-mcmov)
|
|
append_compile_flag(-mfpmath=sse)
|
|
else ()
|
|
message (FATAL_ERROR "unknown HOST_CPU '${host_cpu}'")
|
|
endif ()
|
|
|
|
|
|
###############################################################################
|
|
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
else()
|
|
append_compile_flag(-ftree-vectorize)
|
|
|
|
# clang vectorisation
|
|
append_compile_flag(-fvectorize)
|
|
append_compile_flag(-fslp-vectorize)
|
|
append_compile_flag(-fslp-vectorize-aggressive)
|
|
|
|
# loop hosting/distribution
|
|
append_compile_flag(-floop-nest-optimize)
|
|
|
|
append_compile_flag(-ftree-loop-distribution)
|
|
append_compile_flag(-ftree-loop-distribute-patterns)
|
|
append_compile_flag(-ftree-loop-im)
|
|
append_compile_flag(-ftree-loop-if-convert-stores)
|
|
|
|
append_compile_flag(-fivopts)
|
|
|
|
append_compile_flag(-funsafe-loop-optimizations)
|
|
append_compile_flag(-floop-interchange)
|
|
|
|
append_compile_flag(-fpredictive-commoning)
|
|
append_compile_flag(-funswitch-loops)
|
|
|
|
# options that require substantial time/memory
|
|
# GCC: ipa-pta can produce broken code when using LTO
|
|
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu" ||
|
|
# test "x$enable_lto" != "xyes"], [
|
|
# AX_APPEND_COMPILE_FLAGS([-fipa-pta])
|
|
#])
|
|
|
|
# safety removal for performance
|
|
append_compile_flag(-fno-stack-protector)
|
|
endif()
|
|
|
|
|
|
###############################################################################
|
|
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
else ()
|
|
append_compile_flag(-fdevirtualize)
|
|
append_compile_flag(-fdevirtualize-speculatively)
|
|
|
|
check_link_flag(TEST_GC_SECTIONS, "-Wl,--gc-sections")
|
|
if (TEST_LD_GC_SECTIONS)
|
|
append_compile_flag(-fdata-sections)
|
|
append_compile_flag(-ffunction-sections)
|
|
append_link_flag("-Wl,--gc-sections")
|
|
endif ()
|
|
endif ()
|
|
|
|
|
|
###############################################################################
|
|
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
add_definitions(-DENABLE_DEBUGGING)
|
|
add_definitions(-D_GLIBCXX_DEBUG)
|
|
|
|
append_compile_flag(-O0)
|
|
append_compile_flag(-Werror)
|
|
# this was protected for xmingw32, find out why
|
|
append_compile_flag(-fstack-protector)
|
|
else ()
|
|
append_compile_flag(-O2)
|
|
append_compile_flag(-fno-rtti)
|
|
add_definitions(-DNO_RTTI)
|
|
add_definitions(-DNDEBUG)
|
|
endif ()
|
|
|
|
|
|
###############################################################################
|
|
append_compile_flag(-g)
|
|
append_compile_flag(-ggdb)
|