diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ee479c1599..a41200346b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -40,6 +40,7 @@ OPTION(BUILD_IFCPYTHON "Build IfcPython." ON) OPTION(BUILD_EXAMPLES "Build example applications." ON) OPTION(BUILD_GEOMSERVER "Build IfcGeomServer executable." ON) OPTION(BUILD_CONVERT "Build IfcConvert executable." ON) +OPTION(HDF5_SUPPORT "Enable HDF5 support (requires HDF5, zlib)" ON) OPTION(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF) OPTION(USE_MMAP "Adds a command line options to parse IFC files from memory mapped files using Boost.Iostreams" OFF) OPTION(BUILD_SHARED_LIBS "Build IfcParse and IfcGeom as shared libs (SO/DLL)." OFF) @@ -112,6 +113,8 @@ UNIFY_ENVVARS_AND_CACHE(LIBXML2_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(LIBXML2_LIBRARIES) UNIFY_ENVVARS_AND_CACHE(PCRE_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(PYTHON_EXECUTABLE) +UNIFY_ENVVARS_AND_CACHE(HDF5_INCLUDE_DIR) +UNIFY_ENVVARS_AND_CACHE(HDF5_LIBRARY_DIR) if (GLTF_SUPPORT AND BUILD_CONVERT) UNIFY_ENVVARS_AND_CACHE(JSON_INCLUDE_DIR) @@ -376,6 +379,33 @@ IF(COLLADA_SUPPORT AND BUILD_CONVERT) ENDIF() ENDIF() +if(HDF5_SUPPORT) + IF("${HDF5_INCLUDE_DIR}" STREQUAL "") + MESSAGE(STATUS "No HDF5 include directory specified") + ElSE() + SET(HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" CACHE FILEPATH "HDF5 header files") + ENDIF() + + IF("${HDF5_LIBRARY_DIR}" STREQUAL "") + MESSAGE(STATUS "No HDF5 library directory specified") + ElSE() + SET(HDF5_LIBRARY_DIR "${HDF5_LIBRARY_DIR}" CACHE FILEPATH "HDF5 library files") + ENDIF() + + IF(WIN32) + # An additional lib- prefix is added by HDF5 to denote static libraries + SET(HDF5_LIBRARIES + "${HDF5_LIBRARY_DIR}/libhdf5_cpp" + "${HDF5_LIBRARY_DIR}/libhdf5" + "${HDF5_LIBRARY_DIR}/libzlib") + ELSE() + SET(HDF5_LIBRARIES + "${HDF5_LIBRARY_DIR}/hdf5_cpp" + "${HDF5_LIBRARY_DIR}/hdf5" + zlib) + ENDIF() +endif() + IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "Release") ENDIF() @@ -459,7 +489,7 @@ if (IFCCONVERT_DOUBLE_PRECISION) endif() INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} + ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ) function(files_for_ifc_version IFC_VERSION RESULT_NAME) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 8b7b4f9226..4f56433dec 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -172,6 +172,33 @@ echo. cd "%DEPS_DIR%" +:HDF5 +set HDF5_VERSION=1.8.19 +set HDF5_VERSION_MAJOR=1.8 +set HDF5_CMAKE_ZIP=CMake-hdf5-%HDF5_VERSION%.zip +set HDF5_INSTALL_ZIP_NAME=HDF5-%HDF5_VERSION%-win%ARCH_BITS% +if "%ARCH_BITS%"==64. set ARCH_BITS_64=64 + +call :DownloadFile http://support.hdfgroup.org/ftp/HDF5/releases/hdf5-%HDF5_VERSION_MAJOR%/hdf5-%HDF5_VERSION%/src/CMake-hdf5-%HDF5_VERSION%.zip "%DEPS_DIR%" %HDF5_CMAKE_ZIP% +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :ExtractArchive %HDF5_CMAKE_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\CMake-hdf5-%HDF5_VERSION%" +IF NOT %ERRORLEVEL%==0 GOTO :Error +pushd "%DEPS_DIR%\CMake-hdf5-%HDF5_VERSION%" +copy /y "%~dp0patches\HDF5config.cmake" HDF5config.cmake +copy /y "%~dp0patches\hdf5-src-CMakeLists.txt" hdf5-%HDF5_VERSION%\CMakeLists.txt +REM This will build ZLIB initially linking against dynamic runtime +ctest -S HDF5config.cmake,BUILD_GENERATOR=VS%VS_VER%%ARCH_BITS_64% -C %BUILD_CFG% -V -O hdf5.log +call :ExtractArchive %HDF5_INSTALL_ZIP_NAME%.zip "%INSTALL_DIR%" "%INSTALL_DIR%\%HDF5_INSTALL_ZIP_NAME%" +pushd build\ZLIB-prefix\src\ZLIB +copy /y "%~dp0patches\hdf5-zlib-CMakeLists.txt" CMakeLists.txt +pushd ..\ZLIB-build +cmake ..\ZLIB "-DCMAKE_INSTALL_PREFIX=%INSTALL_DIR%\%HDF5_INSTALL_ZIP_NAME%" +cmake --build . --config %BUILD_CFG% --target INSTALL +popd +popd +echo HDF5_VERSION=%HDF5_VERSION%>>"%~dp0\BuildDepsCache-%TARGET_ARCH%.txt" +popd + :: Note all of the dependencies have appropriate label so that user can easily skip something if wanted :: by modifying this file and using goto. :Boost diff --git a/win/run-cmake.bat b/win/run-cmake.bat index aa837c3a73..4f37778049 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -91,6 +91,8 @@ set OPENCOLLADA_INCLUDE_DIR=%INSTALL_DIR%\OpenCOLLADA\include\opencollada set OPENCOLLADA_LIBRARY_DIR=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada set LIBXML2_INCLUDE_DIR=%DEPS_DIR%\OpenCOLLADA\Externals\LibXML\include set LIBXML2_LIBRARIES=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada\xml.lib +set HDF5_INCLUDE_DIR=%INSTALL_DIR%\HDF5-%HDF5_VERSION%-win%ARCH_BITS%\include +set HDF5_LIBRARY_DIR=%INSTALL_DIR%\HDF5-%HDF5_VERSION%-win%ARCH_BITS%\lib if not defined PY_VER_MAJOR_MINOR set PY_VER_MAJOR_MINOR=34 if not defined PYTHONHOME set PYTHONHOME=%INSTALL_DIR%\Python%PY_VER_MAJOR_MINOR% set PYTHON_INCLUDE_DIR=%PYTHONHOME%\include @@ -116,6 +118,8 @@ echo OPENCOLLADA_INCLUDE_DIR = %OPENCOLLADA_INCLUDE_DIR% echo OPENCOLLADA_LIBRARY_DIR = %OPENCOLLADA_LIBRARY_DIR% echo LIBXML2_INCLUDE_DIR = %LIBXML2_INCLUDE_DIR% echo LIBXML2_LIBRARIES = %LIBXML2_LIBRARIES% +echo HDF5_INCLUDE_DIR = %HDF5_INCLUDE_DIR% +echo HDF5_LIBRARY_DIR = %HDF5_LIBRARY_DIR% echo PYTHONHOME = %PYTHONHOME% echo PYTHON_INCLUDE_DIR = %PYTHON_INCLUDE_DIR% echo PYTHON_LIBRARY = %PYTHON_LIBRARY%