2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# function:  list_append_cache(var [new_values ...])
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Like "list(APPEND ...)" but working for CACHE variables.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# -----------------------------------------------------------
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function ( list_append_cache  var ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( cur_value  ${ ${var } } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  list ( APPEND  cur_value  ${ ARGN } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get_property ( MYVAR_DOCSTRING  CACHE  ${ var }  PROPERTY  HELPSTRING ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( ${ var }  "${cur_value}"  CACHE  STRING  "${MYVAR_DOCSTRING}"  FORCE ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# function:  append_config_if_not_empty(TARGET_VARIABLE build_type)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Auxiliary function used to merge configuration-specific flags into the
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# global variables that will actually be send to cmake targets.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# -----------------------------------------------------------
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function ( append_config_if_not_empty  TARGET_VARIABLE_  build_type ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  string ( TOUPPER  "${build_type}"  build_type_toupper ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( flags_variable_name  "${TARGET_VARIABLE_}_${build_type_toupper}" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( flags_  ${ ${flags_variable_name } } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( NOT  "${flags_}"  STREQUAL  "" ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-16 08:30:28 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( ${ build_type_toupper }  STREQUAL  "COMMON" ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # Special "COMMON" configuration type, just append without CMake expression:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      list_append_cache ( ${ TARGET_VARIABLE_ }  "${flags_}" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Regular configuration type:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      list_append_cache ( ${ TARGET_VARIABLE_ }  "$<$<CONFIG:${build_type}>:${flags_}>" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Add install prefix to search path
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								list ( APPEND  CMAKE_PREFIX_PATH  "${CMAKE_INSTALL_PREFIX}" ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Set up build types for MSVC and XCode
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_CONFIGURATION_TYPES  Debug  Release  Timing  Profiling  RelWithDebInfo  MinSizeRel  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      C A C H E  S T R I N G  " B u i l d  t y p e s  a v a i l a b l e  t o  MSVC  a n d  X C o d e " ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mark_as_advanced ( FORCE  GTSAM_CMAKE_CONFIGURATION_TYPES ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_CONFIGURATION_TYPES  ${ GTSAM_CMAKE_CONFIGURATION_TYPES }  CACHE  STRING  "Build configurations"  FORCE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Default to Release mode
  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if ( NOT  CMAKE_BUILD_TYPE  AND  NOT  MSVC  AND  NOT  XCODE_VERSION ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set ( GTSAM_CMAKE_BUILD_TYPE  "Release"  CACHE  STRING 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      " C h o o s e  t h e  t y p e  o f  b u i l d ,  o p t i o n s  a r e :  N o n e  D e b u g  R e l e a s e  T i m i n g  P r o f i l i n g  R e l W i t h D e b I n f o . " ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-14 00:18:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set ( CMAKE_BUILD_TYPE  ${ GTSAM_CMAKE_BUILD_TYPE }  CACHE  STRING 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      " C h o o s e  t h e  t y p e  o f  b u i l d ,  o p t i o n s  a r e :  N o n e  D e b u g  R e l e a s e  T i m i n g  P r o f i l i n g  R e l W i t h D e b I n f o . "  F O R C E ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Add option for using build type postfixes to allow installing multiple build modes
  
						 
					
						
							
								
									
										
										
										
											2014-01-31 03:41:25 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								option ( GTSAM_BUILD_TYPE_POSTFIXES         "Enable/Disable appending the build type to the name of compiled libraries"  ON ) 
  
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Define all cache variables, to be populated below depending on the OS/compiler:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_OPTIONS_PRIVATE         ""  CACHE  STRING  "(Do not edit) Private compiler flags for all build configurations."  FORCE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_OPTIONS_PUBLIC          ""  CACHE  STRING  "(Do not edit) Public compiler flags (exported to user projects) for all build configurations."   FORCE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE     ""  CACHE  STRING  "(Do not edit) Private preprocessor macros for all build configurations."  FORCE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PUBLIC      ""  CACHE  STRING  "(Do not edit) Public preprocessor macros for all build configurations."  FORCE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mark_as_advanced ( GTSAM_COMPILE_OPTIONS_PRIVATE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mark_as_advanced ( GTSAM_COMPILE_OPTIONS_PUBLIC ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mark_as_advanced ( GTSAM_COMPILE_DEFINITIONS_PRIVATE ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mark_as_advanced ( GTSAM_COMPILE_DEFINITIONS_PUBLIC ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								foreach ( build_type  ${ GTSAM_CMAKE_CONFIGURATION_TYPES } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  string ( TOUPPER  "${build_type}"  build_type_toupper ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Define empty cache variables for "public". "private" are creaed below.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PUBLIC_ ${ build_type_toupper }       ""  CACHE  STRING  "(User editable) Public compiler flags (exported to user projects) for `${build_type_toupper}` configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_DEFINITIONS_PUBLIC_ ${ build_type_toupper }   ""  CACHE  STRING  "(User editable) Public preprocessor macros for `${build_type_toupper}` configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endforeach ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Common preprocessor macros for each configuration:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE_DEBUG            "_DEBUG;EIGEN_INITIALIZE_MATRICES_BY_NAN"  CACHE  STRING  "(User editable) Private preprocessor macros for Debug configuration." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE_RELWITHDEBINFO   "NDEBUG"  CACHE  STRING  "(User editable) Private preprocessor macros for RelWithDebInfo configuration." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE_RELEASE          "NDEBUG"  CACHE  STRING  "(User editable) Private preprocessor macros for Release configuration." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE_PROFILING        "NDEBUG"  CACHE  STRING  "(User editable) Private preprocessor macros for Profiling configuration." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_COMPILE_DEFINITIONS_PRIVATE_TIMING           "NDEBUG;ENABLE_TIMING"  CACHE  STRING  "(User editable) Private preprocessor macros for Timing configuration." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if ( MSVC ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Common to all configurations:
 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-11 20:27:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  list_append_cache ( GTSAM_COMPILE_DEFINITIONS_PRIVATE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    W I N D O W S _ L E A N _ A N D _ M E A N 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    N O M I N M A X 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-28 03:42:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Avoid literally hundreds to thousands of warnings:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  list_append_cache ( GTSAM_COMPILE_OPTIONS_PUBLIC 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/ w d 4 2 6 7  # warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Other (non-preprocessor macros) compiler flags:
  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if ( MSVC ) 
  
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Common to all configurations, next for each configuration:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_COMMON           /W3  /GR  /EHsc  /MP   CACHE  STRING  "(User editable) Private compiler flags for all configurations." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_DEBUG            /MDd  /Zi  /Ob0  /Od  /RTC1   CACHE  STRING  "(User editable) Private compiler flags for Debug configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_RELWITHDEBINFO   /MD  /O2  /D  /Zi  /d2Zi+   CACHE  STRING  "(User editable) Private compiler flags for RelWithDebInfo configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_RELEASE          /MD  /O2   CACHE  STRING  "(User editable) Private compiler flags for Release configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_PROFILING        /MD  /O2   /Zi   CACHE  STRING  "(User editable) Private compiler flags for Profiling configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_TIMING           /MD  /O2   CACHE  STRING  "(User editable) Private compiler flags for Timing configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # Common to all configurations, next for each configuration:
 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-13 00:21:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # "-fPIC" is to ensure proper code generation for shared libraries
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_COMMON           -Wall  -fPIC  CACHE  STRING  "(User editable) Private compiler flags for all configurations." ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_DEBUG            -g  -fno-inline   CACHE  STRING  "(User editable) Private compiler flags for Debug configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_RELWITHDEBINFO   -g  -O3   CACHE  STRING  "(User editable) Private compiler flags for RelWithDebInfo configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_RELEASE          -O3   CACHE  STRING  "(User editable) Private compiler flags for Release configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_PROFILING        -O3   CACHE  STRING  "(User editable) Private compiler flags for Profiling configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( GTSAM_COMPILE_OPTIONS_PRIVATE_TIMING           -g  -O3   CACHE  STRING  "(User editable) Private compiler flags for Timing configuration." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Enable C++11:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  ( NOT  CMAKE_VERSION  VERSION_LESS  3.8 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set ( GTSAM_COMPILE_FEATURES_PUBLIC  "cxx_std_11"  CACHE  STRING  "CMake compile features property for all gtsam targets." ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # See: https://cmake.org/cmake/help/latest/prop_tgt/CXX_EXTENSIONS.html
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # This is to enable -std=c++11 instead of -std=g++11
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set ( CMAKE_CXX_EXTENSIONS  OFF ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								else ( ) 
  
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # Old cmake versions:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( NOT  MSVC ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    list_append_cache ( GTSAM_COMPILE_OPTIONS_PUBLIC  $< $<COMPILE_LANGUAGE:CXX > :-std=c++11> ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Merge all user-defined flags into the variables that are to be actually used by CMake:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								foreach ( build_type  "common"  ${ GTSAM_CMAKE_CONFIGURATION_TYPES } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  append_config_if_not_empty ( GTSAM_COMPILE_OPTIONS_PRIVATE  ${ build_type } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  append_config_if_not_empty ( GTSAM_COMPILE_OPTIONS_PUBLIC   ${ build_type } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  append_config_if_not_empty ( GTSAM_COMPILE_DEFINITIONS_PRIVATE   ${ build_type } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  append_config_if_not_empty ( GTSAM_COMPILE_DEFINITIONS_PUBLIC    ${ build_type } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endforeach ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Linker flags:
  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_SHARED_LINKER_FLAGS_TIMING   "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during timing builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_MODULE_LINKER_FLAGS_TIMING   "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during timing builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_EXE_LINKER_FLAGS_TIMING      "${CMAKE_EXE_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during timing builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_SHARED_LINKER_FLAGS_PROFILING  "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during profiling builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_MODULE_LINKER_FLAGS_PROFILING  "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during profiling builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( GTSAM_CMAKE_EXE_LINKER_FLAGS_PROFILING     "${CMAKE_EXE_LINKER_FLAGS_RELEASE}"  CACHE  STRING  "Linker flags during profiling builds." ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								mark_as_advanced ( GTSAM_CMAKE_EXE_LINKER_FLAGS_TIMING  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 G T S A M _ C M A K E _ S H A R E D _ L I N K E R _ F L A G S _ T I M I N G  G T S A M _ C M A K E _ M O D U L E _ L I N K E R _ F L A G S _ T I M I N G 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 G T S A M _ C M A K E _ C _ F L A G S _ P R O F I L I N G  G T S A M _  G T S A M _ C M A K E _ E X E _ L I N K E R _ F L A G S _ P R O F I L I N G 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 G T S A M _ C M A K E _ S H A R E D _ L I N K E R _ F L A G S _ P R O F I L I N G  G T S A M _ C M A K E _ M O D U L E _ L I N K E R _ F L A G S _ P R O F I L I N G ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_SHARED_LINKER_FLAGS_TIMING  ${ GTSAM_CMAKE_SHARED_LINKER_FLAGS_TIMING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_MODULE_LINKER_FLAGS_TIMING  ${ GTSAM_CMAKE_MODULE_LINKER_FLAGS_TIMING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_EXE_LINKER_FLAGS_TIMING  ${ GTSAM_CMAKE_EXE_LINKER_FLAGS_TIMING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_SHARED_LINKER_FLAGS_PROFILING  ${ GTSAM_CMAKE_SHARED_LINKER_FLAGS_PROFILING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_MODULE_LINKER_FLAGS_PROFILING  ${ GTSAM_CMAKE_MODULE_LINKER_FLAGS_PROFILING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set ( CMAKE_EXE_LINKER_FLAGS_PROFILING  ${ GTSAM_CMAKE_EXE_LINKER_FLAGS_PROFILING } ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-09 20:01:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Clang uses a template depth that is less than standard and is too small
  
						 
					
						
							
								
									
										
										
										
											2015-01-16 22:33:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if ( ${ CMAKE_CXX_COMPILER_ID }  STREQUAL  "Clang" ) 
  
						 
					
						
							
								
									
										
										
										
											2015-04-09 20:01:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Apple Clang before 5.0 does not support -ftemplate-depth.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if ( NOT  ( APPLE  AND  "${CMAKE_CXX_COMPILER_VERSION}"  VERSION_LESS  "5.0" ) ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        list_append_cache ( GTSAM_COMPILE_OPTIONS_PUBLIC  "-ftemplate-depth=1024" ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-09 20:01:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif ( ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 17:32:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  ( NOT  MSVC ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  option ( GTSAM_BUILD_WITH_MARCH_NATIVE   "Enable/Disable building with all instructions supported by native architecture (binary may not be portable!)"  ON ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if ( GTSAM_BUILD_WITH_MARCH_NATIVE ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Add as public flag so all dependant projects also use it, as required
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # by Eigen to avid crashes due to SIMD vectorization:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    list_append_cache ( GTSAM_COMPILE_OPTIONS_PUBLIC  "-march=native" ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-02 17:32:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 06:15:27 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Set up build type library postfixes
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if ( GTSAM_BUILD_TYPE_POSTFIXES ) 
  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  foreach ( build_type  Debug  Timing  Profiling  RelWithDebInfo  MinSizeRel ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    string ( TOUPPER  "${build_type}"  build_type_toupper ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set ( CMAKE_ ${ build_type_toupper } _POSTFIX  ${ build_type } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endforeach ( ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Make common binary output directory when on Windows
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if ( WIN32 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( RUNTIME_OUTPUT_PATH  "${CMAKE_BINARY_DIR}/bin" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( EXECUTABLE_OUTPUT_PATH  "${CMAKE_BINARY_DIR}/bin" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( LIBRARY_OUTPUT_PATH  "${CMAKE_BINARY_DIR}/lib" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Set up build type list for cmake-gui
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if ( NOT  "${CMAKE_BUILD_TYPE}"  STREQUAL  "" ) 
  
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if ( ${ CMAKE_MAJOR_VERSION } . ${ CMAKE_MINOR_VERSION }  VERSION_GREATER  2.8  OR  ${ CMAKE_MAJOR_VERSION } . ${ CMAKE_MINOR_VERSION }  VERSION_EQUAL  2.8 ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_property ( CACHE  CMAKE_BUILD_TYPE  PROPERTY  STRINGS  None  Debug  Release  Timing  Profiling  RelWithDebInfo  MinSizeRel ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Check build types
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								string ( TOLOWER  "${CMAKE_BUILD_TYPE}"  cmake_build_type_tolower ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if (     NOT  cmake_build_type_tolower  STREQUAL  ""  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " n o n e " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " d e b u g " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " r e l e a s e " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " t i m i n g " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " p r o f i l i n g " 
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-14 13:26:24 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " r e l w i t h d e b i n f o " 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   A N D  N O T  c m a k e _ b u i l d _ t y p e _ t o l o w e r  S T R E Q U A L  " m i n s i z e r e l " ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 03:01:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  message ( FATAL_ERROR  "Unknown build type \" ${ CMAKE_BUILD_TYPE } \".  Allowed  values  are  None,  Debug,  Release,  Timing,  Profiling,  RelWithDebInfo,  MinSizeRel  ( case-insensitive ) . " ) 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-23 02:01:39 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Enable Visual Studio solution folders
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set_property ( GLOBAL  PROPERTY  USE_FOLDERS  On ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Function for automatically assigning source folders
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function ( gtsam_assign_source_folders ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set ( FILES  ${ ARGV } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  foreach ( file  ${ FILES } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    file ( RELATIVE_PATH  relative_file  "${CMAKE_CURRENT_SOURCE_DIR}"  "${file}" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get_filename_component ( relative_path  "${relative_file}"  PATH ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    file ( TO_NATIVE_PATH  "${relative_path}"  relative_path ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    source_group ( "${relative_path}"  FILES  "${file}" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endforeach ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Find and assign all source and header files
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function ( gtsam_assign_all_source_folders ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  file ( GLOB_RECURSE  all_c_srcs  "*.c" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  file ( GLOB_RECURSE  all_cpp_srcs  "*.cpp" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  file ( GLOB_RECURSE  all_headers  "*.h" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  gtsam_assign_source_folders ( "${all_c_srcs};${all_cpp_srcs};${all_headers}" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-29 17:02:10 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Applies the per-config build flags to the given target (e.g. gtsam, wrap_lib)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function ( gtsam_apply_build_flags  target_name_ ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # To enable C++11: the use of target_compile_features() is preferred since
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # it will be not in conflict with a more modern C++ standard, if used in a
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # client program.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( NOT  "${GTSAM_COMPILE_FEATURES_PUBLIC}"  STREQUAL  "" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  	target_compile_features ( ${ target_name_ }  PUBLIC  ${ GTSAM_COMPILE_FEATURES_PUBLIC } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  target_compile_definitions ( ${ target_name_ }  PRIVATE  ${ GTSAM_COMPILE_DEFINITIONS_PRIVATE } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  target_compile_definitions ( ${ target_name_ }  PUBLIC  ${ GTSAM_COMPILE_DEFINITIONS_PUBLIC } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( NOT  "${GTSAM_COMPILE_OPTIONS_PUBLIC}"  STREQUAL  "" ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    target_compile_options ( ${ target_name_ }  PUBLIC  ${ GTSAM_COMPILE_OPTIONS_PUBLIC } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  endif ( ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  target_compile_options ( ${ target_name_ }  PRIVATE  ${ GTSAM_COMPILE_OPTIONS_PRIVATE } ) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction ( gtsam_apply_build_flags )