From 6573a1b14da310e981c7a8f03e664df7ffb1577e Mon Sep 17 00:00:00 2001 From: Hayodea Hakol Date: Mon, 15 Sep 2025 12:44:57 -0400 Subject: [PATCH] CMake: delete subdir CMakeLists; use one CMakeList for smocore --- CMakeLists.txt | 3 -- cmake/flexYacc.cmake | 72 ++++++++++++++++++++++++++++ smocore/CMakeLists.txt | 36 ++++++++++---- smocore/deviceManager/CMakeLists.txt | 29 ----------- smocore/marionette/CMakeLists.txt | 15 ------ smocore/mindManager/CMakeLists.txt | 12 ----- smocore/senseApis/CMakeLists.txt | 5 -- 7 files changed, 100 insertions(+), 72 deletions(-) create mode 100644 cmake/flexYacc.cmake delete mode 100644 smocore/deviceManager/CMakeLists.txt delete mode 100644 smocore/marionette/CMakeLists.txt delete mode 100644 smocore/mindManager/CMakeLists.txt delete mode 100644 smocore/senseApis/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index b009cbb..3e9d9c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,9 +65,6 @@ add_subdirectory(wilzorApis) add_executable(salmanoff main.cpp) target_link_libraries(salmanoff smocore - marionette - deviceManager - senseApis ${Boost_LIBRARIES} ${DL_LIBRARY} ) diff --git a/cmake/flexYacc.cmake b/cmake/flexYacc.cmake new file mode 100644 index 0000000..239429c --- /dev/null +++ b/cmake/flexYacc.cmake @@ -0,0 +1,72 @@ +# Generic Flex/Yacc Generation Functions +# This file provides reusable functions for generating C++ files from Flex/Bison sources + +# Function to generate Flex lexer files +# Usage: generate_flex_lexer(OUTPUT_VAR INPUT_FILE [PREFIX] [HEADER_DEPENDENCY]) +# OUTPUT_VAR: Variable name to store the output file path +# INPUT_FILE: Path to the .ll input file +# PREFIX: Optional prefix for the generated files (defaults to basename of input file) +# HEADER_DEPENDENCY: Optional header file that the lexer depends on (e.g., from Bison) +function(generate_flex_lexer OUTPUT_VAR INPUT_FILE) + get_filename_component(INPUT_BASENAME ${INPUT_FILE} NAME_WE) + + if(ARGC GREATER 2) + set(PREFIX ${ARGV2}) + else() + set(PREFIX ${INPUT_BASENAME}) + endif() + + set(LEX_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}.cc) + set(LEX_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}.hh) + + # Set up dependencies + set(DEPENDENCIES ${INPUT_FILE}) + if(ARGC GREATER 3) + list(APPEND DEPENDENCIES ${ARGV3}) + endif() + + add_custom_command( + OUTPUT ${LEX_OUTPUT} + DEPENDS ${DEPENDENCIES} + COMMAND ${FLEX_EXECUTABLE} --header-file=${LEX_HEADER} -o ${LEX_OUTPUT} ${INPUT_FILE} + COMMENT "Generating ${PREFIX}.cc from ${INPUT_FILE}" + ) + + set(${OUTPUT_VAR} ${LEX_OUTPUT} PARENT_SCOPE) +endfunction() + +# Function to generate Bison parser files +# Usage: generate_bison_parser(OUTPUT_VAR HEADER_VAR INPUT_FILE [PREFIX]) +# OUTPUT_VAR: Variable name to store the output .cc file path +# HEADER_VAR: Variable name to store the output .hh file path +# INPUT_FILE: Path to the .yy input file +# PREFIX: Optional prefix for the generated files (defaults to basename of input file) +function(generate_bison_parser OUTPUT_VAR HEADER_VAR INPUT_FILE) + get_filename_component(INPUT_BASENAME ${INPUT_FILE} NAME_WE) + + if(ARGC GREATER 3) + set(PREFIX ${ARGV3}) + else() + set(PREFIX ${INPUT_BASENAME}) + endif() + + set(YACC_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}.cc) + set(YACC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}.hh) + + add_custom_command( + OUTPUT ${YACC_OUTPUT} ${YACC_HEADER} + DEPENDS ${INPUT_FILE} + COMMAND ${BISON_EXECUTABLE} -p ${PREFIX} --header=${YACC_HEADER} -o ${YACC_OUTPUT} ${INPUT_FILE} + COMMENT "Generating ${PREFIX}.cc and ${PREFIX}.hh from ${INPUT_FILE}" + ) + + set(${OUTPUT_VAR} ${YACC_OUTPUT} PARENT_SCOPE) + set(${HEADER_VAR} ${YACC_HEADER} PARENT_SCOPE) +endfunction() + +# Generate device attachment parser files using the generic functions +# Generate Bison parser first (creates the header file) +generate_bison_parser(YACC_OUTPUT YACC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/deviceManager/deviceAttachmentPipeSpecp.yy deviceAttachmentPipeSpecp) + +# Generate Flex lexer with dependency on Bison header +generate_flex_lexer(LEX_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/deviceManager/deviceAttachmentPipeSpecl.ll deviceAttachmentPipeSpecl ${YACC_HEADER}) diff --git a/smocore/CMakeLists.txt b/smocore/CMakeLists.txt index 43fc808..53ff49e 100644 --- a/smocore/CMakeLists.txt +++ b/smocore/CMakeLists.txt @@ -1,22 +1,42 @@ -# Core library +# 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 + + # 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 senseApis mindManager) - -add_subdirectory(marionette) -add_subdirectory(deviceManager) -add_subdirectory(senseApis) -add_subdirectory(mindManager) +target_link_libraries(smocore PRIVATE Threads::Threads) diff --git a/smocore/deviceManager/CMakeLists.txt b/smocore/deviceManager/CMakeLists.txt deleted file mode 100644 index cceca56..0000000 --- a/smocore/deviceManager/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Flex/Bison generated files -set(LEX_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/deviceAttachmentPipeSpecl.cc) -set(YACC_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/deviceAttachmentPipeSpecp.cc) -set(YACC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/deviceAttachmentPipeSpecp.hh) - -# Generate Flex/Bison files using custom commands -add_custom_command( - OUTPUT ${LEX_OUTPUT} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/deviceAttachmentPipeSpecl.ll ${YACC_HEADER} - COMMAND ${FLEX_EXECUTABLE} --header-file=${CMAKE_CURRENT_BINARY_DIR}/deviceAttachmentPipeSpecl.hh -o ${LEX_OUTPUT} ${CMAKE_CURRENT_SOURCE_DIR}/deviceAttachmentPipeSpecl.ll - COMMENT "Generating deviceAttachmentPipeSpecl.cc from deviceAttachmentPipeSpecl.ll" -) - -add_custom_command( - OUTPUT ${YACC_OUTPUT} ${YACC_HEADER} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/deviceAttachmentPipeSpecp.yy - COMMAND ${BISON_EXECUTABLE} -p deviceAttachmentPipeSpecp --header=${YACC_HEADER} -o ${YACC_OUTPUT} ${CMAKE_CURRENT_SOURCE_DIR}/deviceAttachmentPipeSpecp.yy - COMMENT "Generating deviceAttachmentPipeSpecp.cc and deviceAttachmentPipeSpecp.hh from deviceAttachmentPipeSpecp.yy" -) - -# Device manager library -add_library(deviceManager STATIC - deviceManager.cpp - deviceAttachmentPipeSpecParser.cpp - ${LEX_OUTPUT} - ${YACC_OUTPUT} -) - -target_include_directories(deviceManager PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/smocore/marionette/CMakeLists.txt b/smocore/marionette/CMakeLists.txt deleted file mode 100644 index 62560f1..0000000 --- a/smocore/marionette/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -add_library(marionette STATIC - main.cpp - salmanoff.cpp - lifetime.cpp -) - -target_link_libraries(marionette - smocore - mindManager -) - -target_include_directories(marionette PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/../include -) diff --git a/smocore/mindManager/CMakeLists.txt b/smocore/mindManager/CMakeLists.txt deleted file mode 100644 index 835cd83..0000000 --- a/smocore/mindManager/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -add_library(mindManager STATIC - mindManager.cpp -) - -target_include_directories(mindManager PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/../include -) - -target_link_libraries(mindManager - smocore -) diff --git a/smocore/senseApis/CMakeLists.txt b/smocore/senseApis/CMakeLists.txt deleted file mode 100644 index 178787d..0000000 --- a/smocore/senseApis/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_library(senseApis STATIC - senseApiManager.cpp -) - -target_include_directories(senseApis PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)