vcpkg/ports/itk/portfile.cmake
2024-11-15 16:16:45 -08:00

280 lines
12 KiB
CMake

vcpkg_buildpath_length_warning(37)
vcpkg_download_distfile(PYTHON_GPU_WRAPPING_PATCH
URLS https://github.com/InsightSoftwareConsortium/ITK/commit/e9b3d24f782a42f5586169e048b8d289f869d78a.diff?full_index=1
FILENAME InsightSoftwareConsortium-ITK-python-gpu-wrapping.patch
SHA512 71526320547b0eb5d0c0e0088e92ff60ba06462b82c531c79784d766361805970d9cad550660c7c85b953ec546b32c181aeab5d9f6d4142764d6f765106982a0
)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO InsightSoftwareConsortium/ITK
REF "v${VERSION}"
#[[
When updating the ITK version and SHA512, remember to update the remote module versions below.
#]]
SHA512 3a98ececf258aac545f094dd3e97918c93cc82bc623ddf793c4bf0162ab06c83fbfd4d08130bdec6e617bda85dd17225488bc1394bc91b17f1232126a5d990db
HEAD_REF master
PATCHES
dependencies.diff
fftw.diff
openjpeg.patch
var_libraries.patch
wrapping.patch
use-the-lrintf-intrinsic.patch
dont-build-gtest.patch
"${PYTHON_GPU_WRAPPING_PATCH}"
)
file(REMOVE_RECURSE
"${SOURCE_PATH}/CMake/FindOpenCL.cmake"
"${SOURCE_PATH}/Modules/ThirdParty/GDCM/src"
"${SOURCE_PATH}/Modules/ThirdParty/OpenJPEG/src/openjpeg"
"${SOURCE_PATH}/Modules/ThirdParty/VNL/src"
)
if("cuda" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH RTK_SOURCE_PATH
REPO RTKConsortium/ITKCudaCommon
# Cf. Modules/Remote/CudaCommon.remote.cmake
REF 0c20c4ef10d81910c8b2ac4e8446a1544fce3b60
SHA512 0eb1a6fe85e695345a49887cdd65103bedab72e01ae85ed03e16a8a296c6cb69a8d889a57b22dde7fcc69df4f604c274b04234c8ece306d08361fac5db029069
HEAD_REF master
)
file(REMOVE_RECURSE "${SOURCE_PATH}/Modules/Remote/CudaCommon")
file(RENAME "${RTK_SOURCE_PATH}" "${SOURCE_PATH}/Modules/Remote/CudaCommon")
file(COPY_FILE "${SOURCE_PATH}/Modules/Remote/CudaCommon/LICENSE" "${SOURCE_PATH}/CudaCommon LICENSE")
endif()
if("rtk" IN_LIST FEATURES)
# (old hint, not verified) RTK + CUDA + PYTHON + dynamic library linkage will fail and needs upstream fixes.
# RTK's ITK module must be built with ITK.
vcpkg_from_github(
OUT_SOURCE_PATH RTK_SOURCE_PATH
REPO RTKConsortium/RTK
# Cf. Modules/Remote/RTK.remote.cmake
REF bfdca5b6b666b4f08f2f7d8039af11a15cc3f831
SHA512 10a21fb4b82aa820e507e81a6b6a3c1aaee2ea1edf39364dc1c8d54e6b11b91f22d9993c0b56c0e8e20b6d549fcd6104de4e1c5e664f9ff59f5f93935fb5225a
HEAD_REF master
PATCHES
rtk/cmp0153.diff
rtk/getopt-win32.diff
)
file(REMOVE_RECURSE "${SOURCE_PATH}/Modules/Remote/RTK")
file(RENAME "${RTK_SOURCE_PATH}" "${SOURCE_PATH}/Modules/Remote/RTK")
file(COPY_FILE "${SOURCE_PATH}/Modules/Remote/RTK/COPYRIGHT.TXT" "${SOURCE_PATH}/RTK COPYRIGHT.TXT")
endif()
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
"vtk" Module_ITKVtkGlue
"cuda" Module_CudaCommon # Requires RTK?
"cuda" RTK_USE_CUDA
#"cuda" CUDA_HAVE_GPU # Automatically set by FindCUDA?
"cufftw" ITK_USE_CUFFTW
"opencl" ITK_USE_GPU
"tbb" Module_ITKTBB
"rtk" Module_RTK
"tools" RTK_BUILD_APPLICATIONS
"opencv" Module_ITKVideoBridgeOpenCV
# There are a lot of more (remote) modules and options in ITK
# feel free to add those as a feature
)
if("cufftw" IN_LIST FEATURES)
vcpkg_find_cuda(OUT_CUDA_TOOLKIT_ROOT cuda_toolkit_root)
list(APPEND ADDITIONAL_OPTIONS
"-DCUDAToolkit_ROOT=${cuda_toolkit_root}"
)
endif()
if("fftw" IN_LIST FEATURES)
# Never set these options to OFF: dual use with feature 'cufftw'
list(APPEND ADDITIONAL_OPTIONS
-DITK_USE_FFTWD=ON
-DITK_USE_FFTWF=ON
)
endif()
if("opencl" IN_LIST FEATURES)
list(APPEND ADDITIONAL_OPTIONS # Wrapping options required by OpenCL if build with Python Wrappers
-DITK_WRAP_unsigned_long_long=ON
-DITK_WRAP_signed_long_long=ON
)
endif()
if("tools" IN_LIST FEATURES)
if("rtk" IN_LIST FEATURES)
list(APPEND TOOL_NAMES rtkadmmtotalvariation rtkadmmwavelets rtkamsterdamshroud rtkbackprojections rtkbioscangeometry rtkcheckimagequality rtkconjugategradient
rtkdigisensgeometry rtkdrawgeometricphantom rtkdrawshepploganphantom rtkdualenergysimplexdecomposition rtkelektasynergygeometry rtkextractphasesignal
rtkextractshroudsignal rtkfdk rtkfdktwodweights rtkfieldofview rtkforwardprojections rtkfourdconjugategradient rtkfourdfdk rtkfourdrooster rtkfourdsart
rtkgaincorrection rtki0estimation rtkimagxgeometry rtkiterativefdk rtklagcorrection rtklastdimensionl0gradientdenoising rtklut rtkmaskcollimation rtkmcrooster
rtkmotioncompensatedfourdconjugategradient rtkorageometry rtkosem rtkoverlayphaseandshroud rtkparkershortscanweighting rtkprojectgeometricphantom
rtkprojectionmatrix rtkprojections rtkprojectshepploganphantom rtkramp rtkrayboxintersection rtkrayquadricintersection rtkregularizedconjugategradient
rtksart rtkscatterglarecorrection rtksimulatedgeometry rtkspectraldenoiseprojections rtkspectralforwardmodel rtkspectralonestep rtkspectralrooster rtkspectralsimplexdecomposition
rtksubselect rtktotalnuclearvariationdenoising rtktotalvariationdenoising rtktutorialapplication rtkvarianobigeometry rtkvarianprobeamgeometry rtkvectorconjugategradient
rtkwangdisplaceddetectorweighting rtkwarpedbackprojectsequence rtkwarpedforwardprojectsequence rtkwaveletsdenoising rtkxradgeometry)
endif()
endif()
if("vtk" IN_LIST FEATURES AND EXISTS "${CURRENT_INSTALLED_DIR}/share/vtk/VTKPython-targets.cmake")
# 'vtk[python]' is built using the installed 'python3'.
# For 'find_package(vtk)', itk needs to provide the same version of python.
# Here, it is a purely *transitive* dependency via 'vtk[python]'.
include("${CURRENT_INSTALLED_DIR}/share/python3/vcpkg-port-config.cmake")
vcpkg_get_vcpkg_installed_python(PYTHON3)
list(APPEND ADDITIONAL_OPTIONS
"-DPython3_EXECUTABLE:PATH=${PYTHON3}"
)
endif()
if("python" IN_LIST FEATURES)
message(STATUS "${PORT} builds a long time (>1h) with python wrappers enabled!")
vcpkg_get_vcpkg_installed_python(PYTHON3)
list(APPEND ADDITIONAL_OPTIONS
-DITK_WRAP_PYTHON=ON
-DITK_USE_SYSTEM_CASTXML=ON
"-DCASTXML_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/castxml/bin/castxml${VCPKG_HOST_EXECUTABLE_SUFFIX}"
-DPython3_FIND_REGISTRY=NEVER
"-DPython3_EXECUTABLE:PATH=${PYTHON3}" # Required by more than one feature
)
#ITK_PYTHON_SITE_PACKAGES_SUFFIX should be set to the install dir of the site-packages within vcpkg
vcpkg_find_acquire_program(SWIG) # Swig is only required for wrapping!
vcpkg_execute_required_process(
COMMAND "${SWIG}" -version
OUTPUT_VARIABLE swig_version
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME "swig-version-${TARGET_TRIPLET}"
)
string(REGEX REPLACE ".*Version ([0-9.]*).*" "\\1" swig_version "${swig_version}")
set(swig_expected "4.2.0")
if(swig_version VERSION_GREATER_EQUAL swig_expected)
vcpkg_execute_required_process(
COMMAND "${SWIG}" -swiglib
OUTPUT_VARIABLE swiglib
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME "swiglib-${TARGET_TRIPLET}"
)
list(APPEND ADDITIONAL_OPTIONS
-DITK_USE_SYSTEM_SWIG=ON
"-DSWIG_EXECUTABLE=${SWIG}"
"-DSWIG_DIR=${swiglib}"
)
else()
message(WARNING "Found swig ${swig_version}, but TK needs ${swig_expected}. A binary will be downloaded.")
endif()
endif()
if("opencv" IN_LIST FEATURES)
message(STATUS "${PORT} includes the ITKVideoBridgeOpenCV")
list(APPEND ADDITIONAL_OPTIONS
-DModule_ITKVideoBridgeOpenCV:BOOL=ON
)
endif()
if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CRT_LINKAGE STREQUAL "static")
list(APPEND ADDITIONAL_OPTIONS
-DITK_MSVC_STATIC_RUNTIME_LIBRARY=ON
-DITK_MSVC_STATIC_CRT=ON
)
endif()
set(USE_64BITS_IDS OFF)
if (VCPKG_TARGET_ARCHITECTURE STREQUAL x64 OR VCPKG_TARGET_ARCHITECTURE STREQUAL arm64)
set(USE_64BITS_IDS ON)
endif()
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
DISABLE_PARALLEL_CONFIGURE
OPTIONS
-DBUILD_TESTING=OFF
-DBUILD_EXAMPLES=OFF
-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
-DCMAKE_DISABLE_FIND_PACKAGE_Perl=ON
-DITK_DOXYGEN_HTML=OFF
-DITK_FORBID_DOWNLOADS=ON
-DDO_NOT_INSTALL_ITK_TEST_DRIVER=ON
-DITK_SKIP_PATH_LENGTH_CHECKS=ON
-DITK_INSTALL_DATA_DIR=share/itk/data
-DITK_INSTALL_DOC_DIR=share/itk/doc
-DITK_INSTALL_PACKAGE_DIR=share/itk
-DITK_USE_64BITS_IDS=${USE_64BITS_IDS}
-DITK_USE_CONCEPT_CHECKING=ON
#-DITK_USE_SYSTEM_LIBRARIES=ON # enables USE_SYSTEM for all third party libraries, some of which do not have vcpkg ports such as CastXML, SWIG, MINC etc
-DITK_USE_SYSTEM_DOUBLECONVERSION=ON
-DITK_USE_SYSTEM_EXPAT=ON
-DITK_USE_SYSTEM_JPEG=ON
-DITK_USE_SYSTEM_PNG=ON
-DITK_USE_SYSTEM_TIFF=ON
-DITK_USE_SYSTEM_ZLIB=ON
-DITK_USE_SYSTEM_EIGEN=ON
-DITK_USE_SYSTEM_FFTW=ON
-DITK_USE_SYSTEM_HDF5=ON # HDF5 was problematic in the past and still is. ITK still has not figured out how to do it correctly!
-DITK_USE_SYSTEM_GDCM=ON
-DITK_USE_SYSTEM_OpenJPEG=ON # Added by VCPKG
-DITK_USE_SYSTEM_VXL=ON
#-DITK_USE_SYSTEM_CASTXML=ON # needs to be added to vcpkg_find_acquire_program https://data.kitware.com/api/v1/file/hashsum/sha512/b8b6f0aff11fe89ab2fcd1949cc75f2c2378a7bc408827a004396deb5ff5a9976bffe8a597f8db1b74c886ea39eb905e610dce8f5bd7586a4d6c196d7349da8d/download
-DITK_USE_SYSTEM_MINC=ON
-DITK_USE_SYSTEM_GOOGLETEST=ON
-DEXECUTABLE_OUTPUT_PATH=tools/${PORT}
-DITK_MINIMUM_COMPLIANCE_LEVEL:STRING=1 # To Display all remote modules within cmake-gui
#-DModule_IOSTL=ON # example how to turn on a non-default module
#-DModule_MorphologicalContourInterpolation=ON # example how to turn on a remote module
#-DModule_RLEImage=ON # example how to turn on a remote module
# Some additional wraping options
#-DITK_WRAP_double=ON
#-DITK_WRAP_complex_double=ON
#-DITK_WRAP_covariant_vector_double=ON
#-DITK_WRAP_vector_double=ON
${FEATURE_OPTIONS}
${ADDITIONAL_OPTIONS}
OPTIONS_DEBUG
-DRTK_BUILD_APPLICATIONS=OFF
MAYBE_UNUSED_VARIABLES
EXECUTABLE_OUTPUT_PATH
ITK_USE_SYSTEM_FFTW
ITK_USE_SYSTEM_GOOGLETEST
RTK_BUILD_APPLICATIONS
RTK_USE_CUDA
)
vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup()
if(TOOL_NAMES)
vcpkg_copy_tools(TOOL_NAMES ${TOOL_NAMES} AUTO_CLEAN)
endif()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(REMOVE "${CURRENT_PACKAGES_DIR}/include/ITK-5.4/vcl_where_root_dir.h")
if("rtk" IN_LIST FEATURES)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/rtkConfiguration.h" "#define RTK_BINARY_DIR \"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Modules/Remote/RTK\"" "")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/rtkConfiguration.h" "#define RTK_DATA_ROOT \"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/ExternalData/Modules/Remote/RTK/test\"" "")
endif()
vcpkg_list(SET file_list
"${SOURCE_PATH}/NOTICE"
"${SOURCE_PATH}/LICENSE"
)
if("cuda" IN_LIST FEATURES)
vcpkg_list(APPEND file_list
"${SOURCE_PATH}/CudaCommon LICENSE"
)
endif()
if("rtk" IN_LIST FEATURES)
vcpkg_list(APPEND file_list
"${SOURCE_PATH}/RTK COPYRIGHT.TXT"
)
endif()
vcpkg_install_copyright(FILE_LIST ${file_list})