mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 18:16:20 +00:00
ifcviewer: split out IfcViewerCore static library
Pull the Qt-free / OpenCASCADE-free files out of the IfcViewer target into a new IfcViewerCore static lib: BufferPool, ChunkPlanner, InstanceCompose, SidecarCache, StreamingLoader, StreamingThread, LodBuilder, plus the header-only InstancedGeometry / ModelGpuData / VertexQuantization / Selection / Visibility headers. IfcViewer PUBLIC- links IfcViewerCore so existing consumers see no change. This is the boundary the Emscripten web target will link against — keeps Qt, IfcGeom, OpenCASCADE, CGAL, and Boost out of the wasm build. Explicit file list, not glob, because the boundary is the whole point.
This commit is contained in:
@@ -105,9 +105,61 @@ endif()
|
|||||||
set(WGPU_NATIVE_LIB_DIR "${wgpu_native_SOURCE_DIR}/lib" CACHE INTERNAL
|
set(WGPU_NATIVE_LIB_DIR "${wgpu_native_SOURCE_DIR}/lib" CACHE INTERNAL
|
||||||
"Directory containing the wgpu-native shared library")
|
"Directory containing the wgpu-native shared library")
|
||||||
|
|
||||||
file(GLOB IFCVIEWER_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
|
# IfcViewerCore: the Qt-free, OpenCASCADE-free runtime subset. Buffer
|
||||||
file(GLOB IFCVIEWER_H_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
|
# pool, chunk planner, instance composition, sidecar cache, streaming
|
||||||
set(IFCVIEWER_FILES ${IFCVIEWER_CPP_FILES} ${IFCVIEWER_H_FILES})
|
# I/O, LOD builder, vertex quantisation — everything needed to load a
|
||||||
|
# pre-baked .ifcview sidecar, manage GPU memory, and feed the cull/draw
|
||||||
|
# loop without dragging Qt, IfcGeom, OpenCASCADE, CGAL, or Boost into
|
||||||
|
# the build. The Emscripten/web target (src/ifcviewer-web) links only
|
||||||
|
# IfcViewerCore; the desktop IfcViewer library below adds Qt-coupled
|
||||||
|
# pieces (ViewportWindow, OverlayRenderer, Federation, etc.) on top.
|
||||||
|
#
|
||||||
|
# Keep this list explicit (no glob) — the boundary is the whole point.
|
||||||
|
set(IFCVIEWER_CORE_SOURCES
|
||||||
|
BufferPool.cpp
|
||||||
|
ChunkPlanner.cpp
|
||||||
|
InstanceCompose.cpp
|
||||||
|
LodBuilder.cpp
|
||||||
|
SidecarCache.cpp
|
||||||
|
StreamingLoader.cpp
|
||||||
|
StreamingThread.cpp
|
||||||
|
)
|
||||||
|
set(IFCVIEWER_CORE_HEADERS
|
||||||
|
BufferPool.h
|
||||||
|
ChunkPlanner.h
|
||||||
|
InstanceCompose.h
|
||||||
|
InstancedGeometry.h
|
||||||
|
LodBuilder.h
|
||||||
|
ModelGpuData.h
|
||||||
|
SelectionState.h
|
||||||
|
SidecarCache.h
|
||||||
|
StreamingLoader.h
|
||||||
|
StreamingThread.h
|
||||||
|
VertexQuantization.h
|
||||||
|
VisibilityState.h
|
||||||
|
)
|
||||||
|
list(TRANSFORM IFCVIEWER_CORE_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||||
|
list(TRANSFORM IFCVIEWER_CORE_HEADERS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||||
|
|
||||||
|
add_library(IfcViewerCore STATIC ${IFCVIEWER_CORE_SOURCES} ${IFCVIEWER_CORE_HEADERS})
|
||||||
|
target_include_directories(IfcViewerCore PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
target_link_libraries(IfcViewerCore PUBLIC
|
||||||
|
Eigen3::Eigen
|
||||||
|
wgpu_native
|
||||||
|
${MESH_OPTIMIZER_LIB} # set below if WITH_MESH_OPTIMIZER
|
||||||
|
)
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
target_link_libraries(IfcViewerCore PUBLIC Threads::Threads)
|
||||||
|
endif()
|
||||||
|
install(TARGETS IfcViewerCore EXPORT ${IFCOPENSHELL_EXPORT_TARGETS})
|
||||||
|
|
||||||
|
# IfcViewer: the Qt + IfcGeom + OpenCASCADE shell — everything in this
|
||||||
|
# directory NOT already pulled into IfcViewerCore above.
|
||||||
|
file(GLOB _ifcviewer_all_cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
|
||||||
|
file(GLOB _ifcviewer_all_h ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
|
||||||
|
set(IFCVIEWER_FILES ${_ifcviewer_all_cpp} ${_ifcviewer_all_h})
|
||||||
|
list(REMOVE_ITEM IFCVIEWER_FILES ${IFCVIEWER_CORE_SOURCES} ${IFCVIEWER_CORE_HEADERS})
|
||||||
|
|
||||||
# Cocoa bridge for the CAMetalLayer surface attach — Objective-C++.
|
# Cocoa bridge for the CAMetalLayer surface attach — Objective-C++.
|
||||||
# Only compiled into the target on Apple platforms; CMake handles `.mm`
|
# Only compiled into the target on Apple platforms; CMake handles `.mm`
|
||||||
@@ -131,6 +183,8 @@ if (WITH_MESH_OPTIMIZER)
|
|||||||
find_package(meshoptimizer REQUIRED)
|
find_package(meshoptimizer REQUIRED)
|
||||||
set(MESH_OPTIMIZER_LIB meshoptimizer::meshoptimizer)
|
set(MESH_OPTIMIZER_LIB meshoptimizer::meshoptimizer)
|
||||||
target_compile_definitions(IfcViewer PUBLIC -DWITH_MESH_OPTIMIZER)
|
target_compile_definitions(IfcViewer PUBLIC -DWITH_MESH_OPTIMIZER)
|
||||||
|
target_compile_definitions(IfcViewerCore PUBLIC -DWITH_MESH_OPTIMIZER)
|
||||||
|
target_link_libraries(IfcViewerCore PUBLIC meshoptimizer::meshoptimizer)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Consumers include headers as `#include "ViewportWindow.h"`, so expose this
|
# Consumers include headers as `#include "ViewportWindow.h"`, so expose this
|
||||||
@@ -140,6 +194,7 @@ target_include_directories(IfcViewer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|||||||
add_dependencies(IfcViewer ${kernel_libraries} ${mapping_libraries})
|
add_dependencies(IfcViewer ${kernel_libraries} ${mapping_libraries})
|
||||||
|
|
||||||
target_link_libraries(IfcViewer PUBLIC
|
target_link_libraries(IfcViewer PUBLIC
|
||||||
|
IfcViewerCore
|
||||||
IfcUtil
|
IfcUtil
|
||||||
IfcGeom
|
IfcGeom
|
||||||
IfcParse
|
IfcParse
|
||||||
@@ -150,7 +205,6 @@ target_link_libraries(IfcViewer PUBLIC
|
|||||||
Qt${QT_VERSION}::Gui
|
Qt${QT_VERSION}::Gui
|
||||||
Eigen3::Eigen
|
Eigen3::Eigen
|
||||||
wgpu_native
|
wgpu_native
|
||||||
${MESH_OPTIMIZER_LIB}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Qt platform-handle access (QNativeInterface::QX11Application etc.) is in
|
# Qt platform-handle access (QNativeInterface::QX11Application etc.) is in
|
||||||
|
|||||||
Reference in New Issue
Block a user