project(libslic3r)
cmake_minimum_required(VERSION 2.6)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libslic3r_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/libslic3r_version.h @ONLY)

add_library(libslic3r STATIC
    BoundingBox.cpp
    BoundingBox.hpp
    BridgeDetector.cpp
    BridgeDetector.hpp
    ClipperUtils.cpp
    ClipperUtils.hpp
    Config.cpp
    Config.hpp
    EdgeGrid.cpp
    EdgeGrid.hpp
    ExPolygon.cpp
    ExPolygon.hpp
    ExPolygonCollection.cpp
    ExPolygonCollection.hpp
    Extruder.cpp
    Extruder.hpp
    ExtrusionEntity.cpp
    ExtrusionEntity.hpp
    ExtrusionEntityCollection.cpp
    ExtrusionEntityCollection.hpp
    ExtrusionSimulator.cpp
    ExtrusionSimulator.hpp
    FileParserError.hpp
    Fill/Fill.cpp
    Fill/Fill.hpp
    Fill/Fill3DHoneycomb.cpp
    Fill/Fill3DHoneycomb.hpp
    Fill/FillBase.cpp
    Fill/FillBase.hpp
    Fill/FillConcentric.cpp
    Fill/FillConcentric.hpp
    Fill/FillHoneycomb.cpp
    Fill/FillHoneycomb.hpp
    Fill/FillGyroid.cpp
    Fill/FillGyroid.hpp
    Fill/FillPlanePath.cpp
    Fill/FillPlanePath.hpp
    Fill/FillRectilinear.cpp
    Fill/FillRectilinear.hpp
    Fill/FillRectilinear2.cpp
    Fill/FillRectilinear2.hpp
    Fill/FillRectilinear3.cpp
    Fill/FillRectilinear3.hpp
    Flow.cpp
    Flow.hpp
    Format/3mf.cpp
    Format/3mf.hpp
    Format/AMF.cpp
    Format/AMF.hpp
    Format/OBJ.cpp
    Format/OBJ.hpp
    Format/objparser.cpp
    Format/objparser.hpp
    Format/PRUS.cpp
    Format/PRUS.hpp
    Format/STL.cpp
    Format/STL.hpp
    GCode/Analyzer.cpp
    GCode/Analyzer.hpp
    GCode/CoolingBuffer.cpp
    GCode/CoolingBuffer.hpp
    GCode/PostProcessor.cpp
    GCode/PostProcessor.hpp    
    GCode/PressureEqualizer.cpp
    GCode/PressureEqualizer.hpp
    GCode/PreviewData.cpp
    GCode/PreviewData.hpp
    GCode/PrintExtents.cpp
    GCode/PrintExtents.hpp
    GCode/SpiralVase.cpp
    GCode/SpiralVase.hpp
    GCode/ToolOrdering.cpp
    GCode/ToolOrdering.hpp
    GCode/WipeTower.hpp
    GCode/WipeTowerPrusaMM.cpp
    GCode/WipeTowerPrusaMM.hpp
    GCode.cpp
    GCode.hpp
    GCodeReader.cpp
    GCodeReader.hpp
    GCodeSender.cpp
    GCodeSender.hpp
    GCodeTimeEstimator.cpp
    GCodeTimeEstimator.hpp
    GCodeWriter.cpp
    GCodeWriter.hpp
    Geometry.cpp
    Geometry.hpp
    Int128.hpp
#    KdTree.hpp
    Layer.cpp
    Layer.hpp
    LayerRegion.cpp
    libslic3r.h
    "${CMAKE_CURRENT_BINARY_DIR}/libslic3r_version.h"
    Line.cpp
    Line.hpp
    Model.cpp
    Model.hpp
    ModelArrange.hpp
    MotionPlanner.cpp
    MotionPlanner.hpp
    MultiPoint.cpp
    MultiPoint.hpp
    MutablePriorityQueue.hpp
    PerimeterGenerator.cpp
    PerimeterGenerator.hpp
    PlaceholderParser.cpp
    PlaceholderParser.hpp
    Point.cpp
    Point.hpp
    Polygon.cpp
    Polygon.hpp
    Polyline.cpp
    Polyline.hpp
    PolylineCollection.cpp
    PolylineCollection.hpp
    Print.cpp
    Print.hpp
    PrintExport.hpp
    PrintConfig.cpp
    PrintConfig.hpp
    PrintObject.cpp
    PrintRegion.cpp
    Rasterizer/Rasterizer.hpp
    Rasterizer/Rasterizer.cpp
    Slicing.cpp
    Slicing.hpp
    SlicingAdaptive.cpp
    SlicingAdaptive.hpp
    SupportMaterial.cpp
    SupportMaterial.hpp
    Surface.cpp
    Surface.hpp
    SurfaceCollection.cpp
    SurfaceCollection.hpp
    SVG.cpp
    SVG.hpp
    Technologies.hpp
    TriangleMesh.cpp
    TriangleMesh.hpp
    SLABasePool.hpp
    SLABasePool.cpp
    utils.cpp
    Utils.hpp
)

target_compile_definitions(libslic3r PUBLIC -DUSE_TBB ${PNG_DEFINITIONS})
target_include_directories(libslic3r PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${LIBNEST2D_INCLUDES} ${PNG_INCLUDE_DIRS})
target_link_libraries(libslic3r
    ${LIBNEST2D_LIBRARIES}
    admesh
    miniz 
    ${Boost_LIBRARIES}
    clipper 
    nowide
    ${EXPAT_LIBRARIES} 
    ${GLEW_LIBRARIES} 
    ${PNG_LIBRARIES}
    polypartition 
    poly2tri 
    qhull
    semver
    ${TBB_LIBRARIES} 
    )

if(SLIC3R_PROFILE)
    target_link_libraries(slic3r Shiny)
endif()
