lto
[dyninst.git] / cmake / optimization.cmake
1 if (CMAKE_COMPILER_IS_GNUCXX 
2     OR ${CMAKE_C_COMPILER_ID} MATCHES Clang
3     OR ${CMAKE_C_COMPILER_ID} MATCHES GNU
4     OR ${CMAKE_C_COMPILER_ID} MATCHES Intel)
5 if(ENABLE_LTO)
6     set(LTO_FLAGS "-flto")
7     set(LTO_LINK_FLAGS "-fuse-ld=gold")
8 else()
9     set(LTO_FLAGS "")
10     set(LTO_LINK_FLAGS "")
11 endif()
12 set (CMAKE_C_FLAGS_DEBUG "-O0 -g")
13 set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
14
15 set (CMAKE_C_FLAGS_RELEASE "-O2 ${LTO_FLAGS}")
16 set (CMAKE_CXX_FLAGS_RELEASE "-O2 ${LTO_FLAGS}")
17
18 set (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g ${LTO_FLAGS}")
19 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g ${LTO_FLAGS}")
20
21 set (FORCE_FRAME_POINTER "-fno-omit-frame-pointer")
22 # Ensure each library is fully linked
23 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
24
25 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LTO_LINK_FLAGS}")
26 set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LTO_LINK_FLAGS}")
27 else (MSVC)
28 if(ENABLE_LTO)
29     set(LTO_FLAGS "/GL")
30     set(LTO_LINK_FLAGS "/LTCG")
31 else()
32     set(LTO_FLAGS "")
33     set(LTO_LINK_FLAGS "")
34 endif()
35 set (CMAKE_C_FLAGS_DEBUG "/MP /Od /Zi /MDd /D_DEBUG")
36 set (CMAKE_CXX_FLAGS_DEBUG "/MP /Od /Zi /MDd /D_DEBUG")
37
38 set (CMAKE_C_FLAGS_RELEASE "/MP /O2 /MD /D NDEBUG ${LTO_FLAGS}")
39 set (CMAKE_CXX_FLAGS_RELEASE "/MP /O2 /MD /D NDEBUG ${LTO_FLAGS}")
40
41 set (CMAKE_C_FLAGS_RELWITHDEBINFO "/MP /O2 /Zi /MD /D NDEBUG ${LTO_FLAGS}")
42 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MP /O2 /Zi /MD /D NDEBUG ${LTO_FLAGS}")
43
44 set (FORCE_FRAME_POINTER "/Oy-")
45
46 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LTO_LINK_FLAGS}")
47 set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LTO_LINK_FLAGS}")
48 set (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${LTO_LINK_FLAGS}")
49 endif()
50 message(STATUS "Set optimization flags")