set(HEADERS
    Bindings.h
    CmdLineInline.h
    ObservableInline.h
    ObservableListInline.h
    ObservableMapInline.h)
set(HEADERS_PRIVATE)
set(SOURCE
    Box.cpp
    Bindings.cpp
    CmdLine.cpp
    Color.cpp
    Command.cpp
    Context.cpp
    DiagSystem.cpp
    FileLogSystem.cpp
    FontSystem.cpp
    IApp.cpp
    IRender.cpp
    ISystem.cpp
    Image.cpp
    LogSystem.cpp
    Math.cpp
    Matrix.cpp
    Memory.cpp
    Mesh.cpp
    Noise.cpp
    OS.cpp
    Observable.cpp
    ObservableList.cpp
    ObservableMap.cpp
    Path.cpp
    Random.cpp
    Range.cpp
    RenderOptions.cpp
    Size.cpp
    String.cpp
    Time.cpp
    Timer.cpp
    Vector.cpp
    Version.cpp)

# Static. The bindings are linked by the feather_tk module and nothing else,
# so there is no API here for anything to import -- the module absorbs them.
add_library(ftkCorePy STATIC ${HEADERS} ${HEADERS_PRIVATE} ${SOURCE})
# Hidden, as the module is: the binding classes hold nanobind's types,
# which are hidden, and GCC warns about a class more visible than its
# members. Nothing here is exported anyway.
set_target_properties(ftkCorePy PROPERTIES
    POSITION_INDEPENDENT_CODE ON
    CXX_VISIBILITY_PRESET hidden
    VISIBILITY_INLINES_HIDDEN ON)

target_include_directories(ftkCorePy PRIVATE
    ${PROJECT_SOURCE_DIR}/lib
    ${NB_DIR}/include
    ${NB_DIR}/ext/robin_map/include)

target_link_libraries(ftkCorePy PUBLIC ftkCore PRIVATE ${ftk_NANOBIND_LIBRARY})

set_target_properties(ftkCorePy PROPERTIES FOLDER lib)
set_target_properties(ftkCorePy PROPERTIES PUBLIC_HEADER "${HEADERS}")

install(TARGETS ftkCorePy
    ARCHIVE DESTINATION lib COMPONENT dev ${ftk_PYTHON_ARCHIVE_INSTALL}
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
    PUBLIC_HEADER DESTINATION include/ftk/CorePy COMPONENT dev)
