From d5bed316cd521d9005382af3211a3dff46ae7dd8 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 17 Jun 2026 14:28:23 +0200 Subject: [PATCH] Option for ifcwrap cmake to run standalone #8165 --- .github/workflows/ci-ifcwrap-standalone.yml | 155 ++++++++++++++++++ cmake/FindIfcOpenShell.cmake | 131 +++++++++++++++ cmake/IfcOpenShellConfig.cmake.in | 42 ++++- src/ifcwrap/CMakeLists.txt | 84 +++++++++- src/serializers/CMakeLists.txt | 2 +- .../schema_dependent/CMakeLists.txt | 1 + 6 files changed, 402 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/ci-ifcwrap-standalone.yml create mode 100644 cmake/FindIfcOpenShell.cmake diff --git a/.github/workflows/ci-ifcwrap-standalone.yml b/.github/workflows/ci-ifcwrap-standalone.yml new file mode 100644 index 0000000000..9bd901791b --- /dev/null +++ b/.github/workflows/ci-ifcwrap-standalone.yml @@ -0,0 +1,155 @@ +# This file was generated with the assistance of an AI coding tool. +name: ci-ifcwrap-standalone + +on: + workflow_dispatch: + pull_request: + paths: + - ".github/workflows/ci-ifcwrap-standalone.yml" + - "cmake/**" + - "src/ifcwrap/**" + - "src/ifcparse/**" + - "src/ifcgeom/**" + - "src/serializers/**" + - "src/ifcconvert/**" + - "src/ifcopenshell-python/**" + - "src/svgfill/**" + push: + paths: + - ".github/workflows/ci-ifcwrap-standalone.yml" + - "cmake/**" + - "src/ifcwrap/**" + - "src/ifcparse/**" + - "src/ifcgeom/**" + - "src/serializers/**" + - "src/ifcconvert/**" + - "src/ifcopenshell-python/**" + - "src/svgfill/**" + +env: + IFCOPENSHELL_PREFIX: ${{ github.workspace }}/ifcopenshell-install + +jobs: + build-ifcopenshell: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v6 + with: + submodules: recursive + + - name: Install C++ dependencies + run: | + sudo apt update + sudo apt-get install --no-install-recommends -y \ + cmake \ + gcc \ + g++ \ + libboost-date-time-dev \ + libboost-filesystem-dev \ + libboost-iostreams-dev \ + libboost-program-options-dev \ + libboost-regex-dev \ + libboost-system-dev \ + libboost-thread-dev \ + libeigen3-dev \ + libocct-data-exchange-dev \ + libocct-draw-dev \ + libocct-foundation-dev \ + libocct-modeling-algorithms-dev \ + libocct-modeling-data-dev \ + libocct-ocaf-dev \ + libocct-visualization-dev \ + libpcre3-dev \ + libtbb-dev \ + libxml2-dev \ + libxi-dev \ + occt-misc \ + tcl-dev \ + tk-dev \ + swig + + - name: Configure minimal IfcOpenShell + run: | + cmake -S cmake -B build-ifcopenshell \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${IFCOPENSHELL_PREFIX}" \ + -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_SYSTEM_PREFIX_PATH=/usr \ + -DMINIMAL_BUILD=ON \ + -DBUILD_IFCPYTHON=OFF \ + "-DSCHEMA_VERSIONS=4x3_add2" + + - name: Build and install minimal IfcOpenShell + run: | + cmake --build build-ifcopenshell --target install -j "$(nproc)" + + - name: Set up Python 3.11 + uses: actions/setup-python@v6 + with: + python-version: 3.11 + + - name: Install Python import dependencies + run: | + python -m pip install --upgrade pip + python -m pip install numpy typing_extensions + + - name: Configure standalone IfcPython + run: | + PYTHON_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" + PYTHON_INCLUDE_DIR="$(python -c 'import sysconfig; print(sysconfig.get_path("include"))')" + + cmake -S src/ifcwrap -B "build-ifcwrap-311" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${IFCOPENSHELL_PREFIX};/usr" \ + -DPython_EXECUTABLE:FILEPATH="${PYTHON_EXECUTABLE}" \ + -DPython_INCLUDE_DIR:PATH="${PYTHON_INCLUDE_DIR}" \ + -DPYTHON_EXECUTABLE:FILEPATH="${PYTHON_EXECUTABLE}" \ + -DPYTHON_INCLUDE_DIR:PATH="${PYTHON_INCLUDE_DIR}" + + - name: Build and install standalone IfcPython + run: | + cmake --build "build-ifcwrap-311" --target install -j "$(nproc)" + + - name: Import installed IfcPython + run: | + PYTHONPATH="${RUNNER_TEMP}/ifcopenshell-python" python - <<'PY' + import ifcopenshell + + print("IfcOpenShell import ok:", ifcopenshell.version) + PY + + - name: Set up Python 3.12 + uses: actions/setup-python@v6 + with: + python-version: 3.12 + + - name: Install Python import dependencies + run: | + python -m pip install --upgrade pip + python -m pip install numpy typing_extensions + + - name: Configure standalone IfcPython + run: | + PYTHON_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')" + PYTHON_INCLUDE_DIR="$(python -c 'import sysconfig; print(sysconfig.get_path("include"))')" + + cmake -S src/ifcwrap -B "build-ifcwrap-312" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${IFCOPENSHELL_PREFIX};/usr" \ + -DPython_EXECUTABLE:FILEPATH="${PYTHON_EXECUTABLE}" \ + -DPython_INCLUDE_DIR:PATH="${PYTHON_INCLUDE_DIR}" \ + -DPYTHON_EXECUTABLE:FILEPATH="${PYTHON_EXECUTABLE}" \ + -DPYTHON_INCLUDE_DIR:PATH="${PYTHON_INCLUDE_DIR}" + + - name: Build and install standalone IfcPython + run: | + cmake --build "build-ifcwrap-312" --target install -j "$(nproc)" + + - name: Import installed IfcPython + run: | + PYTHONPATH="${RUNNER_TEMP}/ifcopenshell-python" python - <<'PY' + import ifcopenshell + + print("IfcOpenShell import ok:", ifcopenshell.version) + PY diff --git a/cmake/FindIfcOpenShell.cmake b/cmake/FindIfcOpenShell.cmake new file mode 100644 index 0000000000..22e04ef5b8 --- /dev/null +++ b/cmake/FindIfcOpenShell.cmake @@ -0,0 +1,131 @@ +# This file was generated with the assistance of an AI coding tool. +################################################################################ +# # +# This file is part of IfcOpenShell. # +# # +# IfcOpenShell is free software: you can redistribute it and/or modify # +# it under the terms of the Lesser GNU General Public License as published by # +# the Free Software Foundation, either version 3.0 of the License, or # +# (at your option) any later version. # +# # +# IfcOpenShell is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# Lesser GNU General Public License for more details. # +# # +# You should have received a copy of the Lesser GNU General Public License # +# along with this program. If not, see . # +# # +################################################################################ + +include("${CMAKE_CURRENT_LIST_DIR}/utilities.cmake" OPTIONAL) + +set(_IfcOpenShell_find_args) +if(IfcOpenShell_FIND_VERSION) + list(APPEND _IfcOpenShell_find_args "${IfcOpenShell_FIND_VERSION}") + if(IfcOpenShell_FIND_VERSION_EXACT) + list(APPEND _IfcOpenShell_find_args EXACT) + endif() +endif() +list(APPEND _IfcOpenShell_find_args CONFIG QUIET) +if(IfcOpenShell_FIND_COMPONENTS) + list(APPEND _IfcOpenShell_find_args COMPONENTS ${IfcOpenShell_FIND_COMPONENTS}) +endif() + +set(_IfcOpenShell_saved_module_path "${CMAKE_MODULE_PATH}") +list(REMOVE_ITEM CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +find_package(IfcOpenShell ${_IfcOpenShell_find_args}) +set(CMAKE_MODULE_PATH "${_IfcOpenShell_saved_module_path}") + +if(NOT IfcOpenShell_FOUND) + set(_IfcOpenShell_error "Could not find an IfcOpenShell CMake config package. Set IfcOpenShell_DIR or CMAKE_PREFIX_PATH.") + if(IfcOpenShell_FIND_REQUIRED) + message(FATAL_ERROR "${_IfcOpenShell_error}") + elseif(NOT IfcOpenShell_FIND_QUIETLY) + message(STATUS "${_IfcOpenShell_error}") + endif() + return() +endif() + +set(_IfcOpenShell_required_targets IfcOpenShell::IfcParse IfcOpenShell::IfcGeom) +set(_IfcOpenShell_missing_targets "") +foreach(_IfcOpenShell_target IN LISTS _IfcOpenShell_required_targets) + if(NOT TARGET ${_IfcOpenShell_target}) + list(APPEND _IfcOpenShell_missing_targets ${_IfcOpenShell_target}) + endif() +endforeach() + +if(_IfcOpenShell_missing_targets) + set(IfcOpenShell_FOUND FALSE) + string(REPLACE ";" ", " _IfcOpenShell_missing_targets_text "${_IfcOpenShell_missing_targets}") + set(_IfcOpenShell_error "IfcOpenShell config was found, but required targets are missing: ${_IfcOpenShell_missing_targets_text}.") + if(IfcOpenShell_FIND_REQUIRED) + message(FATAL_ERROR "${_IfcOpenShell_error}") + elseif(NOT IfcOpenShell_FIND_QUIETLY) + message(STATUS "${_IfcOpenShell_error}") + endif() + return() +endif() + +if(NOT DEFINED IFCOPENSHELL_WITH_OPENCASCADE) + set(IFCOPENSHELL_WITH_OPENCASCADE OFF) + if(TARGET IfcOpenShell::geometry_kernel_opencascade) + set(IFCOPENSHELL_WITH_OPENCASCADE ON) + endif() +endif() + +if(NOT DEFINED IFCOPENSHELL_WITH_CGAL) + set(IFCOPENSHELL_WITH_CGAL OFF) + if(TARGET IfcOpenShell::IFCOPENSHELL_CGAL) + set(IFCOPENSHELL_WITH_CGAL ON) + endif() +endif() + +if(NOT DEFINED IFCOPENSHELL_IFCXML) + set(IFCOPENSHELL_IFCXML OFF) +endif() + +if(NOT DEFINED IFCOPENSHELL_WITH_ROCKSDB) + set(IFCOPENSHELL_WITH_ROCKSDB OFF) +endif() + +set(IFCOPENSHELL_LIBRARIES IfcOpenShell::IfcParse) +foreach(_IfcOpenShell_target IN ITEMS IfcOpenShell::geometry_serializer IfcOpenShell::Serializers) + if(TARGET ${_IfcOpenShell_target}) + list(APPEND IFCOPENSHELL_LIBRARIES ${_IfcOpenShell_target}) + endif() +endforeach() + +set(IFCOPENSHELL_KERNEL_LIBRARIES "") +foreach(_IfcOpenShell_target IN ITEMS + IfcOpenShell::geometry_kernel_opencascade + IfcOpenShell::geometry_kernel_cgal + IfcOpenShell::geometry_kernel_cgal_simple +) + if(TARGET ${_IfcOpenShell_target}) + list(APPEND IFCOPENSHELL_KERNEL_LIBRARIES ${_IfcOpenShell_target}) + endif() +endforeach() + +set(IFCOPENSHELL_GEOMETRY_LIBRARIES IfcOpenShell::IfcGeom ${IFCOPENSHELL_KERNEL_LIBRARIES}) + +if(TARGET IfcOpenShell::OpenCASCADE_INTERFACE) + set(OpenCASCADE_LIBRARIES IfcOpenShell::OpenCASCADE_INTERFACE) +endif() + +if(TARGET IfcOpenShell::IFCOPENSHELL_CGAL) + set(CGAL_LIBRARIES IfcOpenShell::IFCOPENSHELL_CGAL) +endif() + +if(TARGET IfcOpenShell::svgfill) + set(IFCOPENSHELL_SVGFILL_LIBRARY IfcOpenShell::svgfill) +endif() + +mark_as_advanced(IfcOpenShell_DIR) + +unset(_IfcOpenShell_error) +unset(_IfcOpenShell_find_args) +unset(_IfcOpenShell_missing_targets) +unset(_IfcOpenShell_missing_targets_text) +unset(_IfcOpenShell_required_targets) +unset(_IfcOpenShell_target) diff --git a/cmake/IfcOpenShellConfig.cmake.in b/cmake/IfcOpenShellConfig.cmake.in index e5e5d350b8..741e4fa233 100644 --- a/cmake/IfcOpenShellConfig.cmake.in +++ b/cmake/IfcOpenShellConfig.cmake.in @@ -7,12 +7,26 @@ set(IFCOPENSHELL_WITH_OPENCASCADE @WITH_OPENCASCADE@) set(IFCOPENSHELL_WITH_CGAL @WITH_CGAL@) set(IFCOPENSHELL_IFCXML @IFCXML_SUPPORT@) set(IFCOPENSHELL_WITH_ROCKSDB @WITH_ROCKSDB@) +set(IFCOPENSHELL_COLLADA_SUPPORT @COLLADA_SUPPORT@) +set(IFCOPENSHELL_GLTF_SUPPORT @GLTF_SUPPORT@) +set(IFCOPENSHELL_HDF5_SUPPORT @HDF5_SUPPORT@) +set(IFCOPENSHELL_WITH_PROJ @WITH_PROJ@) +set(IFCOPENSHELL_USD_SUPPORT @USD_SUPPORT@) include(CMakeFindDependencyMacro) -set(Boost_USE_STATIC_LIBS ON) -set(Boost_USE_STATIC_RUNTIME OFF) -set(Boost_USE_MULTITHREADED ON) +set(IFCOPENSHELL_BOOST_USE_STATIC_LIBS "@Boost_USE_STATIC_LIBS@") +set(IFCOPENSHELL_BOOST_USE_STATIC_RUNTIME "@Boost_USE_STATIC_RUNTIME@") +set(IFCOPENSHELL_BOOST_USE_MULTITHREADED "@Boost_USE_MULTITHREADED@") +if(NOT "${IFCOPENSHELL_BOOST_USE_STATIC_LIBS}" STREQUAL "") + set(Boost_USE_STATIC_LIBS ${IFCOPENSHELL_BOOST_USE_STATIC_LIBS}) +endif() +if(NOT "${IFCOPENSHELL_BOOST_USE_STATIC_RUNTIME}" STREQUAL "") + set(Boost_USE_STATIC_RUNTIME ${IFCOPENSHELL_BOOST_USE_STATIC_RUNTIME}) +endif() +if(NOT "${IFCOPENSHELL_BOOST_USE_MULTITHREADED}" STREQUAL "") + set(Boost_USE_MULTITHREADED ${IFCOPENSHELL_BOOST_USE_MULTITHREADED}) +endif() set(Boost_COMPONENTS system program_options @@ -43,13 +57,33 @@ if(IFCOPENSHELL_WITH_ROCKSDB) endif() if(IFCOPENSHELL_IFCXML) - find_dependency(LibXml2 CONFIG) + find_dependency(LibXml2) endif() if(IFCOPENSHELL_WITH_CGAL) find_dependency(CGAL CONFIG) endif() +if(IFCOPENSHELL_COLLADA_SUPPORT) + find_dependency(OpenCOLLADA) +endif() + +if(IFCOPENSHELL_GLTF_SUPPORT) + find_dependency(nlohmann_json CONFIG) +endif() + +if(IFCOPENSHELL_HDF5_SUPPORT) + find_dependency(HDF5 COMPONENTS C CXX) +endif() + +if(IFCOPENSHELL_WITH_PROJ) + find_dependency(PROJ) +endif() + +if(IFCOPENSHELL_USD_SUPPORT) + find_dependency(USD) +endif() + if(IFCOPENSHELL_WITH_OPENCASCADE) find_dependency(OpenCASCADE CONFIG) if(OpenCASCADE_VERSION VERSION_LESS "7.7.0") diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index 16e3a86565..21c11d3ae0 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -17,6 +17,23 @@ # # ################################################################################ +cmake_minimum_required(VERSION 3.21) + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + project(IfcOpenShellPython LANGUAGES CXX) + set(IFCOPENSHELL_IFCWRAP_STANDALONE ON) +else() + set(IFCOPENSHELL_IFCWRAP_STANDALONE OFF) +endif() + +if(NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) +endif() +if(CMAKE_CXX_STANDARD LESS 17) + message(FATAL_ERROR "C++17 or newer is required.") +endif() +set(CMAKE_CXX_STANDARD_REQUIRED ON) + if(POLICY CMP0148) # 3.27 cmake_policy(SET CMP0148 OLD) endif() @@ -24,6 +41,35 @@ if(POLICY CMP0177) # 3.31 cmake_policy(SET CMP0177 OLD) endif() +set(_ifcwrap_feature_definitions "") +if(IFCOPENSHELL_IFCWRAP_STANDALONE) + get_filename_component(_ifcwrap_repo_root "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE) + list(PREPEND CMAKE_MODULE_PATH "${_ifcwrap_repo_root}/cmake") + + find_package(IfcOpenShell REQUIRED) + + set(WITH_OPENCASCADE "${IFCOPENSHELL_WITH_OPENCASCADE}") + set(WITH_CGAL "${IFCOPENSHELL_WITH_CGAL}") + set(SWIG_DEFINES "") + + if(IFCOPENSHELL_WITH_OPENCASCADE) + list(APPEND SWIG_DEFINES -DIFOPSH_WITH_OPENCASCADE) + list(APPEND _ifcwrap_feature_definitions IFOPSH_WITH_OPENCASCADE) + endif() + if(IFCOPENSHELL_WITH_CGAL) + list(APPEND SWIG_DEFINES -DIFOPSH_WITH_CGAL) + list(APPEND _ifcwrap_feature_definitions IFOPSH_WITH_CGAL) + endif() + if(IFCOPENSHELL_IFCXML) + list(APPEND SWIG_DEFINES -DWITH_IFCXML) + list(APPEND _ifcwrap_feature_definitions WITH_IFCXML) + endif() + if(IFCOPENSHELL_WITH_ROCKSDB) + list(APPEND SWIG_DEFINES -DIFOPSH_WITH_ROCKSDB) + list(APPEND _ifcwrap_feature_definitions IFOPSH_WITH_ROCKSDB) + endif() +endif() + find_package(SWIG) if(NOT SWIG_FOUND) message( @@ -68,7 +114,15 @@ include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) set(CMAKE_SWIG_FLAGS ${SWIG_DEFINES}) if(WITH_CGAL) - set(LIBSVGFILL svgfill) + if(IFCOPENSHELL_IFCWRAP_STANDALONE) + if(TARGET IfcOpenShell::svgfill) + set(LIBSVGFILL IfcOpenShell::svgfill) + else() + message(FATAL_ERROR "IfcOpenShell was built with CGAL, but the exported svgfill target was not found.") + endif() + else() + set(LIBSVGFILL svgfill) + endif() endif() set_source_files_properties(IfcPython.i PROPERTIES CPLUSPLUS ON) @@ -113,7 +167,21 @@ else() endif() target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module) -set_property(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) +if(_ifcwrap_feature_definitions) + target_compile_definitions(ifcopenshell_wrapper PRIVATE ${_ifcwrap_feature_definitions}) +endif() +if(IFCOPENSHELL_IFCWRAP_STANDALONE) + set(_ifcwrap_ifcopenshell_libraries ${IFCOPENSHELL_LIBRARIES}) + set(_ifcwrap_geometry_libraries ${IFCOPENSHELL_GEOMETRY_LIBRARIES}) + set(_ifcwrap_cgal_libraries "") + set(_ifcwrap_swig_depends "") +else() + set(_ifcwrap_ifcopenshell_libraries ${IFCOPENSHELL_LIBRARIES}) + set(_ifcwrap_geometry_libraries IfcGeom ${kernel_libraries}) + set(_ifcwrap_cgal_libraries ${CGAL_LIBRARIES}) + set(_ifcwrap_swig_depends ${IFCOPENSHELL_LIBRARIES}) +endif() +set_property(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${_ifcwrap_swig_depends}) if(WASM_BUILD) # SIDE_MODULE=1 - add to .so all symbols from linked archives (default used by pyodide). # Since currently libIfcGeom.a seems to be linked twice it results in duplicated symbols and compilation errors. @@ -134,14 +202,14 @@ if("$ENV{LDFLAGS}" MATCHES ".undefined.suppress") # On osx there is some state in the python dylib. With `-Wl,undefined,suppress` we can ignore the missing symbols at compile time. target_link_libraries( ifcopenshell_wrapper - PRIVATE ${IFCOPENSHELL_LIBRARIES} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL} + PRIVATE ${_ifcwrap_ifcopenshell_libraries} ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${LIBSVGFILL} ) else() - target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) + target_link_libraries(ifcopenshell_wrapper PRIVATE ${_ifcwrap_ifcopenshell_libraries} ${LIBSVGFILL}) endif() -target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES}) -target_link_libraries(ifcopenshell_wrapper PRIVATE IfcGeom ${kernel_libraries}) -if((NOT WIN32) AND BUILD_SHARED_LIBS) +target_link_libraries(ifcopenshell_wrapper PRIVATE ${_ifcwrap_cgal_libraries}) +target_link_libraries(ifcopenshell_wrapper PRIVATE ${_ifcwrap_geometry_libraries}) +if((NOT WIN32) AND BUILD_SHARED_LIBS AND COMMAND SET_INSTALL_RPATHS) SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}") endif() @@ -194,7 +262,7 @@ if(Python_Interpreter_FOUND OR PYTHON_MODULE_INSTALL_DIR) endif() endforeach() install( - FILES "${CMAKE_BINARY_DIR}/ifcwrap/ifcopenshell_wrapper.py" + FILES "${CMAKE_CURRENT_BINARY_DIR}/ifcopenshell_wrapper.py" DESTINATION "${python_package_dir}/ifcopenshell" ) install(TARGETS ifcopenshell_wrapper DESTINATION "${python_package_dir}/ifcopenshell") diff --git a/src/serializers/CMakeLists.txt b/src/serializers/CMakeLists.txt index 94b30a0e38..b18c8a59c3 100644 --- a/src/serializers/CMakeLists.txt +++ b/src/serializers/CMakeLists.txt @@ -36,7 +36,7 @@ target_link_libraries( IfcParse ) -install(TARGETS Serializers) +install(TARGETS Serializers EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) # Can't use `PUBLIC_HEADER` since we need two folders. install(FILES ${SERIALIZERS_H_FILES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/serializers/") diff --git a/src/serializers/schema_dependent/CMakeLists.txt b/src/serializers/schema_dependent/CMakeLists.txt index 73c1e5d3e7..a9c1107bcc 100644 --- a/src/serializers/schema_dependent/CMakeLists.txt +++ b/src/serializers/schema_dependent/CMakeLists.txt @@ -13,6 +13,7 @@ foreach(schema ${SCHEMA_VERSIONS}) if(NOT WASM_BUILD) target_link_libraries(Serializers_ifc${schema} ${OpenCASCADE_LIBRARIES}) endif() + install(TARGETS Serializers_ifc${schema} EXPORT ${IFCOPENSHELL_EXPORT_TARGETS}) endforeach() set(SERIALIZER_SCHEMA_LIBRARIES ${SERIALIZER_SCHEMA_LIBRARIES} PARENT_SCOPE)