# ── 编译选项接口目标 ──────────────────────────────

# ── foundation ─────────────────────────────────────
add_library(vde_foundation STATIC
    foundation/tolerance.cpp
    foundation/exact_predicates.cpp
    foundation/io_obj.cpp
    foundation/io_stl.cpp
    foundation/serializer.cpp
    foundation/io_ply.cpp
    foundation/io_gltf.cpp
)
target_include_directories(vde_foundation
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_foundation
    PUBLIC  vde_compile_options Eigen3::Eigen
)

# ── core ───────────────────────────────────────────
add_library(vde_core STATIC
    core/point.cpp
    core/transform.cpp
    core/polygon.cpp
    core/voronoi.cpp
    core/distance.cpp
    core/convex_hull.cpp
    core/icp.cpp
)
target_include_directories(vde_core
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_core
    PUBLIC  vde_foundation vde_compile_options
)

# ── curves ─────────────────────────────────────────
add_library(vde_curves STATIC
    curves/bezier_curve.cpp
    curves/bspline_curve.cpp
    curves/nurbs_curve.cpp
    curves/bezier_surface.cpp
    curves/bspline_surface.cpp
    curves/tessellation.cpp
)
target_include_directories(vde_curves
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_curves
    PUBLIC  vde_core vde_compile_options
)

# ── mesh ────────────────────────────────────────────
add_library(vde_mesh STATIC
    mesh/halfedge_mesh.cpp
    mesh/delaunay_2d.cpp
    mesh/cdt_2d.cpp
    mesh/delaunay_3d.cpp
    mesh/mesh_simplify.cpp
    mesh/mesh_smooth.cpp
    mesh/mesh_boolean.cpp
    mesh/mesh_quality.cpp
    mesh/mesh_repair.cpp
    mesh/alpha_shapes.cpp
    mesh/mesh_parameterize.cpp
    mesh/geodesic.cpp
    mesh/mesh_curvature.cpp
    mesh/marching_cubes.cpp
)
target_include_directories(vde_mesh
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_mesh
    PUBLIC  vde_core vde_compile_options
)

# ── spatial ─────────────────────────────────────────
add_library(vde_spatial STATIC
    spatial/bvh.cpp
    spatial/octree.cpp
    spatial/kd_tree.cpp
    spatial/r_tree.cpp
)
target_include_directories(vde_spatial
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_spatial
    PUBLIC  vde_core vde_compile_options
)

# ── boolean ─────────────────────────────────────────
add_library(vde_boolean STATIC
    boolean/boolean_2d.cpp
    boolean/boolean_mesh.cpp
    boolean/polygon_offset.cpp
)
target_include_directories(vde_boolean
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_boolean
    PUBLIC  vde_mesh vde_spatial vde_compile_options
)

# ── collision ───────────────────────────────────────
add_library(vde_collision STATIC
    collision/gjk.cpp
    collision/sat.cpp
    collision/ray_intersect.cpp
    collision/tri_intersect.cpp
)
target_include_directories(vde_collision
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_collision
    PUBLIC  vde_core vde_spatial vde_compile_options
)

# ── 聚合库 ──────────────────────────────────────────
add_library(vde INTERFACE)
target_link_libraries(vde
    INTERFACE vde_foundation
    INTERFACE vde_core
    INTERFACE vde_curves
    INTERFACE vde_mesh
    INTERFACE vde_spatial
    INTERFACE vde_boolean
    INTERFACE vde_collision
    INTERFACE vde_brep
    INTERFACE vde_sketch
)
add_library(vde::engine ALIAS vde)

# ── brep ───────────────────────────────────────────
add_library(vde_brep STATIC
    brep/brep.cpp
    brep/modeling.cpp
)
target_include_directories(vde_brep
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_brep
    PUBLIC  vde_curves vde_mesh vde_compile_options
)

# ── sketch ─────────────────────────────────────────
add_library(vde_sketch STATIC
    sketch/constraint_solver.cpp
)
target_include_directories(vde_sketch
    PUBLIC  ${CMAKE_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(vde_sketch
    PUBLIC  vde_core vde_compile_options
)
