File: UseOptimization.cmake

package info (click to toggle)
opm-common 2022.10%2Bds-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 78,468 kB
  • sloc: cpp: 164,554; python: 2,872; sh: 216; xml: 174; ansic: 149; pascal: 136; makefile: 12
file content (86 lines) | stat: -rw-r--r-- 3,128 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# - Turn on optimizations based on build type

include(TestCXXAcceptsFlag)
include (AddOptions)
include (UseCompVer)
is_compiler_gcc_compatible ()

# mapping from profile name (in CMAKE_BUILD_TYPE) to variable part
set (_prof_DEBUG "Debug")
set (_prof_RELEASE "Release;RelWithDebInfo;MinSizeRel")

# if we are building a debug target, then disable all optimizations
# otherwise, turn them on. indicate to the code what we have done
# so it can turn on assertions etc.

if (CXX_COMPAT_GCC)
  # extra flags passed for optimization
  set (_opt_flags "")

  # link-time (a.k.a. global) optimizations
  # disabled due to widespread bugs in the linker plugin
  option (WHOLE_PROG_OPTIM "Whole program optimization (lto)" OFF)
  if (WHOLE_PROG_OPTIM)
    check_cxx_accepts_flag ("-flto" HAVE_LINK_OPTS)
    check_cxx_accepts_flag ("-fuse-linker-plugin" HAVE_LINK_PLUGIN)
    if (HAVE_LINK_OPTS)
      list (APPEND _opt_flags "-flto")
    endif (HAVE_LINK_OPTS)
    if (HAVE_LINK_PLUGIN)
      list (APPEND _opt_flags "-fuse-linker-plugin")
    endif (HAVE_LINK_PLUGIN)
    if(HAVE_LINK_OPTS AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
      string(REPLACE "." ";" VERSION_LIST "${CMAKE_C_COMPILER_VERSION}")
      list(GET VERSION_LIST 0 VER_MAJOR)
      find_program(LTO_AR_COMMAND NAMES ${CMAKE_C_COMPILER}-ar gcc-ar-${VER_MAJOR} gcc-ar)
      find_program(LTO_RANLIB_COMMAND NAMES ${CMAKE_C_COMPILER}-ranlib gcc-ranlib-${VER_MAJOR} gcc-ranlib)
      if(LTO_AR_COMMAND)
        set(CMAKE_AR ${LTO_AR_COMMAND})
        message(STATUS "Using LTO-enabled ar: ${CMAKE_AR}")
      endif()
      if(LTO_RANLIB_COMMAND)
        set(CMAKE_RANLIB ${LTO_RANLIB_COMMAND})
        message(STATUS "Using LTO-enabled ranlib: ${CMAKE_RANLIB}")
      endif()
    endif()
  endif (WHOLE_PROG_OPTIM)

  # native instruction set tuning
  option (WITH_NATIVE "Use native instruction set" ON)
  if (WITH_NATIVE)
	check_cxx_accepts_flag ("-mtune=native" HAVE_MTUNE)
	if (HAVE_MTUNE)
	  list (APPEND _opt_flags "-mtune=native")
	endif (HAVE_MTUNE)
  endif (WITH_NATIVE)

  # default optimization flags, if not set by user
  set_default_option (CXX _opt_dbg "-O0" "(^|\ )-O")
  set_default_option (CXX _opt_rel "-O3" "(^|\ )-O")

  # use these options for debug builds - no optimizations
  add_options (ALL_LANGUAGES "${_prof_DEBUG}" ${_opt_dbg} "-DDEBUG")

  # use these options for release builds - full optimization
  add_options (ALL_LANGUAGES "${_prof_RELEASE}" ${_opt_rel} ${_opt_flags})
  option(WITH_NDEBUG "Disable asserts in release mode" OFF)
  if(NOT WITH_NDEBUG)
    add_options (ALL_LANGUAGES "${_prof_RELEASE}" -UNDEBUG)
  endif()

else ()
  # default information from system
  foreach (lang IN ITEMS C CXX Fortran)
	if (lang STREQUAL "Fortran")
	  set (_lang F)
	else (lang STREQUAL "Fortran")
	  set (_lang ${lang})
	endif (lang STREQUAL "Fortran")
	foreach (profile IN ITEMS DEBUG RELEASE)
	  if (NOT CMAKE_${lang}_FLAGS_${profile})
		add_options (${lang} "${_prof_${profile}}"
		  "$ENV{${_lang}FLAGS} ${CMAKE_${lang}_FLAGS_${profile}_INIT}")
	  endif (NOT CMAKE_${lang}_FLAGS_${profile})
	endforeach (profile)
  endforeach (lang)
endif ()