diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c22bdbdf6c..bb3006ba25 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -122,8 +122,6 @@ jobs: -DMPFR_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \ -DHDF5_INCLUDE_DIR=/usr/include/hdf5/serial \ -DEIGEN_DIR=/usr/include/eigen3 \ - -DROCKSDB_INCLUDE_DIR=/usr/local/include \ - -DROCKSDB_LIBRARY_DIR=/usr/local/lib \ -DWITH_ROCKSDB=On \ ../cmake sudo make -j $(nproc) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2c3833f3cf..86a9ebccb1 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -314,77 +314,23 @@ if(USD_SUPPORT) endif(USD_SUPPORT) if (WITH_ROCKSDB) - UNIFY_ENVVARS_AND_CACHE(ROCKSDB_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(ROCKSDB_LIBRARY_DIR) - UNIFY_ENVVARS_AND_CACHE(ZSTD_INCLUDE_DIR) - UNIFY_ENVVARS_AND_CACHE(ZSTD_LIBRARY_DIR) - - if("${ROCKSDB_INCLUDE_DIR}" STREQUAL "") - find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h - PATHS - /usr/include - /usr/local/include - REQUIRED - ) - if(ROCKSDB_INCLUDE_DIR) - message(STATUS "Found rocksdb include files in: ${ROCKSDB_INCLUDE_DIR}") - else() - message(FATAL_ERROR "Unable to find rocksdb include directory, specify ROCKSDB_INCLUDE_DIR manually.") - endif() - else() - set(ROCKSDB_INCLUDE_DIR ${ROCKSDB_INCLUDE_DIR} CACHE FILEPATH "rocksdb header files") - message(STATUS "Looking for rocksdb include files in: ${ROCKSDB_INCLUDE_DIR}") - endif() - - find_library(ROCKSDB_LIBRARY - NAMES rocksdb - PATHS ${ROCKSDB_LIBRARY_DIR}) - if(ROCKSDB_LIBRARY) - message(STATUS "rocksdb library ${ROCKSDB_LIBRARY} found in: ${ROCKSDB_LIBRARY_DIR}") - else() - message(FATAL_ERROR "Unable to find rocksdb library in: ${ROCKSDB_LIBRARY_DIR}") - endif() - + find_package(RocksDB CONFIG REQUIRED) + message(STATUS "RocksDB: found at '${RocksDB_DIR}'.") add_definitions(-DIFOPSH_WITH_ROCKSDB) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB) + link_libraries(RocksDB::rocksdb) if (WITH_ZSTD) # @todo do we actually need the zstd include dir or rather just pass # the libzstd.a along with the rocksdb library when needed and feature # detect based on rocksdb API? - if("${ZSTD_INCLUDE_DIR}" STREQUAL "") - find_path(ZSTD_INCLUDE_DIR zstd.h - PATHS - /usr/include - /usr/local/include - REQUIRED - ) - if(ZSTD_INCLUDE_DIR) - message(STATUS "Found zstd include files in: ${ZSTD_INCLUDE_DIR}") - else() - message(FATAL_ERROR "Unable to find zstd include directory, specify ZSTD_INCLUDE_DIR manually.") - endif() - else() - set(ZSTD_INCLUDE_DIR ${ZSTD_INCLUDE_DIR} CACHE FILEPATH "zstd header files") - message(STATUS "Looking for zstd include files in: ${ZSTD_INCLUDE_DIR}") - endif() - - find_library(ZSTD_LIBRARY - NAMES zstd zstd_static - PATHS ${ZSTD_LIBRARY_DIR}) - if(ZSTD_LIBRARY) - message(STATUS "zstd library ${ZSTD_LIBRARY} found in: ${ZSTD_LIBRARY_DIR}") - else() - message(FATAL_ERROR "Unable to find zstd library in: ${ZSTD_LIBRARY_DIR}") - endif() + find_package(zstd CONFIG REQUIRED) + message(STATUS "zstd: found at '${zstd_DIR}'.") + link_libraries(zstd::libzstd_static) add_definitions(-DIFOPSH_WITH_ROCKSDB_ZSTD) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_ROCKSDB_ZSTD) endif() - - if(WIN32) - set(RPCRT_LIBRARIES "rpcrt4.lib" "shlwapi.lib") - endif() endif() # Find Boost: On win32 the (hardcoded) default is to use static libraries and @@ -956,7 +902,7 @@ endif() include_directories(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${EIGEN_DIR} ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} - ${TBB_INCLUDE_DIR} ${ROCKSDB_INCLUDE_DIR} ${ZSTD_INCLUDE_DIR} + ${TBB_INCLUDE_DIR} ) if(NOT SCHEMA_VERSIONS) @@ -1119,7 +1065,7 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() add_library(IfcParse ${IFCPARSE_FILES}) -target_link_libraries(IfcParse ${ROCKSDB_LIBRARY} ${ZSTD_LIBRARY} ${RPCRT_LIBRARIES} ${STDCPPFS}) +target_link_libraries(IfcParse ${STDCPPFS}) set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIFC_PARSE_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") if(LibXml2_DIR) diff --git a/nix/build-all.py b/nix/build-all.py index 1b99b7bb51..38f30e392a 100644 --- a/nix/build-all.py +++ b/nix/build-all.py @@ -1025,8 +1025,7 @@ if "rocksdb" in targets: f"-DUSE_RTTI=On", f"-DWITH_ZSTD=On", f"-DPORTABLE=1", - f"-DZSTD_INCLUDE_DIRS={DEPS_DIR}/install/zstd-{ZSTD_VERSION}/include", - f"-DZSTD_LIBRARIES={DEPS_DIR}/install/zstd-{ZSTD_VERSION}/lib/libzstd.a", + f"-DCMAKE_PREFIX_PATH={DEPS_DIR}/install/zstd-{ZSTD_VERSION}", ], download_url="https://github.com/facebook/rocksdb", download_name="rocksdb", @@ -1059,6 +1058,13 @@ cmake_args = [ "-DVERSION_OVERRIDE=" + ("On" if ADD_COMMIT_SHA else "Off"), ] """Default CMake args to use for all CMake configs.""" +cmake_args_prefix_path: list[str] = [] + + +def get_cmake_args_prefix_path() -> list[str]: + prefix_path = ";".join(cmake_args_prefix_path) + return [f"-DCMAKE_PREFIX_PATH={prefix_path}"] + if "wasm" in flags: # Boost is built by the build script so should not be found @@ -1138,11 +1144,13 @@ if "rocksdb" in targets: cmake_args.extend( [ f"-DWITH_ROCKSDB=On", - f"-DROCKSDB_INCLUDE_DIR={DEPS_DIR}/install/rocksdb-{ROCKSDB_VERSION}/include", - f"-DROCKSDB_LIBRARY_DIR={DEPS_DIR}/install/rocksdb-{ROCKSDB_VERSION}/lib", f"-DWITH_ZSTD=On", - f"-DZSTD_INCLUDE_DIR={DEPS_DIR}/install/zstd-{ZSTD_VERSION}/include", - f"-DZSTD_LIBRARY_DIR={DEPS_DIR}/install/zstd-{ZSTD_VERSION}/lib", + ] + ) + cmake_args_prefix_path.extend( + [ + f"{DEPS_DIR}/install/rocksdb-{ROCKSDB_VERSION}", + f"{DEPS_DIR}/install/zstd-{ZSTD_VERSION}", ] ) @@ -1157,7 +1165,7 @@ if not explicit_targets or {"IfcGeom", "IfcConvert", "IfcGeomServer"} & set(expl f"-DCMAKE_INSTALL_PREFIX={DEPS_DIR}/install/ifcopenshell", ] - run_cmake("", exec_args + cmake_args, cmake_dir=CMAKE_DIR, cwd=executables_dir) + run_cmake("", exec_args + cmake_args + get_cmake_args_prefix_path(), cmake_dir=CMAKE_DIR, cwd=executables_dir) logger.info("\rBuilding executables... ") @@ -1202,6 +1210,7 @@ if "IfcOpenShell-Python" in targets: run_cmake( "", cmake_args + + get_cmake_args_prefix_path() + [ "-DPYTHON_LIBRARY=" + python_library, *([f"-DPYTHON_EXECUTABLE={python_executable}"] if python_executable else []), diff --git a/win/run-cmake.bat b/win/run-cmake.bat index af5b615e8e..6c18155a7a 100755 --- a/win/run-cmake.bat +++ b/win/run-cmake.bat @@ -112,10 +112,8 @@ set USD_INCLUDE_DIR=%INSTALL_DIR%\usd\include set USD_LIBRARY_DIR=%INSTALL_DIR%\usd\lib set TBB_INCLUDE_DIR=%INSTALL_DIR%\tbb\include set TBB_LIBRARY_DIR=%INSTALL_DIR%\tbb\lib -set ROCKSDB_INCLUDE_DIR=%INSTALL_DIR%\rocksdb\include -set ROCKSDB_LIBRARY_DIR=%INSTALL_DIR%\rocksdb\lib -set ZSTD_INCLUDE_DIR=%INSTALL_DIR%\zstd\include -set ZSTD_LIBRARY_DIR=%INSTALL_DIR%\zstd\lib +set ROCKSDB_INSTALL_DIR=%INSTALL_DIR%\rocksdb +set ZSTD_INSTALL_DIR=%INSTALL_DIR%\zstd echo. call cecho.cmd 0 10 "Script configuration:" @@ -151,6 +149,8 @@ echo USD_INCLUDE_DIR = %USD_INCLUDE_DIR% echo USD_LIBRARY_DIR = %USD_LIBRARY_DIR% echo TBB_INCLUDE_DIR = %TBB_INCLUDE_DIR% echo TBB_LIBRARY_DIR = %TBB_LIBRARY_DIR% +echo ROCKSDB_INSTALL_DIR = %ROCKSDB_INSTALL_DIR% +echo ZSTD_INSTALL_DIR = %ZSTD_INSTALL_DIR% echo. echo CMAKE_INSTALL_PREFIX = %CMAKE_INSTALL_PREFIX% echo. @@ -160,17 +160,20 @@ set CMAKELISTS_DIR=..\cmake if not (%1)==() if exist CMakeCache.txt. del /Q CMakeCache.txt echo "Running CMake for %PROJECT_NAME%." +set CMAKE_PREFIX_PATH=%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR% +set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%ROCKSDB_INSTALL_DIR%;%ZSTD_INSTALL_DIR% + IF NOT "%VS_TOOLSET_HOST%"=="" ( cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% -T %VS_TOOLSET_HOST% ^ -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" -DBoost_NO_BOOST_CMAKE=ON ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ - -DCMAKE_PREFIX_PATH="%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR%" ^ + -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% ) ELSE ( cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -A %VS_PLATFORM% ^ -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%" -DBoost_NO_BOOST_CMAKE=ON ^ -DWITH_ROCKSDB=On -DWITH_ZSTD=On ^ - -DCMAKE_PREFIX_PATH="%HDF5_INSTALL_DIR%;%OPENCOLLADA_INSTALL_DIR%;%SWIG_INSTALL_DIR%" ^ + -DCMAKE_PREFIX_PATH="%CMAKE_PREFIX_PATH%" ^ -DADD_COMMIT_SHA=%ADD_COMMIT_SHA% %ARGUMENTS% )