# 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
    qutex.cpp
    lockerAndInvokerBase.cpp

    # Body
    body/body.cpp

    # Director
    director/director.cpp

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

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

    # SenseApis
    stimBuffApis/stimBuffApiManager.cpp

    # MindManager
    mindManager/mindManager.cpp
)

# Conditionally add qutexAcquisitionHistoryTracker.cpp only when debug locks are enabled
if(ENABLE_DEBUG_LOCKS)
    target_sources(smocore PRIVATE qutexAcquisitionHistoryTracker.cpp)
endif()

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)
