# Include Flex/Bison generation rules
include(${CMAKE_SOURCE_DIR}/cmake/flexYacc.cmake)

# Consolidated smocore library with all source files
add_library(smocore STATIC
    # Core files
    mind.cpp
    opts.cpp
    componentThread.cpp
    component.cpp
    painfulQuale.cpp
    qutex.cpp
    lockerAndInvokerBase.cpp
    lockSet.cpp

    # Body
    body/body.cpp

    # Marionette
    marionette/main.cpp
    marionette/salmanoff.cpp
    marionette/lifetime.cpp
    marionette/qualeEvent.cpp

    # DeviceManager
    deviceManager/deviceManager.cpp
    deviceManager/deviceAttachmentPipeSpecParser.cpp
    ${LEX_OUTPUT}
    ${YACC_OUTPUT}

    # SenseApis
    senseApis/senseApiManager.cpp

    # MindManager
    mindManager/mindManager.cpp
)

target_include_directories(smocore PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_BINARY_DIR}
)

# Link against pthread for CPU affinity functions
find_package(Threads REQUIRED)
target_link_libraries(smocore PRIVATE Threads::Threads)
