diff Resources/CMake/LibVtkConfiguration.cmake @ 1:0f03a8a0bd6f

encoding of RT-STRUCT as STL
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 17 Jul 2023 18:54:31 +0200
parents
children ed7047aa4d3b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/CMake/LibVtkConfiguration.cmake	Mon Jul 17 18:54:31 2023 +0200
@@ -0,0 +1,190 @@
+# SPDX-FileCopyrightText: 2023 Sebastien Jodogne, UCLouvain, Belgium
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+
+# STL plugin for Orthanc
+# Copyright (C) 2023 Sebastien Jodogne, UCLouvain, Belgium
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+if (NOT STATIC_BUILD AND USE_SYSTEM_VTK)
+  find_package(VTK REQUIRED COMPONENTS
+    vtkCommonDataModel
+    vtkFiltersCore
+    vtkImagingCore
+    )
+
+  include_directories(${VTK_INCLUDE_DIRS})
+
+  # Add a void target
+  add_custom_target(VTK)
+
+else()
+  set(VTK_MAJOR 7)
+  set(VTK_MINOR 1)
+  set(VTK_REVISION 1)
+  set(VTK_MD5 "daee43460f4e95547f0635240ffbc9cb")
+
+  set(VTK_SOURCES_DIR "${CMAKE_BINARY_DIR}/VTK-${VTK_MAJOR}.${VTK_MINOR}.${VTK_REVISION}")
+
+  DownloadPackage(
+    "${VTK_MD5}"
+    "https://orthanc.uclouvain.be/third-party-downloads/VTK-${VTK_MAJOR}.${VTK_MINOR}.${VTK_REVISION}.tar.gz"
+    "${VTK_SOURCES_DIR}")
+
+  if (CMAKE_TOOLCHAIN_FILE)
+    # Take absolute path to the toolchain
+    get_filename_component(TMP ${CMAKE_TOOLCHAIN_FILE} REALPATH BASE ${CMAKE_SOURCE_DIR}/..)
+    list(APPEND VTKCMakeFlags
+      -DCMAKE_TOOLCHAIN_FILE=${TMP}
+      -DLSB_CC=${LSB_CC}
+      -DLSB_CXX=${LSB_CXX}
+      )
+  endif()
+
+  cmake_host_system_information(RESULT NumberOfPhysicalCores QUERY NUMBER_OF_PHYSICAL_CORES)
+
+  include(ExternalProject)
+
+  if (CMAKE_CROSSCOMPILING)
+    # First, generate the "VTKCompileToolsConfig.cmake" file on the host
+    # computer. This is necessary before cross-compiling. Explanations:
+    # https://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html#cross-compiling-a-complex-project-vtk
+    externalproject_add(VTKCompileTools
+      SOURCE_DIR "${VTK_SOURCES_DIR}"
+
+      CMAKE_ARGS
+      -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+      -DCMAKE_CXX_COMPILER=g++
+      -DCMAKE_C_COMPILER=gcc
+
+      BUILD_COMMAND
+      ${CMAKE_COMMAND} --build <BINARY_DIR> --config <CONFIG> --parallel ${NumberOfPhysicalCores} -t
+      VTKCompileToolsConfig.cmake
+
+      INSTALL_COMMAND ""  # Skip the install step
+      )
+
+    ExternalProject_Get_Property(VTKCompileTools binary_dir)
+    list(APPEND VTKCMakeFlags
+      -DVTKCompileTools_DIR=${binary_dir}
+      )
+
+    list(APPEND VTKCMakeFlags
+      -DCMAKE_REQUIRE_LARGE_FILE_SUPPORT=ON
+      -DCMAKE_REQUIRE_LARGE_FILE_SUPPORT__TRYRUN_OUTPUT=""
+      -DKWSYS_LFS_WORKS=ON
+      -DKWSYS_LFS_WORKS__TRYRUN_OUTPUT=""
+      -DFILE_OFFSET_BITS=64
+
+      # This simply disables HDF5, which is not used in Orthanc
+      -DVTK_USE_SYSTEM_HDF5=ON
+      )
+  else()
+    add_custom_target(VTKCompileTools)  # Empty target
+  endif()
+
+  if (CMAKE_COMPILER_IS_GNUCXX OR
+      CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+    # The following flag is necessary to statically link VTK within
+    # the shared library containing the plugin
+    set(Flags "-fPIC")
+  else()
+    set(Flags "")
+  endif()
+
+  externalproject_add(VTK
+    SOURCE_DIR "${VTK_SOURCES_DIR}"
+
+    CMAKE_ARGS
+    ${VTKCMakeFlags}
+    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+    -DBUILD_SHARED_LIBS=OFF
+    -DVTK_Group_Rendering=OFF
+
+    -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+    "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} ${Flags}"
+    -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+    "-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} ${Flags}"
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
+    -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+
+    BUILD_COMMAND
+    ${CMAKE_COMMAND} --build <BINARY_DIR> --config <CONFIG> --parallel ${NumberOfPhysicalCores} -t
+    vtkCommonCore
+    vtkCommonDataModel
+    vtkCommonMath
+    vtkCommonMisc
+    vtkCommonSystem
+    vtkCommonTransforms
+    vtkFiltersCore
+    vtkFiltersPoints
+    vtkImagingCore
+
+    EXCLUDE_FROM_ALL TRUE
+
+    INSTALL_COMMAND ""  # Skip the install step
+
+    DEPENDS VTKCompileTools
+    )
+
+  if(MSVC)
+    set(Suffix ".lib")
+    set(Prefix "")
+  else()
+    set(Suffix ".a")
+    list(GET CMAKE_FIND_LIBRARY_PREFIXES 0 Prefix)
+  endif()
+
+  foreach(module IN ITEMS
+      # WARNING: The order of the modules below *is* important!
+      ImagingCore
+      FiltersCore
+      CommonExecutionModel
+      CommonDataModel
+      CommonTransforms
+      CommonMath
+      CommonMisc
+      CommonSystem
+      CommonCore
+      sys
+      )
+    list(APPEND VTK_LIBRARIES
+      ${Prefix}vtk${module}-${VTK_MAJOR}.${VTK_MINOR}${Suffix}
+      )
+  endforeach()
+
+  ExternalProject_Get_Property(VTK binary_dir)
+  ExternalProject_Get_Property(VTK source_dir)
+
+  link_directories(${binary_dir}/lib)
+
+  foreach(dir IN ITEMS
+      Common/Core
+      Common/DataModel
+      Common/ExecutionModel
+      Common/Misc
+      Filters/Core
+      IO/Image
+      Imaging/Core
+      Utilities/KWIML
+      )
+    include_directories(
+      ${source_dir}/${dir}
+      ${binary_dir}/${dir}
+      )
+  endforeach()
+
+endif()