mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-28 03:49:06 +08:00
229 lines
11 KiB
CMake
229 lines
11 KiB
CMake
vcpkg_buildpath_length_warning(37)
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO InsightSoftwareConsortium/ITK
|
|
REF "v${VERSION}"
|
|
SHA512 3a98ececf258aac545f094dd3e97918c93cc82bc623ddf793c4bf0162ab06c83fbfd4d08130bdec6e617bda85dd17225488bc1394bc91b17f1232126a5d990db
|
|
HEAD_REF master
|
|
PATCHES
|
|
double-conversion.patch
|
|
openjpeg.patch
|
|
openjpeg2.patch
|
|
var_libraries.patch
|
|
wrapping.patch
|
|
opencl.patch
|
|
use-the-lrintf-intrinsic.patch
|
|
dont-build-gtest.patch
|
|
)
|
|
|
|
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
|
|
FEATURES
|
|
"vtk" Module_ITKVtkGlue
|
|
"cuda" Module_CudaCommon # Requires RTK?
|
|
#"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)
|
|
# Alternativly set CUFFT_LIB and CUFFTW_LIB
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
file(TO_CMAKE_PATH "$ENV{CUDA_PATH}" CUDA_PATH)
|
|
set(CUDA_LIB_PATH "${CUDA_PATH}")
|
|
|
|
if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
|
|
string(APPEND CUDA_LIB_PATH "/lib/x64")
|
|
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
|
|
string(APPEND CUDA_LIB_PATH "/lib/Win32")
|
|
message(FATAL_ERROR "CUFFTW is not supported on architecture ${VCPKG_TARGET_ARCHITECTURE}")
|
|
else()
|
|
message(FATAL_ERROR "Architecture ${VCPKG_TARGET_ARCHITECTURE} not supported !")
|
|
endif()
|
|
|
|
list(APPEND ADDITIONAL_OPTIONS
|
|
"-DFFTW_LIB_SEARCHPATH=${CUDA_LIB_PATH}"
|
|
"-DFFTW_INCLUDE_PATH=${CUDA_PATH}/include"
|
|
"-DCUFFTW_INCLUDE_PATH=${CUDA_PATH}/include"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if("rtk" IN_LIST FEATURES)
|
|
if(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
|
|
message(FATAL_ERROR "RTK is not supported on architecture ${VCPKG_TARGET_ARCHITECTURE}")
|
|
endif()
|
|
SET(BUILD_RTK ON)
|
|
list(APPEND ADDITIONAL_OPTIONS
|
|
"-DModule_RTK_GIT_TAG=8099212f715231d093f7d6a1114daecf45d871ed" # RTK latest versions (11.05.2020)
|
|
)
|
|
if("cuda" IN_LIST FEATURES)
|
|
list(APPEND ADDITIONAL_OPTIONS "-DRTK_USE_CUDA=ON")
|
|
#RTK + CUDA + PYTHON + dynamic library linkage will fail and needs upstream fixes.
|
|
endif()
|
|
endif()
|
|
file(REMOVE_RECURSE "${SOURCE_PATH}/Modules/Remote/RTK")
|
|
|
|
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)
|
|
vcpkg_find_acquire_program(PYTHON3)
|
|
list(APPEND ADDITIONAL_OPTIONS
|
|
"-DPython3_EXECUTABLE:PATH=${PYTHON3}" # Required by mvtk if vtk[python] was build
|
|
)
|
|
endif()
|
|
if("python" IN_LIST FEATURES)
|
|
message(STATUS "${PORT} builds a long time (>1h) with python wrappers enabled!")
|
|
vcpkg_find_acquire_program(PYTHON3)
|
|
vcpkg_find_acquire_program(SWIG) # Swig is only required for wrapping!
|
|
get_filename_component(SWIG_DIR "${SWIG}" DIRECTORY)
|
|
list(APPEND ADDITIONAL_OPTIONS
|
|
-DITK_WRAP_PYTHON=ON
|
|
-DPython3_FIND_REGISTRY=NEVER
|
|
"-DPython3_EXECUTABLE:PATH=${PYTHON3}" # Required by more than one feature
|
|
"-DSWIG_EXECUTABLE=${SWIG}"
|
|
"-DSWIG_DIR=${SWIG_DIR}"
|
|
)
|
|
#ITK_PYTHON_SITE_PACKAGES_SUFFIX should be set to the install dir of the site-packages within vcpkg
|
|
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)
|
|
if (VCPKG_CRT_LINKAGE STREQUAL static)
|
|
set(STATIC_CRT_LNK ON)
|
|
else()
|
|
set(STATIC_CRT_LNK OFF)
|
|
endif()
|
|
list(APPEND ADDITIONAL_OPTIONS
|
|
-DITK_MSVC_STATIC_RUNTIME_LIBRARY=${STATIC_CRT_LNK}
|
|
)
|
|
endif()
|
|
|
|
set(USE_64BITS_IDS OFF)
|
|
if (VCPKG_TARGET_ARCHITECTURE STREQUAL x64 OR VCPKG_TARGET_ARCHITECTURE STREQUAL arm64)
|
|
set(USE_64BITS_IDS ON)
|
|
endif()
|
|
|
|
file(REMOVE_RECURSE "${SOURCE_PATH}/CMake/FindOpenCL.cmake")
|
|
vcpkg_cmake_configure(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
DISABLE_PARALLEL_CONFIGURE
|
|
OPTIONS
|
|
-DBUILD_TESTING=OFF
|
|
-DBUILD_EXAMPLES=OFF
|
|
-DBUILD_PKGCONFIG_FILES=OFF
|
|
-DITK_DOXYGEN_HTML=OFF
|
|
-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_DCMTK=ON
|
|
-DDCMTK_USE_ICU=ON
|
|
-DITK_USE_SYSTEM_ICU=ON
|
|
#-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_FORBID_DOWNLOADS=OFF # This should be turned on some day, however for now ITK does download specific versions so it shouldn't spontaneously break. Remote Modules would probably break with this!
|
|
-DINSTALL_GTEST=OFF
|
|
-DITK_USE_SYSTEM_GOOGLETEST=ON
|
|
-DEXECUTABLE_OUTPUT_PATH=tools/${PORT}
|
|
|
|
# TODO
|
|
#-DVXL_USE_GEOTIFF=ON
|
|
-DVXL_USE_LFS=ON
|
|
|
|
-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 ${OPTIONS_DEBUG}
|
|
OPTIONS_RELEASE ${OPTIONS_RELEASE}
|
|
MAYBE_UNUSED_VARIABLES
|
|
DCMTK_USE_ICU # Used by DCMTK
|
|
ITK_USE_SYSTEM_GOOGLETEST
|
|
ITK_USE_SYSTEM_ICU # Used by DCMTK
|
|
)
|
|
if(BUILD_RTK) # Remote Modules are only downloaded on configure.
|
|
# TODO: In the future try to download via vcpkg_from_github and move the files. That way patching does not need this workaround
|
|
vcpkg_apply_patches(SOURCE_PATH "${SOURCE_PATH}/Modules/Remote/RTK" QUIET PATCHES rtk/already_defined.patch rtk/unresolved.patch rtk/Add-missing-include-for-Cuda.patch)
|
|
endif()
|
|
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}/lib/cmake")
|
|
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/lib/cmake")
|
|
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")
|
|
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/itk_eigen.h" "include(${SOURCE_PATH}/CMake/UseITK.cmake)" "include(UseITK)")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/ITK-5.4/itk_eigen.h" "message(STATUS \"From ITK: Eigen3_DIR: ${CURRENT_INSTALLED_DIR}/share/eigen3\")" "")
|
|
|
|
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\"" "")
|
|
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/itk/Modules/RTK.cmake" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "\${ITK_INSTALL_PREFIX}")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/itk/Modules/RTK.cmake" "${SOURCE_PATH}/Modules/Remote/RTK/utilities/lp_solve" "\${ITK_INSTALL_PREFIX}/include/RTK/lpsolve")
|
|
endif()
|
|
|
|
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
|