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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
project(ITKCommon)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH})
# Version string should not include patch level. The major.minor is
# enough to distinguish available features of the toolkit.
set(ITK_VERSION_STRING "${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}")
include(TestBigEndian)
test_big_endian(CMAKE_WORDS_BIGENDIAN)
include(FindThreads)
set(ITK_USE_WIN32_THREADS 0)
set(ITK_USE_PTHREADS 0)
set(ITK_HP_PTHREADS 0)
if(CMAKE_USE_WIN32_THREADS_INIT)
set(ITK_USE_WIN32_THREADS 1)
elseif(CMAKE_USE_PTHREADS_INIT AND NOT EMSCRIPTEN)
set(ITK_USE_PTHREADS 1)
elseif(CMAKE_HP_PTHREADS_INIT)
set(ITK_HP_PTHREADS 1)
endif()
set(CMAKE_THREAD_LIBS
"${CMAKE_THREAD_LIBS_INIT}"
CACHE STRING "Thread library used.")
mark_as_advanced(CMAKE_THREAD_LIBS)
set(ITK_DEFAULT_MAX_THREADS
128
CACHE STRING "The maximum number of threads allowed. Default: 128")
mark_as_advanced(ITK_DEFAULT_MAX_THREADS)
set(ITK_DEFAULT_THREADER
"Auto"
CACHE STRING "Default multithreader.")
mark_as_advanced(ITK_DEFAULT_THREADER)
set_property(
CACHE ITK_DEFAULT_THREADER
PROPERTY STRINGS
Auto
TBB
Pool
Platform)
# See if compiler preprocessor has the __FUNCTION__ directive used by itkExceptionMacro
include(CheckCPPDirective)
check_cpp_directive_exists(__FUNCTION__ ITK_CPP_FUNCTION)
include(CheckIncludeFiles)
# check if the platform has the header file "fenv.h" which has been added as part of the C99 standard
check_include_files(fenv.h HAVE_FENV_H)
# check if the platform has some widely used header files
check_include_files("unistd.h" HAVE_UNISTD_H)
if(CMAKE_CXX_STANDARD)
set(TRY_COMP_CXX_STANDARD -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD})
endif()
# Identify the version of CXX compiler used when ITK was built. This needs to be
# identified so that external applications can identify how ITK was built.
set(ITK_COMPILED_CXX_STANDARD_VERSION 1)
foreach(CXX_TEST_VERSION 201103L 201402L 201703L)
try_compile(
ITK_MIN_CXX_LEVEL_TEST ${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp
${CMAKE_CURRENT_LIST_DIR}/CMake/itkGetCXXCompilerVersion.cxx
CMAKE_FLAGS ${TRY_COMP_CXX_STANDARD}
COMPILE_DEFINITIONS -DITK_CXX_TEST_VERSION=${CXX_TEST_VERSION}
OUTPUT_VARIABLE ITK_COMPILED_CXX_STANDARD_VERSION_LOG)
if(ITK_MIN_CXX_LEVEL_TEST)
set(ITK_COMPILED_CXX_STANDARD_VERSION ${CXX_TEST_VERSION})
endif()
endforeach()
try_compile(
ITK_HAS_GNU_ATTRIBUTE_ALIGNED ${ITK_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasGNUAttributeAligned.cxx
CMAKE_FLAGS "-DCMAKE_BUILD_TYPE:STRING=Debug")
set(ITK_WINDOWS_EXPORT_ALL_SYMBOLS ${CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS})
try_compile(ITK_HAS_MALLINFO ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasMallinfo.cxx)
try_compile(ITK_HAS_MALLINFO2 ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasMallinfo2.cxx)
try_compile(ITK_HAS_FEENABLEEXCEPT ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFeenableexcept.cxx)
try_compile(ITK_HAS_FEGETENV ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFegetenv.cxx)
try_compile(ITK_HAS_FESETENV ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFesetenv.cxx)
try_compile(
ITK_HAS_STRUCT_FENV_T_CONTROL ${ITK_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFenvtStructMember.cxx
COMPILE_DEFINITIONS -DITK_CHECK_FENV_T_CONTROL)
try_compile(
ITK_HAS_STRUCT_FENV_T_CONTROL_WORD ${ITK_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFenvtStructMember.cxx
COMPILE_DEFINITIONS -DITK_CHECK_FENV_T_CONTROL_WORD)
try_compile(
ITK_HAS_STRUCT_FENV_T_CW ${ITK_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFenvtStructMember.cxx
COMPILE_DEFINITIONS -DITK_CHECK_FENV_T_CW)
try_compile(
ITK_HAS_SCHED_GETAFFINITY ${ITK_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasSchedGetAffinity.cxx)
#-----------------------------------------------------------------------------
# Make default visibility as an option for generated export header
# check if private (hidden, local) symbols can be dynamic_cast between
# different instances.
include(itkCheckPrivateDynamicCast)
set(_template_visibility_init OFF)
if(NOT ITK_PRIVATE_DYNAMIC_CAST AND NOT (CMAKE_CXX_VISIBILITY_PRESET STREQUAL "hidden" AND NOT BUILD_SHARED_LIBS))
set(_template_visibility_init ON)
endif()
# This adds default symbol visibility to template class types, which
# results in 'weak external typeinfo' in libraries that use these
# types, whether with implicit or explicit instantiation, default
# hidden or non-hidden visibility.
# This is required on Mac OSX to avoid dynamic_cast failures across binaries.
# See Change-Id: Ib4a6b8cafe8720c3a2a5b3e6ba833d11002978df for more information."
option(ITK_TEMPLATE_VISIBILITY_DEFAULT
"Set symbol visibility to default for template class declarations. https://itk.org/Wiki/ITK/FAQ"
"${_template_visibility_init}")
mark_as_advanced(ITK_TEMPLATE_VISIBILITY_DEFAULT)
# Configuration variable is named ITK_USE_TBB instead of simply using the
# TBB module name (Module_ITKTBB) for code readability.
set(ITK_USE_TBB ${Module_ITKTBB})
configure_file(src/itkConfigure.h.in itkConfigure.h)
configure_file(src/itkConfigurePrivate.h.in itkConfigurePrivate.h)
set(ITKCommon_INCLUDE_DIRS ${ITKCommon_BINARY_DIR})
set(ITKCommon_LIBRARIES ITKCommon)
itk_module_impl()
install(
FILES ${ITKCommon_BINARY_DIR}/itkConfigure.h
DESTINATION ${ITKCommon_INSTALL_INCLUDE_DIR}
COMPONENT Development)
|