File: itkExternal_Eigen3.cmake

package info (click to toggle)
insighttoolkit5 5.4.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 704,404 kB
  • sloc: cpp: 783,697; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,874; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 461; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (90 lines) | stat: -rw-r--r-- 4,222 bytes parent folder | download | duplicates (2)
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
#
# Encapsulates building Eigen3 as an External Project.
include(ITK_CheckCCompilerFlag)

set(_additional_external_project_args)
if(APPLE)
  if(DEFINED CMAKE_APPLE_SILICON_PROCESSOR)
    list(APPEND _additional_external_project_args
         -DCMAKE_APPLE_SILICON_PROCESSOR:STRING=${CMAKE_APPLE_SILICON_PROCESSOR})
  endif()
endif()

if(NOT CMAKE_CONFIGURATION_TYPES)
  list(APPEND _additional_external_project_args -DCMAKE_BUILD_TYPE:STRING=Release)
endif()

if(CMAKE_SH AND CMAKE_VERSION VERSION_LESS "3.17.0")
  # Setting CMAKE_SH is required when using "MinGW Makefiles" generator with CMake < 3.17
  # See https://github.com/InsightSoftwareConsortium/ITK/issues/66#issuecomment-424374973
  list(APPEND _additional_external_project_args -DCMAKE_SH:PATH=${CMAKE_SH})
endif()

# Because the header-only nature of Eigen3, EIGEN_MPL2_ONLY definition could be leaked outside ITK.
# This would wrongly enforce EIGEN_MPL2_ONLY to other libraries using Eigen.
# We wrap this definition in ITK_USE_EIGEN_MPL2_ONLY, and only enabling it internally in the dashboards and CI,
# to avoid introducing GPL code from Eigen3 internally in ITK.
option(ITK_USE_EIGEN_MPL2_ONLY "Set compile definition EIGEN_MPL2_ONLY for ITKInternalEigen3." OFF)
mark_as_advanced(ITK_USE_EIGEN_MPL2_ONLY)

if(ITK_USE_SYSTEM_EIGEN)
  find_package(Eigen3)
else()
  # Set variables used to configure and install Eigen
  # _eigen3_cmake_install_prefix work also with relative CMAKE_INSTALL_PREFIX
  get_filename_component(
    _eigen3_cmake_install_prefix
    ${CMAKE_INSTALL_PREFIX}
    ABSOLUTE
    BASE_DIR
    ${PROJECT_BINARY_DIR})
  set(_eigen3_cmake_install_includedir ${ITK_INSTALL_INCLUDE_DIR})
  set(_eigen3_cmake_install_datadir ${ITK_INSTALL_PACKAGE_DIR}/Modules)
  set(_eigen3_source_dir "${ITK_SOURCE_DIR}/Modules/ThirdParty/Eigen3/src/itkeigen")
  set(_eigen3_build_dir "${ITK_BINARY_DIR}/ITKInternalEigen3-build")
  # ExternalProject_add creates a target for the build tree,
  # too late for our purposes of find_package at configure time.
  # We execute the configuration manually to create the Config and Targets.cmake files.
  # Nothing to link or compile, so no need to pass compiler flags.
  # However, generators and c,cxx compilers have to be explicitly passed
  # for CMake configuration to work.
  # Configure Eigen
  execute_process(
    COMMAND
      ${CMAKE_COMMAND} -DCMAKE_SYSTEM_VERSION:STRING=${CMAKE_SYSTEM_VERSION} -DCMAKE_GENERATOR:STRING=${CMAKE_GENERATOR}
      -DCMAKE_GENERATOR_TOOLSET:STRING=${CMAKE_GENERATOR_TOOLSET}
      -DCMAKE_GENERATOR_PLATFORM:STRING=${CMAKE_GENERATOR_PLATFORM}
      -DCMAKE_GENERATOR_INSTANCE:STRING=${CMAKE_GENERATOR_INSTANCE} -DCMAKE_C_COMPILER:PATH=${CMAKE_C_COMPILER}
      -DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} -DCMAKE_CXX_COMPILER:PATH=${CMAKE_CXX_COMPILER}
      -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
      -DCMAKE_INSTALL_PREFIX:PATH=${_eigen3_cmake_install_prefix}
      -DCMAKE_INSTALL_INCLUDEDIR:PATH=${_eigen3_cmake_install_includedir}
      -DCMAKE_INSTALL_DATADIR:PATH=${_eigen3_cmake_install_datadir}
      -DITK_USE_EIGEN_MPL2_ONLY:BOOL=${ITK_USE_EIGEN_MPL2_ONLY} ${_additional_external_project_args} -S
      ${_eigen3_source_dir} -B ${_eigen3_build_dir}
    OUTPUT_VARIABLE _ITKEigen3Config_OUTPUT
    ERROR_VARIABLE  _ITKEigen3Config_OUTPUT
    RESULT_VARIABLE _ITKEigen3Config_RESULT
    )
  if(NOT _ITKEigen3Config_RESULT EQUAL 0)
    string(REPLACE "\n" "\n  " _ITKEigen3Config_OUTPUT "${_ITKEigen3Config_OUTPUT}")
    message(FATAL_ERROR
      "ITKInternalEigen3 configuration failed:\n"
      "  ${_ITKEigen3Config_OUTPUT}\n"
      )
  endif()
  if(NOT EXISTS "${_eigen3_build_dir}/ITKInternalEigen3Config.cmake")
    message(FATAL_ERROR
      "ITKInternalEigen3 configuration did not produce expected file:\n"
      "  ${_eigen3_build_dir}/ITKInternalEigen3Config.cmake\n"
      )
  endif()
  set(ITKInternalEigen3_DIR ${_eigen3_build_dir})
  find_package(ITKInternalEigen3 CONFIG REQUIRED QUIET)
  install(
    CODE "execute_process(
    COMMAND \${CMAKE_COMMAND} --build . --config Release --target install
    WORKING_DIRECTORY \"${_eigen3_build_dir}\"
    )"
    COMPONENT Development)
endif()