# Flex/Bison generated files
set(LEX_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/deviceSpecl.cc)
set(YACC_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/deviceSpecp.cc)
set(YACC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/deviceSpecp.hh)

# Generate Flex/Bison files using custom commands
add_custom_command(
    OUTPUT ${LEX_OUTPUT}
    COMMAND ${FLEX_EXECUTABLE} --header-file=${CMAKE_CURRENT_BINARY_DIR}/deviceSpecl.hh -o ${LEX_OUTPUT} ${CMAKE_CURRENT_SOURCE_DIR}/deviceSpecl.ll
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/deviceSpecl.ll
    COMMENT "Generating deviceSpecl.cc from deviceSpecl.ll"
)

add_custom_command(
    OUTPUT ${YACC_OUTPUT} ${YACC_HEADER}
    COMMAND ${BISON_EXECUTABLE} -p deviceSpecp --header=${YACC_HEADER} -o ${YACC_OUTPUT} ${CMAKE_CURRENT_SOURCE_DIR}/deviceSpecp.yy
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/deviceSpecp.yy
    COMMENT "Generating deviceSpecp.cc and deviceSpecp.hh from deviceSpecp.yy"
)

# Device manager library
add_library(deviceManager STATIC
    deviceManager.cpp
    deviceSpecParser.cpp
    ${LEX_OUTPUT}
    ${YACC_OUTPUT}
)

target_include_directories(deviceManager PUBLIC
    ${CMAKE_CURRENT_BINARY_DIR}
) 