diff --git a/CMake/SlicerBlockCTKAppLauncherSettings.cmake b/CMake/SlicerBlockCTKAppLauncherSettings.cmake index 97491087f72402dbc6e951be93164e755b96c606..b6ef664edb9784f5b12d9524815d56e65a90bb3e 100644 --- a/CMake/SlicerBlockCTKAppLauncherSettings.cmake +++ b/CMake/SlicerBlockCTKAppLauncherSettings.cmake @@ -158,6 +158,12 @@ if(Slicer_USE_NUMPY) ) endif() +if(Slicer_USE_SimpleITK) + list(APPEND SLICER_LIBRARY_PATHS_BUILD + ${SimpleITK_DIR}/${LIB_SUBDIR}/ + ) +endif() + #----------------------------------------------------------------------------- # PATHS #----------------------------------------------------------------------------- diff --git a/CMake/SlicerBlockInstallCMakeProjects.cmake b/CMake/SlicerBlockInstallCMakeProjects.cmake index 322d6c2f62d592d14f3585f87b73aa10e9ed194e..e47d8ad56df20d708afab0a2b9ff6645fb84c885 100644 --- a/CMake/SlicerBlockInstallCMakeProjects.cmake +++ b/CMake/SlicerBlockInstallCMakeProjects.cmake @@ -21,6 +21,14 @@ set(CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ITK_DIR};ITK endif() endif() +# ------------------------------------------------------------------------- +# Install SimpleITK +# +#------------------------------------------------------------------------- +if(NOT "${SimpleITK_DIR}" STREQUAL "" AND EXISTS "${SimpleITK_DIR}/CMakeCache.txt" AND ${Slicer_USE_SimpleITK_SHARED}) + set(CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SimpleITK_DIR};SimpleITK;Unspecified;/") +endif() + # ------------------------------------------------------------------------- # Install SlicerExecutionModel # ------------------------------------------------------------------------- diff --git a/CMake/SlicerConfig.cmake.in b/CMake/SlicerConfig.cmake.in index 4d71355b3a6773adb1a29be6d47af0309e670f79..633f52752c47d93cf5a29a4a3c4137b16df1c106 100644 --- a/CMake/SlicerConfig.cmake.in +++ b/CMake/SlicerConfig.cmake.in @@ -109,6 +109,7 @@ set(Slicer_USE_OpenIGTLink "@Slicer_USE_OpenIGTLink@") set(Slicer_USE_PYTHONQT "@Slicer_USE_PYTHONQT@") set(Slicer_USE_PYTHONQT_WITH_TCL "@Slicer_USE_PYTHONQT_WITH_TCL@") set(Slicer_USE_QtTesting "@Slicer_USE_QtTesting@") +set(Slicer_USE_SimpleITK "@Slicer_USE_SimpleITK@") set(Slicer_BUILD_CLI_SUPPORT "@Slicer_BUILD_CLI_SUPPORT@") set(Slicer_BUILD_DICOM_SUPPORT "@Slicer_BUILD_DICOM_SUPPORT@") set(Slicer_BUILD_DIFFUSION_SUPPORT "@Slicer_BUILD_DIFFUSION_SUPPORT@") @@ -355,6 +356,11 @@ slicer_config_set_ep( "@ITK_DIR_CONFIG@" CACHE PATH "Path to ITK build or install directory" FORCE) +slicer_config_set_ep( + SimpleITK_DIR + "@SimpleITK_DIR_CONFIG@" + CACHE PATH "Path to SimpleITK build or install directory" FORCE) + slicer_config_set_ep( OpenIGTLink_DIR "@OpenIGTLink_DIR_CONFIG@" diff --git a/CMake/SlicerGenerateSlicerConfig.cmake b/CMake/SlicerGenerateSlicerConfig.cmake index cc3e9511a08e48ed4e8804e97a59b4f7076f69ae..0def0b8ff34867cb4ed2d4057ca396cb36c56631 100644 --- a/CMake/SlicerGenerateSlicerConfig.cmake +++ b/CMake/SlicerGenerateSlicerConfig.cmake @@ -73,6 +73,9 @@ if(Slicer_USE_QtTesting) set(QtTesting_DIR_CONFIG ${QtTesting_DIR}) endif() set(ITK_DIR_CONFIG ${ITK_DIR}) +if(Slicer_USE_SimpleITK) + set(SimpleITK_DIR_CONFIG ${SimpleITK_DIR}) +endif() if(Slicer_BUILD_EXTENSIONMANAGER_SUPPORT) set(qRestAPI_DIR_CONFIG ${qRestAPI_DIR}) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e76b26e2663d56e65654c0da46cb1033157eb9c..30746d87af65263444dc1c3c3f2511f6f867a744 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,6 +241,22 @@ endif() CMAKE_DEPENDENT_OPTION(Slicer_USE_SimpleITK "Build Slicer with SimpleITK support" OFF "USE_ITKv4" OFF) +# +# SimpleITK has large internal libraries, which take an extremely long +# time to link on windows when they are static. Creating shared +# SimpleITK internal libraries can reduce linking time. Also the size +# of the debug libraries are monstrous. Using shared libraries for +# debug, reduce disc requirements, and can improve linking +# times. However, these shared libraries take longer to load than the +# monolithic target from static libraries. +# +set( Slicer_USE_SimpleITK_SHARED_DEFAULT OFF) +string(TOUPPER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE) +if(MSVC OR _CMAKE_BUILD_TYPE MATCHES "DEBUG") + set(Slicer_USE_SimpleITK_SHARED_DEFAULT ON) +endif() +CMAKE_DEPENDENT_OPTION(Slicer_USE_SimpleITK_SHARED "Build SimpleITK with shared libraries. Reduces linking time, increases run-time load time." ${Slicer_USE_SimpleITK_SHARED_DEFAULT} "Slicer_USE_SimpleITK" OFF ) + #----------------------------------------------------------------------------- # The following option has been added for conveniency so that "extension-like" # module can be enabled/disabled at the superbuild level. diff --git a/SuperBuild.cmake b/SuperBuild.cmake index e3664fc1558e0247c9a4da3525d27acaadfa4ae9..6c8e209dbc73c21696059e245bdc8092523afc45 100644 --- a/SuperBuild.cmake +++ b/SuperBuild.cmake @@ -194,6 +194,7 @@ foreach(ep_cmake_arg Slicer_USE_NUMPY Slicer_USE_QtTesting Slicer_USE_SimpleITK + Slicer_USE_SimpleITK_SHARED Slicer_BUILD_BRAINSTOOLS Slicer_BUILD_EMSegment Slicer_BUILD_MultiVolumeExplorer @@ -238,6 +239,12 @@ if(Slicer_USE_PYTHONQT_WITH_TCL) endif() endif() +if(Slicer_USE_SimpleITK) + list(APPEND EXTERNAL_PROJECT_OPTIONAL_ARGS + -DSimpleITK_DIR:PATH=${SimpleITK_DIR} + ) +endif() + if(Slicer_BUILD_QTLOADABLEMODULES) # Provide a mechanism to disable one or more loadable modules. list(APPEND EXTERNAL_PROJECT_OPTIONAL_ARGS -DSlicer_QTLOADABLEMODULES_DISABLED:STRING=${Slicer_QTLOADABLEMODULES_DISABLED}) diff --git a/SuperBuild/External_SimpleITK.cmake b/SuperBuild/External_SimpleITK.cmake index cc4d2dc6ca25f88cb05b8fbba1d62c09f397082e..13dc87139b11a96993b83f03bed51c1ac3eee7b4 100644 --- a/SuperBuild/External_SimpleITK.cmake +++ b/SuperBuild/External_SimpleITK.cmake @@ -70,7 +70,9 @@ ExternalProject_add(SimpleITK -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} -DCMAKE_C_FLAGS:STRING=${ep_common_c_flags} # SimpleITK does not work with shared libs turned on - -DBUILD_SHARED_LIBS:BOOL=OFF + -DBUILD_SHARED_LIBS:BOOL=${Slicer_USE_SimpleITK_SHARED} + -DSimpleITK_INSTALL_ARCHIVE_DIR:PATH=${Slicer_INSTALL_LIB_DIR} + -DSimpleITK_INSTALL_LIBRARY_DIR:PATH=${Slicer_INSTALL_LIB_DIR} -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR} -DITK_DIR:PATH=${ITK_DIR} -DBUILD_EXAMPLES:BOOL=OFF @@ -90,3 +92,4 @@ ExternalProject_add(SimpleITK # DEPENDS ${SimpleITK_DEPENDENCIES} ) +set(SimpleITK_DIR ${CMAKE_BINARY_DIR}/SimpleITK-build)