diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b296b3f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,65 @@ +cmake_minimum_required(VERSION 3.16) +project(harikoff VERSION 0.00.002 LANGUAGES CXX) + +# Set C++ standard +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# Compiler flags +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic") + +# Mind oscillator configuration +set(MIND_VOSCILLATOR_PERIOD_MS 33 CACHE STRING "Mind's virtual osc clock rate (ms)") +if(NOT MIND_VOSCILLATOR_PERIOD_MS GREATER 0) + message(FATAL_ERROR "MIND_VOSCILLATOR_PERIOD_MS must be a positive integer > 0") +endif() +math(EXPR MIND_VOSCILLATOR_FREQ_MS "1000 / ${MIND_VOSCILLATOR_PERIOD_MS}") + +# Configure config.h +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/include/config.h +) + +# Include directories +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/hcore/include + ${CMAKE_CURRENT_BINARY_DIR}/include +) + +# Find dependencies +find_package(Boost 1.69.0 REQUIRED COMPONENTS system) +find_package(PkgConfig REQUIRED) + +# Flex/Bison setup +find_package(FLEX REQUIRED) +find_package(BISON REQUIRED) + +# XCB (optional, controlled by feature flags) +option(ENABLE_XCB "Enable XCB/Xorg support" ON) +if(ENABLE_XCB) + pkg_check_modules(XCB REQUIRED xcb) +endif() + +# Add subdirectories +add_subdirectory(hcore) +add_subdirectory(commonLibs) + +# Main executable +add_executable(harikoff main.cpp) +target_link_libraries(harikoff + hcore + deviceManager + senseApis + ${Boost_LIBRARIES} + dl +) + +# Install rules +install(TARGETS harikoff DESTINATION bin) \ No newline at end of file diff --git a/commonLibs/CMakeLists.txt b/commonLibs/CMakeLists.txt new file mode 100644 index 0000000..9eb94c8 --- /dev/null +++ b/commonLibs/CMakeLists.txt @@ -0,0 +1,4 @@ +# Conditional compilation based on feature flags +if(ENABLE_XCB) + add_subdirectory(xcbXorg) +endif() \ No newline at end of file diff --git a/commonLibs/xcbXorg/CMakeLists.txt b/commonLibs/xcbXorg/CMakeLists.txt new file mode 100644 index 0000000..df5be98 --- /dev/null +++ b/commonLibs/xcbXorg/CMakeLists.txt @@ -0,0 +1,14 @@ +add_library(xcbXorg SHARED + xcbXorg.cpp +) + +target_include_directories(xcbXorg PUBLIC + ${XCB_INCLUDE_DIRS} +) + +target_link_libraries(xcbXorg + ${XCB_LIBRARIES} +) + +# Install rules +install(TARGETS xcbXorg DESTINATION lib) \ No newline at end of file diff --git a/hcore/CMakeLists.txt b/hcore/CMakeLists.txt new file mode 100644 index 0000000..7ba6305 --- /dev/null +++ b/hcore/CMakeLists.txt @@ -0,0 +1,19 @@ +# Core library +add_library(hcore STATIC + mind.cpp + opts.cpp + componentThread.cpp +) + +target_include_directories(hcore PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Device manager (with Flex/Bison) +add_subdirectory(deviceManager) + +# Sense APIs +add_subdirectory(senseApis) + +# Marionette +add_subdirectory(marionette) \ No newline at end of file diff --git a/hcore/deviceManager/CMakeLists.txt b/hcore/deviceManager/CMakeLists.txt new file mode 100644 index 0000000..c0cc2ef --- /dev/null +++ b/hcore/deviceManager/CMakeLists.txt @@ -0,0 +1,31 @@ +# 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} +) \ No newline at end of file diff --git a/hcore/marionette/CMakeLists.txt b/hcore/marionette/CMakeLists.txt new file mode 100644 index 0000000..471737d --- /dev/null +++ b/hcore/marionette/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(marionette STATIC + marionette.cpp +) + +target_include_directories(marionette PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include +) \ No newline at end of file diff --git a/hcore/senseApis/CMakeLists.txt b/hcore/senseApis/CMakeLists.txt new file mode 100644 index 0000000..334508b --- /dev/null +++ b/hcore/senseApis/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(senseApis STATIC + senseApiManager.cpp +) + +target_include_directories(senseApis PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include +) \ No newline at end of file