From b7a919925337c18ed90446180d3460d24463d19e Mon Sep 17 00:00:00 2001 From: Esteban DUGUEPEROUX Date: Sun, 30 Nov 2025 13:33:56 +0100 Subject: [PATCH] cmake: Externalize geometry mapping target cmake config --- cmake/CMakeLists.txt | 57 ------------------------ src/ifcgeom/CMakeLists.txt | 23 ++++++++++ src/ifcgeom/Serialization/CMakeLists.txt | 3 +- src/ifcgeom/mapping/CMakeLists.txt | 16 +++++++ 4 files changed, 41 insertions(+), 58 deletions(-) create mode 100644 src/ifcgeom/mapping/CMakeLists.txt diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index fd46a855a8..38f3d48899 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -205,9 +205,6 @@ if(WITH_CGAL) endif() if(WITH_OPENCASCADE) - find_package(OpenCASCADE REQUIRED) - # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file - set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) find_package(OpenCASCADE REQUIRED) # Map OpenCASCADE_LIBRARIES variable from OpenCASCADEConfig.cmake to OPENCASCADE_LIBRARIES used by kernel generic cmake file set(OPENCASCADE_LIBRARIES ${OpenCASCADE_LIBRARIES}) @@ -330,25 +327,6 @@ find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") message(STATUS "Boost libraries found in ${Boost_LIBRARY_DIRS}") -if(NOT MINIMAL_BUILD) - # libxml2 is required for IFCXML (optional) and SVGFILL (mandatory) - if(IFCXML_SUPPORT) - find_package(LibXml2 REQUIRED) - endif() -endif() - -if(IFCXML_SUPPORT) - add_definitions(-DWITH_IFCXML) - set(SWIG_DEFINES ${SWIG_DEFINES} -DWITH_IFCXML) -endif() - -if(BUILD_IFCGEOM) - # Open CASCADE - if(WITH_OPENCASCADE) - find_package(OpenCASCADE REQUIRED) - endif(WITH_OPENCASCADE) -endif(BUILD_IFCGEOM) - if(COLLADA_SUPPORT) find_package(OpenCOLLADA REQUIRED) endif() @@ -568,13 +546,6 @@ endif() add_subdirectory(../src/ifcparse ifcparse) set(IFCOPENSHELL_LIBRARIES IfcParse) -if(BUILD_IFCGEOM) - foreach(schema ${SCHEMA_VERSIONS}) - set(IFCGEOM_SCHEMA_LIBRARIES ${IFCGEOM_SCHEMA_LIBRARIES} geometry_mapping_ifc${schema}) - endforeach() - set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} IfcGeom ${IFCGEOM_SCHEMA_LIBRARIES}) -endif() - if(BUILD_IFCGEOM) # CGAL::CGAL target already has dependencies resolved. if(WITH_CGAL AND CGAL_DIR) @@ -595,34 +566,6 @@ if(BUILD_IFCGEOM) endif() add_subdirectory(../src/ifcgeom ifcgeom) - - # IfcGeom - foreach(schema ${SCHEMA_VERSIONS}) - file(GLOB IFCGEOM_I_FILES ../src/ifcgeom/mapping/*.i) - file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/mapping/*.h) - file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/mapping/*.cpp) - set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) - - add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) - set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") - target_link_libraries(geometry_mapping_ifc${schema} IfcParse) - list(APPEND mapping_libraries geometry_mapping_ifc${schema}) - endforeach() - - # IfcGeom (schema agnostic) - file(GLOB SCHEMA_AGNOSTIC_H_FILES ../src/ifcgeom/*.h) - file(GLOB SCHEMA_AGNOSTIC_CPP_FILES ../src/ifcgeom/*.cpp) - set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) - - add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) - set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") - - if(UNIX) - find_package(Threads) - endif() - - target_link_libraries(IfcGeom IfcParse ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} ${OpenCASCADE_LIBRARIES}) - endif(BUILD_IFCGEOM) if(BUILD_CONVERT OR BUILD_IFCPYTHON) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index dfea18038e..1c58f7d299 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -6,3 +6,26 @@ if((BUILD_CONVERT OR BUILD_IFCPYTHON) AND WITH_OPENCASCADE) set(IFCOPENSHELL_LIBRARIES ${IFCOPENSHELL_LIBRARIES} PARENT_SCOPE) endif() +add_subdirectory(mapping) + +# IfcGeom (schema agnostic) +file(GLOB SCHEMA_AGNOSTIC_H_FILES *.h) +file(GLOB SCHEMA_AGNOSTIC_CPP_FILES *.cpp) +set(SCHEMA_AGNOSTIC_FILES ${SCHEMA_AGNOSTIC_H_FILES} ${SCHEMA_AGNOSTIC_CPP_FILES}) + +add_library(IfcGeom ${SCHEMA_AGNOSTIC_FILES}) +set_target_properties(IfcGeom PROPERTIES COMPILE_FLAGS -DIFC_GEOM_EXPORTS VERSION "${PROJECT_VERSION}" SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") + +if(UNIX) + find_package(Threads) +endif() + +if(WASM_BUILD) + target_link_libraries(IfcGeom ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +else() + target_link_libraries(IfcGeom IfcParse ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +endif() + +install(FILES ${SCHEMA_AGNOSTIC_H_FILES} + DESTINATION ${INCLUDEDIR}/ifcgeom +) \ No newline at end of file diff --git a/src/ifcgeom/Serialization/CMakeLists.txt b/src/ifcgeom/Serialization/CMakeLists.txt index e105effa6c..9031c08148 100644 --- a/src/ifcgeom/Serialization/CMakeLists.txt +++ b/src/ifcgeom/Serialization/CMakeLists.txt @@ -1,5 +1,4 @@ add_subdirectory(schema) -set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) add_library(geometry_serializer STATIC Serialization.cpp) set_target_properties(geometry_serializer PROPERTIES COMPILE_FLAGS "-DIFC_GEOMSERIALIZATION_EXPORTS") @@ -13,3 +12,5 @@ install(FILES ${IFCGEOM_SERIALIZATION_H_FILE} ) install(TARGETS geometry_serializer ${geometry_serializer_libraries}) + +set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE) diff --git a/src/ifcgeom/mapping/CMakeLists.txt b/src/ifcgeom/mapping/CMakeLists.txt new file mode 100644 index 0000000000..4778f1d22b --- /dev/null +++ b/src/ifcgeom/mapping/CMakeLists.txt @@ -0,0 +1,16 @@ +foreach(schema ${SCHEMA_VERSIONS}) + file(GLOB IFCGEOM_I_FILES *.i) + file(GLOB IFCGEOM_H_FILES *.h) + file(GLOB IFCGEOM_CPP_FILES *.cpp) + set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} ${IFCGEOM_I_FILES}) + + add_library(geometry_mapping_ifc${schema} OBJECT ${IFCGEOM_FILES}) + set_target_properties(geometry_mapping_ifc${schema} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIfcSchema=Ifc${schema}") + target_link_libraries(geometry_mapping_ifc${schema} IfcParse) + + list(APPEND mapping_libraries geometry_mapping_ifc${schema}) + + install(TARGETS geometry_mapping_ifc${schema}) +endforeach() + +set(mapping_libraries ${mapping_libraries} PARENT_SCOPE)